0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Prometheus & Grafana Cloud で Kusanagi サーバーを監視する方法(サーバー編)

Last updated at Posted at 2025-07-26

AlmaLinux の kusanagi9 で Prometheus+Grafana の監視環境を構築する手順をご説明します。

1. Prometheus のインストール

まず、管理用に Prometheus ユーザーを作成します:

shell
sudo useradd --no-create-home --shell /bin/false prometheus

Prometheusをダウンロードして設定:
現時点(2025年7月時点)での最新版である Prometheus 3.4.2 を利用します。
Prometheus のリリース情報はこちらです。

shell
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

ディレクトリの作成

shell
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 を作成

yaml
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ファイルのチェック。
実行する前に構文のチェックなどができます。

shell
sudo -u prometheus /usr/local/bin/promtool check config /etc/prometheus/prometheus.yml

3. systemd サービスファイルの作成

Prometheus用(/etc/systemd/system/prometheus.service

ini
[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 のリリース情報はこちらです。

shell
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

ini
[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 のリリース情報はこちらです。

bash
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 を作成

yaml
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 を作成

ini
[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

yaml
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の設定チェックは以下のコードで対応できます。

bash
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 のリリース情報はこちらです。

bash
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 を作成

yaml
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

ini
[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 のリリース情報はこちらです。

bash
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 ユーザーの作成

sql
-- 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接続設定

bash
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 サービスファイル作成

bash
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 への追加

yaml
scrape_configs:
  # 既存の設定...
  
  - job_name: 'mysql-exporter'
    static_configs:
      - targets: ['127.0.0.1:9104']
    scrape_interval: 15s
    scrape_timeout: 10s

また、/etc/prometheus/prometheus.ymlremote_writewrite_relabel_configsregexmysql_を追加する必要があります。
これは、カスタムqueryをGrafanaに読み込ませるために必要な作業です。
下記は例です。

yaml
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
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?