2026年5月29日

2026年5月29日

Telegrafでメトリクスを収集する方法:WordPressサーバーのOS・nginx・PHP-FPM・MySQLを集める

Telegraf は、入力プラグインでメトリクスを集め、出力プラグインで InfluxDB や Prometheus などに送る収集エージェントです。WordPress を動かすサーバーなら、CPU・メモリ・ディスクに加えて nginx、PHP-FPM、MySQL の状態を1つのエージェントで集められます。この記事では、インストールから各プラグインの設定、送信先の設定、動作確認の方法と、パスワードや公開範囲の注意点までを説明します。

Telegraf の仕組みと構成

Telegraf の設定は TOML 形式で、主に次の3つの部分からなります。

  • [agent]:収集間隔や送信間隔など全体の設定
  • [[inputs.xxx]]:何を集めるか(cpu、mem、nginx、mysql など)
  • [[outputs.xxx]]:どこに送るか(influxdb_v2、prometheus_client など)

Linux のパッケージでインストールすると、メインの設定が /etc/telegraf/telegraf.conf、追加の設定を置く場所が /etc/telegraf/telegraf.d/ になります。用途ごとにファイルを分けると、どの設定が何のためか分かりやすく、不要になったときも外しやすくなります。この記事でもその形で進めます。

プラグインの設定項目や既定値はバージョンで変わることがあるため、使用中のバージョンのプラグインのドキュメント(各プラグインの README)と照らし合わせてください(2026年10月現在)。

ステップ1:インストールする

Telegraf は InfluxData が提供するパッケージリポジトリから入れるのが一般的です。リポジトリと署名鍵の登録手順は更新されることがあるため、公式ドキュメントの手順に従ってください。登録後は通常のパッケージとしてインストールできます。

sudo apt update
sudo apt install telegraf

telegraf --version
sudo systemctl status telegraf

パッケージ版は telegraf ユーザーで動きます。このユーザーで読めない情報(一部のログやソケット)は収集できないため、後のステップで権限を確認します。

ステップ2:OS のメトリクスを集める

まず OS の基本的なメトリクスを集めます。既定の telegraf.conf にも同様の設定がありますが、内容を把握するために必要なものだけを書いた形にします。

# /etc/telegraf/telegraf.d/10-system.conf
[[inputs.cpu]]
  percpu = false
  totalcpu = true

[[inputs.mem]]

[[inputs.swap]]

[[inputs.system]]

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

[[inputs.diskio]]

[[inputs.net]]
  interfaces = ["eth0"]

interfaces はサーバーのネットワークインターフェース名に合わせます(ip link で確認できます)。Docker を使っているサーバーでは、コンテナごとの仮想インターフェースやオーバーレイのファイルシステムが大量に収集されると、データが増えて見づらくなるため、上のように対象を絞ります。

[agent] の interval は収集間隔で、既定は10秒です。細かくするほど変化を追いやすくなる代わりに、保存するデータ量が増えます。

ステップ3:nginx と PHP-FPM の状態を集める

nginx は stub_status モジュールのページから接続数やリクエスト数を読みます。外部に公開しないよう、ローカルからだけアクセスできる場所に置きます。

server {
    listen 127.0.0.1:8080;
    location /nginx_status {
        stub_status;
        allow 127.0.0.1;
        deny all;
    }
    location = /fpm-status {
        allow 127.0.0.1;
        deny all;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $fastcgi_script_name;
        fastcgi_pass unix:/run/php/php8.3-fpm.sock;
    }
}

PHP-FPM はプール設定で状態ページを有効にします。pm.status_path を設定したら、sudo php-fpm8.3 -t で構文を確認してから再読み込みします。バージョン番号やソケットのパスは環境に合わせてください。

; /etc/php/8.3/fpm/pool.d/www.conf
pm.status_path = /fpm-status

curl http://127.0.0.1:8080/nginx_status と curl http://127.0.0.1:8080/fpm-status で値が返ることを確かめてから、Telegraf の設定を追加します。

# /etc/telegraf/telegraf.d/20-web.conf
[[inputs.nginx]]
  urls = ["http://127.0.0.1:8080/nginx_status"]

[[inputs.phpfpm]]
  urls = ["http://127.0.0.1:8080/fpm-status"]

PHP-FPM で注目したいのは、待ち行列(listen queue)と、上限に達した回数(max children reached)です。これらが増えている場合、アクセスに対してワーカー数が足りないか、1リクエストの処理が遅いことを示しています。

