Netdataのdbengineと専用ログによるディスク肥大化を解消・制限する方法
Netdataのキャッシュ・ログとかでディスクが肥大化する
RHEL9系のRocky Linux9の環境において、Netdata(v2系以降)をデフォルト設定のまま低スペックのクラウドで運用しています。
気がつくとディスク容量の空きがすごくすくなっていました。どのディレクトリが圧迫しているか調べるとNetdataのメトリックデータ(dbengine)と独立した専用ログ(journald@netdata)の2箇所が原因でディスクが容量が圧迫して肥大化しているようです。
本記事では、これらを適切な容量に制限し、自動で古いデータからローテーション(削除)させる恒久対策手順をまとめます。
※設定したのはサーバーはディスク容量は20Gくらいの低スペックのサーバーです
メトリックデータ(dbengine)の容量制限
Netdata では、データベース設定を [global] ではなく [db] セクションに記述する必要があります。デフォルトで有効化されている3つのデータ階層(Tier 0〜2)すべてに上限を設定します。
設定ファイルの修正
/etc/netdata/netdata.conf を開き、古い page cache size などの記述を削除またはコメントアウトした上で、以下の [db] セクションを追記します。
$ sudo vim /etc/netdata/netdata.conf
[db]
mode = dbengine
storage tiers = 3
# Tier 0(毎秒データ)のディスク上限(例: 256MB)
dbengine tier 0 disk space MB = 256
# Tier 1(毎分データ)のディスク上限(例: 128MB)
dbengine tier 1 disk space MB = 128
# Tier 2(毎時データ)のディスク上限(例: 64MB)
dbengine tier 2 disk space MB = 64
# ページキャッシュサイズ
dbengine page cache size MB = 32
反映と既存データのクリーンアップ
Netdataは既存の巨大なファイルを自動縮小するのが苦手なため、一度サービスを停止して過去データを削除してから再起動します。
# サービス停止 $ sudo systemctl stop netdata # 肥大化した3つの階層の過去データを一括削除 $ sudo rm -rf /var/cache/netdata/dbengine/* $ sudo rm -rf /var/cache/netdata/dbengine-tier1/* $ sudo rm -rf /var/cache/netdata/dbengine-tier2/* # サービス起動(新しい制限値内でクリーンに記録が開始されます) $ sudo systemctl start netdata
Netdata専用ログ(systemdジャーナル)の容量制限
RHEL9のNetdataは、システムログを汚さないよう「ジャーナル名前空間(Journal Namespace)」を使用し、journald@netdata という独立したエリアにログを出力します。
これは通常の /etc/systemd/journald.conf を編集しても連動して制限されないため、専用の設定ファイル(ドロップインファイル)を作成する必要があります。
応急処置(今すぐ古いログを消す場合)
設定前に、すでに溜まっている専用ログを50MBまで即座に縮小(vacuum)できます。
$ sudo journalctl --namespace=netdata --vacuum-size=50M
恒久対策(自動ローテーションの設定)
Netdata専用ログのディレクトリを作成し、最大容量を50MBに固定する設定ファイルを新規配置します。
# 1. Netdata専用ログ用の設定ディレクトリを作成 $ sudo mkdir -p /etc/systemd/journald@netdata.conf.d # 2. 上限を50MBに制限する設定ファイルを新規作成 $ sudo tee /etc/systemd/journald@netdata.conf.d/override.conf << 'EOF' [Journal] SystemMaxUse=50M EOF # 3. ログ管理サービスを再起動して設定を反映 $ sudo systemctl restart systemd-journald
設定の確認
以下のコマンドを実行し、現在のNetdataログの合計サイズが指定した制限値(50MB以下)に収まっているか確認します。
$ journalctl --namespace=netdata --disk-usage
まとめ
以上の設定を行うことで、Netdata関連のデータ・ログともに上限値が固定され、ディスクフルになるリスクを根本から防ぐことができます。

