AlmaLinux の kusanagi9 で Prometheus+Grafana の監視環境を構築する手順をご説明します。
サーバー設定後の Grafana Cloud の設定方法はPrometheus & Grafana Cloud で Kusanagi サーバーを監視する方法( Grafana Cloud 編)をご覧ください。
1. Prometheus のインストール
まず、管理用に Prometheus ユーザーを作成します:
sudo useradd --no-create-home --shell /bin/false prometheus
Prometheusをダウンロードして設定:
現時点(2025年7月時点)での最新版である Prometheus 3.4.2 を利用します。
Prometheus のリリース情報はこちらです。
cd /tmp
wget https://github.com/prometheus/prometheus/releases/download/v3.4.2/prometheus-3.4.2.linux-amd64.tar.gz
tar xvf prometheus-3.4.2.linux-amd64.tar.gz
sudo cp prometheus-3.4.2.linux-amd64/prometheus /usr/local/bin/
sudo cp prometheus-3.4.2.linux-amd64/promtool /usr/local/bin/
sudo chown prometheus:prometheus /usr/local/bin/prometheus
sudo chown prometheus:prometheus /usr/local/bin/promtool
ディレクトリの作成
sudo mkdir /etc/prometheus
sudo mkdir /var/lib/prometheus
sudo chown prometheus:prometheus /etc/prometheus
sudo chown prometheus:prometheus /var/lib/prometheus
2. Grafana Cloud 対応の Prometheus 設定
/etc/prometheus/prometheus.yml
を作成
global:
scrape_interval: 15s
evaluation_interval: 15s
external_labels:
cluster: 'almalinux-webserver'
replica: '1'
# Grafana Cloudへのリモート書き込み設定
remote_write:
- url: 'https://****.grafana.net/api/prom/push'
basic_auth:
username: 'YOUR_USERNAME' # Grafana CloudのUsername/Instance ID
password: 'YOUR_API_KEY' # Grafana CloudのAPI Key
queue_config:
max_samples_per_send: 1000
max_shards: 200
capacity: 2500
write_relabel_configs:
- source_labels: [__name__]
regex: 'up|prometheus_.*|node_.*|process_.*|go_.*'
action: keep
scrape_configs:
- job_name: 'prometheus'
static_configs:
- targets: ['127.0.0.1:9090']
scrape_interval: 15s
metrics_path: /metrics
- job_name: 'node-exporter'
static_configs:
- targets: ['127.0.0.1:9100']
scrape_interval: 60s
scrape_timeout: 20s
params:
collect[]:
- cpu
- meminfo
- diskstats
- filesystem
- loadavg
- netdev
- systemd
- processes
yamlファイルのチェック。
実行する前に構文のチェックなどができます。
sudo -u prometheus /usr/local/bin/promtool check config /etc/prometheus/prometheus.yml
3. systemd サービスファイルの作成
Prometheus用(/etc/systemd/system/prometheus.service
)
[Unit]
Description=Prometheus
Wants=network-online.target
After=network-online.target
[Service]
User=prometheus
Group=prometheus
Type=simple
ExecStart=/usr/local/bin/prometheus \
--config.file=/etc/prometheus/prometheus.yml \
--storage.tsdb.path=/var/lib/prometheus/ \
--web.console.templates=/etc/prometheus/consoles \
--web.console.libraries=/etc/prometheus/console_libraries \
--web.listen-address=127.0.0.1:9090 \
--web.enable-lifecycle \
--storage.tsdb.retention.time=15d \
--web.enable-remote-write-receiver
[Install]
WantedBy=multi-user.target
4. Node Exporter のインストール
現時点(2025年7月時点)での最新版である Node Exporter 1.8.2 を利用します。
Node Exporter のリリース情報はこちらです。
cd /tmp
wget https://github.com/prometheus/node_exporter/releases/download/v1.8.2/node_exporter-1.8.2.linux-amd64.tar.gz
tar xvf node_exporter-1.8.2.linux-amd64.tar.gz
sudo cp node_exporter-1.8.2.linux-amd64/node_exporter /usr/local/bin/
sudo chown prometheus:prometheus /usr/local/bin/node_exporter
5. Node Exporter の systemd サービスファイルの作成
Node Exporter用(/etc/systemd/system/node_exporter.service
)
[Unit]
Description=Node Exporter
Wants=network-online.target
After=network-online.target
[Service]
User=prometheus
Group=prometheus
Type=simple
ExecStart=/usr/local/bin/node_exporter \
--web.listen-address=127.0.0.1:9100 \
--collector.systemd \
--collector.processes \
--collector.interrupts \
--no-collector.rapl
[Install]
WantedBy=multi-user.target
ここまでで、Prometheus の基本部分のインストールおよび設定が終わった感じです。
これに、WordPress 監視用に BlackBox Exporter と Process Exporter を利用します。
6. BlackBox Exporter のインストール
現時点(2025年7月時点)での最新版である BlackBox Exporter 0.25.0 を利用します。
BlackBox Exporter のリリース情報はこちらです。
cd /tmp
wget https://github.com/prometheus/blackbox_exporter/releases/download/v0.25.0/blackbox_exporter-0.25.0.linux-amd64.tar.gz
tar xvf blackbox_exporter-0.25.0.linux-amd64.tar.gz
sudo cp blackbox_exporter-0.25.0.linux-amd64/blackbox_exporter /usr/local/bin/
sudo chown prometheus:prometheus /usr/local/bin/blackbox_exporter
7. BlackBox Exporter の設定
/etc/prometheus/blackbox.yml
を作成
modules:
http_2xx:
prober: http
timeout: 10s
http:
valid_http_versions:
- HTTP/1.1
- HTTP/2.0
method: GET
follow_redirects: true
preferred_ip_protocol: ip4
ip_protocol_fallback: false
headers:
User-Agent: "Prometheus-BlackBox-Exporter"
Accept: "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"
tls_config:
insecure_skip_verify: true
http_2xx_no_verify:
prober: http
timeout: 10s
http:
valid_http_versions:
- HTTP/1.1
- HTTP/2.0
method: GET
follow_redirects: true
preferred_ip_protocol: ip4
tls_config:
insecure_skip_verify: true
tcp_connect:
prober: tcp
timeout: 5s
tcp:
preferred_ip_protocol: ip4
icmp:
prober: icmp
timeout: 5s
icmp:
preferred_ip_protocol: ip4
SSL の認証問題等で、通知がしっかりとできない場合があるので、insecure_skip_verify: true
の処理を行っています。
systemd サービスの/etc/systemd/system/blackbox_exporter.service
を作成
[Unit]
Description=Blackbox Exporter
Wants=network-online.target
After=network-online.target
[Service]
User=prometheus
Group=prometheus
Type=simple
ExecStart=/usr/local/bin/blackbox_exporter \
--config.file=/etc/prometheus/blackbox.yml \
--web.listen-address=127.0.0.1:9115
[Install]
WantedBy=multi-user.target
Prometheus の yml ファイルに BlackBox Exporter 用の追記
/etc/prometheus/prometheus.yml
scrape_configs:
# 既存の設定...
# WordPressサイト監視
- job_name: 'blackbox-http'
metrics_path: /probe
params:
module: [http_2xx]
static_configs:
- targets:
- https://*****.****.***/
relabel_configs:
- source_labels: [__address__]
target_label: __param_target
- source_labels: [__param_target]
target_label: instance
- target_label: __address__
replacement: 127.0.0.1:9115
scrape_interval: 30s
scrape_timeout: 10s
BlackBox Exporterの設定チェックは以下のコードで対応できます。
sudo -u prometheus /usr/local/bin/blackbox_exporter --config.check --config.file=/etc/prometheus/blackbox.yml
8. Process Exporter のインストール
現時点(2025年7月時点)での最新版である Process Exporter 0.8.7 を利用します。
Process Exporter のリリース情報はこちらです。
cd /tmp
wget https://github.com/ncabatoff/process-exporter/releases/download/v0.8.7/process-exporter-0.8.7.linux-amd64.tar.gz
tar xvf process-exporter-0.8.7.linux-amd64.tar.gz
sudo cp process-exporter-0.8.7.linux-amd64/process-exporter /usr/local/bin/
sudo chown prometheus:prometheus /usr/local/bin/process-exporter
9. Process Exporter の設定
/etc/prometheus/process-exporter.yml
を作成
process_names:
# WordPress/Kusanagi 環境用設定
- name: "nginx-{{.Matches.type}}"
cmdline:
- 'nginx: (master|worker) process'
- name: "php-fpm-{{.Matches.type}}"
cmdline:
- 'php-fpm: (master|pool)'
- name: "{{.Comm}}"
cmdline:
- 'mysqld'
- 'mariadb'
- name: "{{.Comm}}"
cmdline:
- 'redis-server'
# Prometheus 監視スタック
- name: "{{.Comm}}"
cmdline:
- 'prometheus'
- 'node_exporter'
- 'blackbox_exporter'
- 'process-exporter'
# システムプロセス
- name: "{{.Comm}}"
cmdline:
- 'systemd'
- 'sshd'
- 'NetworkManager'
- 'chronyd'
# カーネルプロセス
- name: "kernel-{{.Matches.thread}}"
cmdline:
- '\[(.+)\]'
systemd サービスファイルの作成 /etc/systemd/system/process-exporter.service
[Unit]
Description=Process Exporter
Documentation=https://github.com/ncabatoff/process-exporter
Wants=network-online.target
After=network-online.target
[Service]
User=prometheus
Group=prometheus
Type=simple
Restart=on-failure
RestartSec=5s
ExecStart=/usr/local/bin/process-exporter \
--config.path=/etc/prometheus/process-exporter.yml \
--web.listen-address=127.0.0.1:9256 \
--children=true \
--threads=true \
--gather-smaps=false
[Install]
WantedBy=multi-user.target
DBが大きなサイトでは、DBの監視も必要になるので、MySQL Exporter も導入します。
DBが大きくない場合は、Process Exporterの監視機能だけでもいいかもしれません。
10. MySQL Exporter のインストール
現時点(2025年7月時点)での最新版である MySQL Exporter 0.8.7 を利用します。
MySQL Exporter のリリース情報はこちらです。
cd /tmp
wget https://github.com/prometheus/mysqld_exporter/releases/download/v0.17.2/mysqld_exporter-0.17.2.linux-amd64.tar.gz
tar xvf mysqld_exporter-0.17.2.linux-amd64.tar.gz
sudo cp mysqld_exporter-0.17.2.linux-amd64/mysqld_exporter /usr/local/bin/
sudo chown prometheus:prometheus /usr/local/bin/mysqld_exporter
11. MySQL/MariaDB 監視用 mysqld_exporter ユーザーの作成
-- MySQL/MariaDBに接続
mysql -u root -p
-- 監視用ユーザーの作成(v0.17.2対応)
MariaDB [(none)]> CREATE USER 'mysqld_exporter'@'localhost' IDENTIFIED BY 'StrongPassword123!';
Query OK, 0 rows affected (0.012 sec)
-- 必要な権限の付与(v0.17.2で推奨される権限)
MariaDB [(none)]> GRANT PROCESS, REPLICATION CLIENT, SELECT ON *.* TO 'mysqld_exporter'@'localhost';
Query OK, 0 rows affected (0.002 sec)
-- 追加権限の付与(MariaDB/MySQL 8.0対応)
MariaDB [(none)]> GRANT SUPER ON *.* TO 'mysqld_exporter'@'localhost';
-- または、より限定的な権限(推奨)
MariaDB [(none)]> GRANT REPLICATION SLAVE ON *.* TO 'mysqld_exporter'@'localhost';
-- MySQL 8.0の場合は追加権限(必要に応じて)
-- GRANT BACKUP_ADMIN ON *.* TO 'mysqld_exporter'@'localhost';
MariaDB [(none)]> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.001 sec)
-- 権限確認
MariaDB [(none)]> SHOW GRANTS FOR 'mysqld_exporter'@'localhost';
+--------------------------------------------------------------------------------------------------------------------------------------------------+
| Grants for mysqld_exporter@localhost |
+--------------------------------------------------------------------------------------------------------------------------------------------------+
| GRANT SELECT, PROCESS, BINLOG MONITOR ON *.* TO `mysqld_exporter`@`localhost` IDENTIFIED BY PASSWORD '*0FC95BA076DE8BCF87BEA062677BDDB83C396066' |
+--------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.000 sec)
MariaDB [(none)]> EXIT;
Bye
12. MySQL Exporter の設定ファイル作成
MySQL接続設定
sudo tee /etc/prometheus/mysql_exporter.cnf << 'EOF'
[client]
user=mysqld_exporter
password=StrongPassword123!
host=localhost
port=3306
socket=/var/lib/mysql/mysql.sock
EOF
sudo chown prometheus:prometheus /etc/prometheus/mysql_exporter.cnf
sudo chmod 600 /etc/prometheus/mysql_exporter.cnf
systemd サービスファイル作成 /etc/systemd/system/mysql_exporter.service
[Unit]
Description=MySQL Exporter
Documentation=https://github.com/prometheus/mysqld_exporter
Wants=network-online.target
After=network-online.target mariadb.service
[Service]
User=prometheus
Group=prometheus
Type=simple
Restart=on-failure
RestartSec=5s
ExecStart=/usr/local/bin/mysqld_exporter \
--config.my-cnf=/etc/prometheus/mysql_exporter.cnf \
--web.listen-address=127.0.0.1:9104 \
--collect.global_status \
--collect.global_variables \
--collect.engine_innodb_status \
--collect.info_schema.processlist \
--collect.info_schema.tables \
--collect.info_schema.innodb_metrics \
--no-collect.slave_status \
--no-collect.heartbeat
[Install]
WantedBy=multi-user.target
/etc/prometheus/prometheus.yml
への追加
scrape_configs:
# 既存の設定...
- job_name: 'mysql-exporter'
static_configs:
- targets: ['127.0.0.1:9104']
scrape_interval: 15s
scrape_timeout: 10s
また、/etc/prometheus/prometheus.yml
のremote_write
のwrite_relabel_configs
でregex
にmysql_
を追加する必要があります。
これは、カスタムqueryをGrafanaに読み込ませるために必要な作業です。
下記は例です。
remote_write:
- url: 'https://prometheus-prod-01-eu-west-0.grafana.net/api/prom/push'
basic_auth:
username: 'YOUR_USERNAME'
password: 'YOUR_API_KEY'
write_relabel_configs:
- source_labels: [__name__]
regex: 'up|prometheus_.*|node_.*|mysql_.*|probe_.*'
action: keep
13. PHP-FPM Exporter のインストール
現時点(2025年7月時点)での最新版である PHP-FPM Exporter 2.2.0 を利用します。
PHP-FPM Exporter のリリース情報はこちらです。
cd /tmp
wget https://github.com/hipages/php-fpm_exporter/releases/download/v2.2.0/php-fpm_exporter_2.2.0_linux_amd64.tar.gz
tar xvf php-fpm_exporter_2.2.0_linux_amd64.tar.gz
sudo cp php-fpm_exporter /usr/local/bin/
sudo chown prometheus:prometheus /usr/local/bin/php-fpm_exporter
14. PHP-FPM Exporter の設定ファイル作成
systemd サービスファイル作成 /etc/systemd/system/php-fpm_exporter.service
[Unit]
Description=PHP-FPM Exporter
Documentation=https://github.com/hipages/php-fpm_exporter
Wants=network-online.target
After=network-online.target nginx.service php-fpm.service
[Service]
User=prometheus
Group=prometheus
Type=simple
Restart=on-failure
RestartSec=5s
ExecStart=/usr/local/bin/php-fpm_exporter server \
--config=/etc/prometheus/php-fpm_exporter.yml
[Install]
WantedBy=multi-user.target
/etc/prometheus/php-fpm_exporter.yml
の作成
server:
listen_address: "127.0.0.1:9253"
metrics_path: "/metrics"
phpfpm:
scrape_uri: "http://127.0.0.1:8080/status"
log:
level: "info"
/etc/prometheus/prometheus.yml
に追加
scrape_configs:
# 既存の設定...
- job_name: 'php-fpm_exporter'
static_configs:
- targets: ['127.0.0.1:9253']
scrape_interval: 15s
scrape_timeout: 10s
また、/etc/prometheus/prometheus.ymlのremote_writeのwrite_relabel_configsでregexにmysql_を追加する必要があります。
これは、カスタムqueryをGrafanaに読み込ませるために必要な作業です。
下記は例です。
remote_write:
- url: 'https://prometheus-prod-01-eu-west-0.grafana.net/api/prom/push'
basic_auth:
username: 'YOUR_USERNAME'
password: 'YOUR_API_KEY'
write_relabel_configs:
- source_labels: [__name__]
regex: 'up|prometheus_.*|node_.*|namedprocess_.*|phpfpm_.*|mysql_.*|probe_.*'
action: keep
Kusanagi 用 Nginx 設定の変更
メインのプロビジョン(ここでは例としてkusanagi-main)の設定に以下の設定を追記します。
/etc/opt/kusanagi/nginx/conf.d/kusanagi-main.conf に追加
# 既存の設定...
server {
listen 127.0.0.1:8080;
server_name localhost;
location ~ ^/(status|ping)$ {
access_log off;
allow 127.0.0.1;
deny all;
include fastcgi_params;
fastcgi_pass unix:/var/run/php-fpm/www.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
}
PHP-FPM設定の確認・修正
kusanagi の場合のphp-fpmの設定ファイルは/etc/opt/kusanagi/php-fpm.d/www.conf
にあります。これを修正します。
; Status page設定(既存)
pm.status_path = /status
ping.path = /ping
15. 各サービスの再起動や確認方法
ここでは、例として、php-fpm_exporter
の停止から再起動して、状態確認およびログの確認をする一連の流れを説明します。状態確認やログなどから問題がある場合は解決に結びつけてください。
# サービス停止
sudo systemctl stop php-fpm_exporter
# systemd設定再読み込み
sudo systemctl daemon-reload
# サービス再起動
sudo systemctl restart php-fpm_exporter
# 状態確認
sudo systemctl status php-fpm_exporter
# ログ確認(エラーがないことを確認)
sudo journalctl -u php-fpm_exporter -n 20
全サービスの再起動および状態確認
# systemd設定再読み込み
sudo systemctl daemon-reload
# node_exporter サービス再起動
sudo systemctl restart node_exporter
# node_exporter 状態確認
sudo systemctl status node_exporter
# process-exporter サービス再起動
sudo systemctl restart process-exporter
# process-exporter 状態確認
sudo systemctl status process-exporter
# blackbox_exporter サービス再起動
sudo systemctl restart blackbox_exporter
# blackbox_exporter 状態確認
sudo systemctl status blackbox_exporter
# mysql_exporter サービス再起動
sudo systemctl restart mysql_exporter
# mysql_exporter 状態確認
sudo systemctl status mysql_exporter
# php-fpm_exporter サービス再起動
sudo systemctl restart php-fpm_exporter
# php-fpm_exporter 状態確認
sudo systemctl status php-fpm_exporter
# prometheus サービス再起動
systemctl restart prometheus
# prometheus 状態確認
sudo systemctl status prometheus