Telegrafインストールガイド:InfluxDB向けメトリクス収集の「バックボーン」

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

5分でわかるTelegraf入門(クイックスタート)

サーバーのCPU、RAM、ディスクなどの全統計データを一箇所に集約するための「軽量」で、インストール後すぐに動くツールが必要なら、Telegrafが最適な選択肢です。複雑な curlpython スクリプトを苦労して書く代わりに、.conf ファイルの数行を調整するだけで十分です。

それでは、データをInfluxDBに送信するために、Ubuntu/Debianでのクイックインストールを始めましょう。ここでは、すでにInfluxDBが用意されているか、Cloud版を使用していることを前提としています。

# InfluxDataের 公式リポジトリを追加
wget -q https://repos.influxdata.com/influxdata-archive_key.gpg
echo "393e8779c8945d3195561a4411ac3c21c177026f151cb854766e13b29527e5e0 influxdata-archive_key.gpg" | sha256sum -c && cat influxdata-archive_key.gpg | gpg --dearmor | sudo tee /etc/apt/trusted.gpg.d/influxdata-archive.gpg > /dev/null
echo "deb [signed-by=/etc/apt/trusted.gpg.d/influxdata-archive.gpg] https://repos.influxdata.com/debian $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/influxdata.list

# Telegrafのインストール
sudo apt-get update && sudo apt-get install telegraf

# サービスを有効化
sudo systemctl enable --now telegraf

インストールが完了すると、設定ファイルは /etc/telegraf/telegraf.conf に配置されます。ファイルを開き、[[outputs.influxdb_v2]] セクションを探して、URL、Token、Bucketを入力してください。わずか30秒で、データがInfluxDBに流れ込み始めます。

Telegrafとは何か?なぜ選ばれるのか?

簡単に言うと、TelegrafはGo言語で書かれたオープンソースのエージェントであり、有名なTICKスタックのエコシステムの一部です. 最大の利点は、リソース消費が極めて少ないことです(占有RAMはわずか10〜50MB程度)。300以上のプラグインが組み込まれており、MySQLやRedisの指標から、IoTデバイスからのMQTTメッセージまで、あらゆるものを読み取ることができます。

Telegrafの処理フローは、以下の4つのステージで動作します:

  • Inputs: メトリクス(CPU、Docker、Nginxなど)を収集します。
  • Processors: データの修正、タグ付け、またはフィルタリングを行います。
  • Aggregators: データの集約(例:1分間ごとの平均値の算出)を行います。
  • Outputs: データの送信先(InfluxDB、Prometheus、Kafkaなど)を指定します。

私が管理しているシステムでは、Telegraf + InfluxDB + Grafana を使用して15台のLinuxサーバーを監視しています。これのおかげで、以前、ユーザーがWebサイトの遅延に気づく前に、ワーカーノードのメモリ溢れを早期発見することができました。

実践的なTelegrafのデータ収集設定

デフォルトの設定ファイルが数千行もあるからといって、怯える必要はありません。私の経験では、一度すべて削除するかコメントアウトし、本当に必要なものだけを残すのがコツです。以下は、システムリソースとDockerを監視するためのサンプル設定です。

1. システムリソースの監視

以下のコードを /etc/telegraf/telegraf.conf ファイルに挿入します:

[[inputs.cpu]]
  percpu = true
  totalcpu = true
  report_active = false

[[inputs.mem]]

[[inputs.disk]]
  ignore_fs = ["tmpfs", "devtmpfs", "devfs", "overlay", "squashfs"]

[[inputs.net]]
  interfaces = ["eth0", "enp*"]

2. Dockerコンテナの監視

どのコンテナが最もリソースを消費しているか知りたいですか? docker プラグインを使いましょう。重要な注意点として、telegraf ユーザーがDockerのソケットにアクセスできる権限を持っている必要があります。

# Telegrafに権限を付与
sudo usermod -aG docker telegraf

# telegraf.confでの設定
[[inputs.docker]]
  endpoint = "unix:///var/run/docker.sock"
  container_names = []
  timeout = "5s"
  perdevice = false
  total = true

InfluxDBへのデータ送信

これがデータを保存するための最終ステップです。InfluxDB 2.xの場合、設定は以下のようになります:

[[outputs.influxdb_v2]]
  urls = ["http://192.168.1.100:8086"]
  token = "YOUR_SECURE_TOKEN_HERE"
  organization = "my-org"
  bucket = "server-metrics"

ちょっとしたヒント:Tokenを直接書き込むのではなく、環境変数を使用して保存しましょう。これにより、誤ってコードをGitHubにプッシュしてしまった場合でも、セキュリティを確保できます。

運用における「現場で学んだ」重要な教訓

監視システムを長年運用してきた中で、データ損失を避けるための3つの重要な注意点をまとめました:

適用前に必ずテストを行う

設定ファイルを修正するたびに、すぐにサービスを再起動しないでください。まずテストコマンドを実行しましょう:

telegraf --config /etc/telegraf/telegraf.conf --test

ターミナルにメトリクスの数値が次々と表示されれば、設定は正解です。

収集間隔(Interval)の調整

デフォルトでは、Telegrafは10秒ごとにデータを取得します。それほど重要ではないサーバーの場合、私は通常30秒または60秒に増やしています。これにより、CPU負荷を抑え、InfluxDBのストレージ容量を大幅に節約できます。

ネットワーク切断時の対応

InfluxDBがダウンしたり、ネットワークが不安定になったりした場合、Telegrafはバッファ(buffer)を使用してデータを保持します。[agent] セクションの metric_buffer_limit を10,000程度に増やしておくことをお勧めします。

以前、回線が切れた際にバッファのデフォルト値が低すぎて、2時間分のデータを完全に失ったことがあります。皆さんは私のような状況に陥らないように気をつけてください。

結論として、Telegrafは非常に柔軟で強力なツールです。Grafanaと組み合わせてグラフを描画すれば、インフラの「健康状態」を完全に把握できるようになります。セットアップの成功を祈っています!

Share: