Collectd、InfluxDB、Grafanaの3点セットで、Linuxサーバーを「超軽量」に監視する

Monitoring tutorial - IT technology blog
Monitoring tutorial - IT technology blog

なぜ低スペックサーバーには今でもCollectdが「最適解」なのか?

インフラエンジニアになりたての頃、私はサーバーが重くなるたびに手動でSSH接続し、topdf -hを叩いていました。しかし、この方法は非常に受動的で手間がかかります。後にPrometheusが普及しましたが、512MB RAMしかない低スペックなVPSや小型のIoTデバイスには、必ずしも適しているとは限りません。そんな環境では、超軽量なログ分析ツールと同様に、リソース消費の少ないツール選びが重要になります。

C言語で書かれたCollectdは非常に効率的で、CPUをほとんど消費しません。Prometheusの「プル(pull)」方式とは異なり、Collectdはデータを能動的に「プッシュ(push)」します。これは、サーバーがファイアウォールやNATの背後にあり、外部にポートを公開したくない場合に非常に便利です。最近ではGrafana Alloyのような統合されたテレメトリ収集ツールも登場していますが、InfluxDBやGrafanaと組み合わせることで、リソースを最大限に節約しながら、本格的な監視システムを構築できます。

クイックスタート:3ステップでCollectdをインストール

UbuntuやDebianでは、インストールは非常に簡単です。いくつかの基本コマンドを実行するだけで、このデーモンを起動できます。

# システムのアップデート
sudo apt update

# collectdのインストール
sudo apt install collectd -y

# 起動と状態確認
sudo systemctl enable --now collectd
sudo systemctl status collectd

この時点で、CollectdはCPU、RAM、Load Averageなどの基本指標の収集を開始しています。しかし、データはまだローカルマシン内に「閉じ込められた」状態です。グラフを描画するには、中央集中型の保存場所が必要です。

InfluxDBの設定:リアルタイムデータの保存庫

私はInfluxDBのバージョン1.8を優先して使用しています。このバージョンは非常に安定しており、複雑な設定なしでCollectd用のネットワークプラグインを標準サポートしているからです。

# リポジトリの追加とインストール
curl -sL https://repos.influxdata.com/influxdb.key | sudo apt-key add -
echo "deb https://repos.influxdata.com/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/influxdb.list
sudo apt update && sudo apt install influxdb -y
sudo systemctl enable --now influxdb

次に、設定ファイル /etc/influxdb/influxdb.conf を開きます。[[collectd]] セクションを探し、以下のようにパラメータを編集します。

[[collectd]]
  enabled = true
  bind-address = ":25826"
  database = "collectd_db"
  typesdb = "/usr/share/collectd/types.db"
  batch-size = 5000
  batch-timeout = "10s"

忘れずに influx -execute "CREATE DATABASE collectd_db" コマンドでデータベースを作成してください。その後、InfluxDBを再起動して変更を適用します。

Collectdのデータ送信設定(Networkプラグイン)

次に、CollectdにデータをInfluxDBという「倉庫」へ送るよう指示します。/etc/collectd/collectd.conf を開き、まず LoadPlugin network の行のコメントアウトを解除します。その後、ファイルの末尾に送信先の設定を追加します。

<Plugin network>
    Server "127.0.0.1" "25826"
</Plugin>

InfluxDBが別のサーバーにある場合は、127.0.0.1 を対応するIPアドレスに書き換えてください。sudo systemctl restart collectd を実行してサービスを再起動すると、データのストリームが流れ始めます。

Grafanaでのデータの可視化

データをInfluxDBに集約できたら、あとはGrafanaで見栄え良く整えるだけです。手順は非常にシンプルです:

  1. Grafanaダッシュボード(通常はポート3000)を開きます。
  2. Data Sources を選択し、InfluxDB を追加します。
  3. URL欄に http://localhost:8086 と入力します。
  4. Databaseセクションに、先ほど作成した名前 collectd_db を正確に入力します。
  5. Save & Test をクリックして、接続成功を確認します。

時間を節約するために、自分でパネルを作成するか、GrafanaのライブラリからCollectd用の既存のダッシュボードテンプレートを探して利用しましょう。

最適化:必要なものだけを取得する

よくある間違いは、プラグインを有効にしすぎてディスク容量を無駄にすることです。ディスク容量を監視し、不必要なデータ蓄積を避けるよう構成を最適化しましょう。Collectdの設定ファイルでは、以下の主要なグループに絞ることをお勧めします:

  • cpu & memory: すべてのサーバーにおける生命線となる指標。
  • df: ディスク容量を監視し、突然の容量不足を防ぐ。
  • interface: ネットワークトラフィックを監視し、DDoS攻撃の検知に役立てる。
  • disk: ディスクの読み書き速度(I/O)をチェックし、ボトルネックを把握する。

例えば、ノイズとなる仮想パーティションのスキャンを避けるには、ルートパーティションに対して df プラグインを具体的に設定します:

<Plugin df>
    Device "/dev/sda1"
    MountPoint "/"
    IgnoreSelected false
</Plugin>

運用における「血と汗の」教訓

以下は、長年の運用から得た、小さいながらも非常に重要な注意点です:

  1. セキュリティ: NetworkプラグインはデフォルトでUDPを使用し、暗号化されていません。インターネット経由でデータを送信する場合は、ユーザー名/パスワードを設定するか、VPNを使用してデータを保護してください。
  2. サンプリング間隔 (Interval): デフォルトは10秒です。それほど重要でないサーバーの場合は、30秒または60秒に増やしましょう。これにより、送信側サーバーと受信側データベースの両方の負荷を軽減できます。
  3. Types.dbの確認: Grafanaで単位が正しく表示されない場合、InfluxDBの設定内でデータ型定義ファイル(types.db)のパスが間違っている可能性が高いです。

実際、Collectd + InfluxDBのコンボは非常に堅牢です。異常時にはCPUとメモリを浪費する原因を特定するプロファイリングツールを併用するのも手ですが、定常監視にはこれが一番です。

私はかつて、20台の低価格サーバー群でこのシステムを2年間継続して運用しました。また、各プロセスの健康状態を監視する他の手法と比較しても、CollectdのRAM消費量は常に10MB以下で安定していました。これは、他のモダンで重厚なソリューションと比較すると驚異的な数字です。

個人のVPSやIoTシステムを管理している方は、ぜひこの3点セットを試してみてください。納得のいく監視システムが構築できることを願っています!

Share: