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 で原因を切り分けます