2026年5月23日
2026年5月23日
Telegrafでメトリクスを収集する方法(WordPressサーバーのNginx・PHP-FPM・MySQLを監視)
Telegraf は、InfluxData が開発しているオープンソースのメトリクス収集エージェントです。1つのエージェントに、CPU やメモリなどのサーバー情報、Nginx・PHP-FPM・MySQL の状態を集める入力プラグインと、InfluxDB や Prometheus へ送る出力プラグインをまとめて設定できます。この記事では、WordPress が動くサーバーを例に、インストール、各ミドルウェアの状態を取る設定、認証情報の安全な渡し方、動作確認、見るべき指標までを説明します。
Telegraf の仕組み
Telegraf の設定は TOML 形式で書き、主に次の4種類のプラグインを組み合わせます。
- inputs:メトリクスを集める(
cpu、mem、nginx、phpfpm、mysqlなど) - processors:集めた値を加工する(名前の変更、タグの追加など)
- aggregators:一定期間の平均や最大値などを計算する
- outputs:送り先を決める(
influxdb_v2、prometheus_client、fileなど)
Prometheus の node_exporter が「サーバー情報を公開して、取りに来てもらう」専用のエクスポーターであるのに対し、Telegraf は多数の入力プラグインを1つのプロセスで扱い、送り先へ自分から書き込む(プッシュする)ことも、Prometheus に取りに来てもらうこともできます。サーバーの監視対象が多く、エージェントを1つにまとめたい場合に向いています。
インストールする
InfluxData が提供しているパッケージリポジトリを登録してから、パッケージを入れるのが一般的です。リポジトリの署名鍵は過去に更新されたことがあるため、古い記事のコマンドをそのまま使わず、公式ドキュメントの最新の手順に従ってください。
# リポジトリ登録後(Debian/Ubuntu の例)
sudo apt update
sudo apt install telegraf
telegraf --version
systemctl status telegraf
設定ファイルは /etc/telegraf/telegraf.conf と、追加の設定を置く /etc/telegraf/telegraf.d/ ディレクトリです。パッケージに入っている telegraf.conf は、すべてのプラグインの説明がコメントとして並んだ非常に長いファイルなので、必要なプラグインだけを含む設定を生成し直すと見通しがよくなります。
sudo cp /etc/telegraf/telegraf.conf /etc/telegraf/telegraf.conf.orig
telegraf --input-filter cpu:mem:disk:diskio:net:system \
--output-filter influxdb_v2 config | sudo tee /etc/telegraf/telegraf.conf > /dev/null
Telegraf は 1 系で頻繁にプラグインの追加や変更が行われています。プラグインの設定項目は版ごとに README で確認してください(2026年10月現在)。
エージェントとサーバー情報の設定
生成したファイルの [agent] と基本の入力を、必要な部分だけ残して整えます。
[agent]
interval = "10s"
round_interval = true
flush_interval = "10s"
omit_hostname = false
[[inputs.cpu]]
percpu = false
totalcpu = true
[[inputs.mem]]
[[inputs.disk]]
ignore_fs = ["tmpfs", "devtmpfs", "devfs", "overlay", "squashfs"]
[[inputs.diskio]]
[[inputs.net]]
[[inputs.system]]
interval は収集間隔です。10秒にすると細かい変化を追えますが、保存するデータ量は60秒の6倍になります。小規模なサイトなら30〜60秒でも傾向をつかむには十分なことが多いので、保存先の容量と相談して決めます。disk の ignore_fs は、メモリ上の一時領域やコンテナのファイルシステムを除外して、実際のディスクの使用量だけを見るための指定です。
Nginx の状態を取る
Nginx の接続数や処理中のリクエスト数は、stub_status モジュールが提供するページから取得します。外部に公開しないよう、ローカルホストだけで待ち受ける専用のサーバーブロックを作ります。
# /etc/nginx/conf.d/status.conf
server {
listen 127.0.0.1:8080;
server_name localhost;
location = /nginx_status {
stub_status;
allow 127.0.0.1;
deny all;
}
}
sudo nginx -t && sudo systemctl reload nginx
curl -s http://127.0.0.1:8080/nginx_status
# /etc/telegraf/telegraf.d/nginx.conf
[[inputs.nginx]]
urls = ["http://127.0.0.1:8080/nginx_status"]
curl で Active connections: から始まる数行が返ればページは有効です。stub_status がない、と言われる場合は、使っている Nginx がこのモジュールを含めてビルドされていません。nginx -V の出力に http_stub_status_module があるかを確認します。
PHP-FPM の状態を取る
WordPress の処理を担う PHP-FPM は、ワーカーの使用状況を見ると「アクセスが増えたときに処理が詰まっていないか」が分かります。まずプールの設定でステータスページを有効にします。
; /etc/php/8.3/fpm/pool.d/www.conf
pm.status_path = /status
sudo php-fpm8.3 -t && sudo systemctl reload php8.3-fpm
Telegraf からは、PHP-FPM のソケットに直接問い合わせます。この方法なら Web サーバー経由でステータスページを公開する必要がありません。
# /etc/telegraf/telegraf.d/phpfpm.conf
[[inputs.phpfpm]]
urls = ["/run/php/php8.3-fpm.sock"]
ソケットのパスだけを書いた場合、ステータスページのパスは /status として扱われます。別のパスにした場合の書き方は、プラグインの README に記載があります。
ここでつまずきやすいのが、ソケットの権限です。PHP-FPM のソケットは通常 www-data などの Web サーバー用グループだけが読み書きできるため、telegraf ユーザーからは接続できず「permission denied」になります。ソケットの所有グループを確認し、telegraf ユーザーをそのグループに追加してから Telegraf を再起動します。
ls -l /run/php/php8.3-fpm.sock
sudo usermod -aG www-data telegraf
sudo systemctl restart telegraf
MySQL の状態を取る
MySQL(MariaDB)の監視には、WordPress が使っているユーザーではなく、監視専用で権限を絞ったユーザーを作ります。作業前にデータベースのバックアップを取っておきます。
CREATE USER 'telegraf'@'localhost' IDENTIFIED BY 'change-this-password';
GRANT PROCESS, REPLICATION CLIENT ON *.* TO 'telegraf'@'localhost';
GRANT SELECT ON performance_schema.* TO 'telegraf'@'localhost';
PROCESS と REPLICATION CLIENT は状態の参照に使う権限で、WordPress のテーブルの中身を読む権限は与えていません。どの権限が必要かは、有効にする収集項目によって変わるので、README の説明に合わせて調整します。
パスワードは設定ファイルに直接書かず、環境変数で渡します。Telegraf は設定ファイル内の ${変数名} を環境変数の値に置き換えます。
# /etc/telegraf/telegraf.d/mysql.conf
[[inputs.mysql]]
servers = ["telegraf:${MYSQL_TELEGRAF_PASSWORD}@tcp(127.0.0.1:3306)/"]
パスワードに @ や / などの記号を含めると、接続文字列の区切りと解釈されて接続に失敗することがあります。記号を避けた長いランダムな文字列にするのが簡単です。
送り先の設定と認証情報の渡し方
InfluxDB に送る場合
[[outputs.influxdb_v2]]
urls = ["https://influxdb.example.com:8086"]
token = "${INFLUX_TOKEN}"
organization = "your-org"
bucket = "wordpress"
トークンは、書き込み先のバケットへの書き込み権限だけを持つものを InfluxDB 側で発行します。InfluxDB は版によって API や管理方法に違いがあるため、使っている版の書き込み方法を確認してください。
Prometheus に取りに来てもらう場合
[[outputs.prometheus_client]]
listen = "127.0.0.1:9273"
metric_version = 2
Prometheus が同じサーバーにない場合は、待ち受けアドレスを変えたうえで、ファイアウォールで Prometheus サーバーからの接続だけを許可します。メトリクスにはサーバーの構成を推測できる情報が含まれるため、インターネットに公開しないようにします。
環境変数を渡す
多くの Linux パッケージでは、Telegraf の systemd ユニットが /etc/default/telegraf を環境変数ファイルとして読み込みます。systemctl cat telegraf で EnvironmentFile の行を確認し、そのファイルに書きます。
sudo tee /etc/default/telegraf > /dev/null <<'EOF'
INFLUX_TOKEN=your-influx-token
MYSQL_TELEGRAF_PASSWORD=change-this-password
EOF
sudo chmod 600 /etc/default/telegraf
このファイルは root だけが読めるようにし、バックアップや Git に入れる場合は値を除外します。
動作確認する
本番の送り先に書き込む前に、--test で入力プラグインを1回だけ実行し、結果を画面に出して確かめます。--test は出力プラグインに書き込まないので、設定の確認に向いています。
# 環境変数ファイルを読み込んでから、入力を1回だけ実行する
sudo bash -c 'set -a; . /etc/default/telegraf; set +a; \
telegraf --config /etc/telegraf/telegraf.conf \
--config-directory /etc/telegraf/telegraf.d \
--test --input-filter phpfpm:nginx:mysql'
# root で試すとソケットの権限の問題が見えないため、telegraf ユーザーで別に確認する
sudo -u telegraf test -w /run/php/php8.3-fpm.sock && echo "socket OK"
環境変数ファイルは root だけが読める権限にしているので、--test は root で実行しています。その場合、PHP-FPM のソケットには root の権限で接続できてしまうため、telegraf ユーザーから書き込めるかを2つ目のコマンドで別に確かめます。問題がなければサービスを再起動し、ログにエラーが出ていないか確認します。
sudo systemctl restart telegraf
journalctl -u telegraf -n 50 --no-pager
WordPress サーバーで見ておきたい指標
集めたメトリクスのうち、WordPress の表示が遅い・止まるといった問題に関係しやすいものは次のとおりです。
- phpfpm の max_children_reached:ワーカー数の上限に達した回数です。増え続けているなら、
pm.max_childrenが足りないか、1リクエストの処理が遅くてワーカーが空かない状態です。上限を上げる前に、メモリに余裕があるかを確認します。 - phpfpm の listen_queue:ワーカーの空きを待っているリクエスト数です。0 より大きい状態が続くなら、利用者は待たされています。
- nginx の active と waiting:同時接続数の推移です。急増したときに PHP-FPM の指標も悪化していれば、アクセス集中やボットの大量アクセスを疑います。
- mysql の threads_connected と slow_queries:接続数の急増や遅いクエリの増加は、プラグインの重い処理や検索の負荷を示すことがあります。
- mem と disk:メモリ不足によるスワップや、ログやバックアップでディスクが埋まる事態は、サイト停止の直接の原因になります。
これらの値は Grafana などで可視化し、しきい値を超えたら通知するように設定しておくと、利用者から連絡が来る前に異変に気づけます。しきい値はサイトの通常時の値を数週間見てから決めると、誤報が少なくなります。
まとめ
- Telegraf は入力・加工・集計・出力のプラグインを TOML で組み合わせる収集エージェントで、1つのプロセスでサーバーとミドルウェアの状態を集められます。
- Nginx は
stub_status、PHP-FPM はpm.status_pathとソケット、MySQL は権限を絞った監視専用ユーザーで取得します。 - PHP-FPM のソケットの権限と、パスワードの記号はつまずきやすい点です。
- トークンやパスワードは環境変数ファイルで渡し、ファイルの権限を root のみに絞ります。
--testで入力を確認してから本番の送り先に書き込み、max_children_reachedやlisten_queueなどの指標を監視します。