−25%

Windows 年払い、10月31日まで。 プランを見る

EQVPS

Grafana + Prometheus でサーバー監視をする VPS

すべてのサーバーの CPU、RAM、ディスク、サービスのメトリクスを一か所に集約。VPS 上で HTTPS の背後に Prometheus、node_exporter、Grafana を置きます。

「サーバーが遅い」というバグ報告は役に立ちません。グラフを開いて、クラッシュの 3 日前からメモリが上がり続けていたと確認できるなら話は別です。それを可能にするのが Prometheus と Grafana です。各サーバーの CPU、RAM、ディスク、ネットワークを 15 秒ごとに記録し、さかのぼってスクロールできるグラフとして描きます。専用の小さな VPS に置いておけば、本番マシンが倒れても監視を続けてくれます。

構成要素

必要なもの

1. 各監視対象に node_exporter

apt install -y prometheus-node-exporter
# allow only the monitoring server to scrape it
ufw allow from 203.0.113.10 to any port 9100 proto tcp

203.0.113.10 は監視用 VPS のアドレスに置き換えてください。9100 番を世界中に開けたままにしてはいけません。サーバーについて多くの情報が漏れます。

2. 監視用 VPS に Prometheus と Grafana

apt update && apt install -y docker.io docker-compose-v2 caddy
mkdir -p /opt/monitoring && cd /opt/monitoring

cat > prometheus.yml <<'EOF'
global:
  scrape_interval: 15s
scrape_configs:
  - job_name: nodes
    static_configs:
      - targets: ['198.51.100.21:9100', '198.51.100.22:9100']
EOF

cat > compose.yml <<'EOF'
services:
  prometheus:
    image: prom/prometheus
    volumes: [ "./prometheus.yml:/etc/prometheus/prometheus.yml:ro", "prom:/prometheus" ]
    command: [ "--config.file=/etc/prometheus/prometheus.yml", "--storage.tsdb.retention.time=15d", "--web.enable-remote-write-receiver" ]
    ports: [ "127.0.0.1:9090:9090" ]
    restart: unless-stopped
  grafana:
    image: grafana/grafana
    volumes: [ "grafana:/var/lib/grafana" ]
    ports: [ "127.0.0.1:3000:3000" ]
    restart: unless-stopped
volumes: { prom: {}, grafana: {} }
EOF

docker compose up -d

Grafana の前段に HTTPS を置きます。

echo 'grafana.example.com {
    reverse_proxy 127.0.0.1:3000
}' > /etc/caddy/Caddyfile && systemctl reload caddy

ログインし(admin / admin、その後変更)、http://prometheus:9090 を Prometheus のデータソースとして追加し、コミュニティのダッシュボード「Node Exporter Full」(ID 1860)をインポートします。1 分ほどで完全なシステムダッシュボードが手に入ります。

NAT プランのサーバー

NAT サーバーが受信接続を受け付けるのは個人用 SSH ポートだけなので、Prometheus はそのエクスポーターをスクレイプできません。向きを逆にしましょう。NAT マシンで Prometheus をエージェントモードで動かし、すでにリモート書き込みを受け付けている監視サーバー(上記の --web.enable-remote-write-receiver フラグ)へ送ります。

# /etc/prometheus/agent.yml on the NAT server
scrape_configs:
  - job_name: self
    static_configs: [ { targets: ['127.0.0.1:9100'] } ]
remote_write:
  - url: https://prom-push.example.com/api/v1/write

9090 番をそのまま開けるのではなく、その受信エンドポイントは basic 認証付きで Caddy 経由で公開してください。

正直なメモ

Prometheus はプル型です。自分で管理するサーバー群には最適ですが、NAT の内側にあるものには不便で、だからこそエージェントの工夫が必要になります。ローカルストレージは何年分もの履歴を想定していないので、長期保持が必要なら後からリモートストレージを追加します。そしてダッシュボードは価値の半分にすぎません。初日に少なくとも 3 つのアラート(ディスク 85% 超、メモリ逼迫、監視対象のダウン)を設定しないと、グラフを見るのは何かが壊れた後になってしまいます。

関連

デプロイの準備はできましたか?暗号通貨で支払い、KYC不要 — 約1分でオンライン。

今すぐデプロイ →

FAQ

Uptime Kuma と何が違いますか?

Uptime Kuma が答えるのは「動いているか?」です。Prometheus と Grafana が答えるのは「なぜ遅いのか、いつからか?」で、CPU、メモリ、ディスク、ネットワーク、アプリケーションのメトリクスを時系列で見られます。両方使う人も多く、障害の通知には Kuma、傾向把握とキャパシティ計画には Grafana を使います。

Prometheus はどれくらいディスクを使いますか?

圧縮後でサンプルあたり約 1〜2 バイトです。それぞれ 1000 系列を出力する 10 台のサーバーを 15 秒ごとに収集すると、1 日に約 6000 万サンプル、おおよそ 100 MB になります。デフォルトの 15 日保持なら数ギガバイトです。

NAT プランのサーバーも監視できますか?

できますが、スクレイプではできません。NAT サーバーはエクスポーターへの受信接続を受け付けないからです。NAT マシンで Prometheus をエージェントモードで動かし、remote_write でメトリクスを監視サーバーへ送ってください。監視サーバー自体は専用 IP 付きのプランに置くべきです。

監視サーバーはどのプランにすべきですか?

Micro-IP(2 GB RAM、月額 $10)なら 1〜2 ダースのホストを快適に扱えます。カーディナリティの高いアプリメトリクスを追加したり、数か月分のデータを保持したりするなら Small-IP にしてください。専用 IP があれば Grafana を HTTPS で公開でき、監視対象で許可リストに入れる固定アドレスも得られます。

監視サーバーは監視対象と分けるべきですか?

はい。メモリを使い果たしたばかりのサーバーで Grafana が動いていたら、まさに必要なときに問題が見えなくなります。小さな別の VPS なら、本番マシンが落ちても動き続けます。

コメント

まだコメントはありません。最初になりましょう。

コメントを残す

コメントは表示される前にモデレートされます。