AlmaLinux の kusanagi9 で Prometheus+Grafana の監視環境を構築する手順をご説明します。
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接続設定
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 サービスファイル作成
sudo tee /etc/systemd/system/mysql_exporter.service << 'EOF'
[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
EOF
/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