ステップ4:MySQL/MariaDB の状態を集める

監視専用のデータベースユーザーを作り、必要な権限だけを与えます。管理者ユーザーを使い回さないのは、設定ファイルが漏れたときの被害を小さくするためです。

CREATE USER 'telegraf'@'localhost' IDENTIFIED BY 'your-strong-password';
GRANT PROCESS, REPLICATION CLIENT ON *.* TO 'telegraf'@'localhost';

レプリケーション関連の権限名は MariaDB の新しいバージョンで名前が変わっているため、エラーになる場合は使用中のバージョンのドキュメントを確認してください。

パスワードを設定ファイルに直接書かないために、環境変数を使います。Telegraf は設定内の ${変数名} を環境変数で置き換えます。Debian/Ubuntu のパッケージでは、systemd のユニットが /etc/default/telegraf を環境ファイルとして読み込みます。

# /etc/default/telegraf(root:root 600 などに絞る)
MYSQL_TELEGRAF_PASSWORD=your-strong-password
INFLUX_TOKEN=your-influxdb-token
# /etc/telegraf/telegraf.d/30-mysql.conf
[[inputs.mysql]]
  servers = ["telegraf:${MYSQL_TELEGRAF_PASSWORD}@tcp(127.0.0.1:3306)/"]

servers は Go のデータベースドライバーの接続文字列の形式です。パスワードに @ などの記号が含まれると解釈を誤ることがあるため、英数字中心の長いパスワードにしておくと扱いやすくなります。新しいバージョンの Telegraf には秘密情報を外部のストアから読む仕組みもあるため、運用に合わせて選んでください。

ステップ5:送信先を設定する

InfluxDB 2.x に送る場合は influxdb_v2 出力を使います。トークンは書き込み権限だけを持つものを発行して使います。

# /etc/telegraf/telegraf.d/90-output.conf
[[outputs.influxdb_v2]]
  urls = ["http://127.0.0.1:8086"]
  token = "${INFLUX_TOKEN}"
  organization = "example-org"
  bucket = "wordpress-server"

InfluxDB には 2.x と、その後の新しい系列があり、接続方法や推奨される出力プラグインが異なる場合があります。使用中の InfluxDB のドキュメントで、Telegraf からの書き込み方法を確認してください。

Prometheus で収集している環境なら、prometheus_client 出力でメトリクスを公開し、Prometheus から取りに来てもらう形にできます。このポートはメトリクスが誰にでも読める状態になるため、ローカルや内部ネットワークのアドレスで待ち受け、ファイアウォールで制限します。

[[outputs.prometheus_client]]
  listen = "127.0.0.1:9273"

ステップ6:動作を確認する

設定を反映する前に、テストモードで1回だけ収集して標準出力に表示させます。送信はされないため、各入力プラグインが値を取れているかを安全に確認できます。

sudo -u telegraf telegraf --config /etc/telegraf/telegraf.conf \
  --config-directory /etc/telegraf/telegraf.d --test

sudo -u telegraf で実行するのは、サービスと同じ権限で読めるかを確かめるためです。ただし、この方法では /etc/default/telegraf の環境変数が読み込まれないため、MySQL の接続などは失敗します。その場合は環境変数を一時的に渡すか、サービスを再起動してログを確認します。

sudo systemctl restart telegraf
sudo journalctl -u telegraf -n 50 --no-pager

よくあるエラーと確認先は次のとおりです。

  • connection refused:状態ページの URL やポートの誤り。curl で同じ URL を開けるか確認する
  • permission denied:telegraf ユーザーで読めないファイルやソケット。所有者とグループを確認する
  • 認証エラー(401 など):InfluxDB のトークンや organization、bucket の名前の誤り
  • MySQL の Access denied:ユーザーのホスト指定(localhost と 127.0.0.1 の違い)や権限の不足

まとめ

  • Telegraf は inputs で集め、outputs で送る構成で、用途ごとに telegraf.d/ にファイルを分けると管理しやすくなります
  • nginx と PHP-FPM の状態ページはローカルだけで公開し、curl で確認してから Telegraf に設定します
  • MySQL は監視専用ユーザーを作り、パスワードやトークンは環境変数で渡して設定ファイルに書きません
  • 送信先の InfluxDB や Prometheus のバージョンに合わせて出力プラグインを選び、公開ポートはローカルに絞ります
  • --test で値を確認してから再起動し、エラーは journalctl で原因を切り分けます

お気軽にご相談ください

お見積りへ お問い合わせへ
▲