TECH · OBSERVABILITY · HOMESERVER

Chillarin Blog 構成紹介 - 8.監視基盤編 Part1(設計思想と全体像)-

自宅サーバの監視基盤をPrometheus + Grafana + Lokiで構築した話。Part1では「何を監視すべきか」「なぜこの構成にしたか」の設計思想と全体像を紹介します。

tech 2026-03-31 40 min read by ちらりん
cover · 1024×1024

はじめに

前回(7.ギミック編)までで、ブログの「動かす」部分はひと通り紹介しました。 今回からは 「守る・見る」 の話 ── 監視基盤編です。

正直、自宅サーバの監視って後回しにされがちです。 「動いてるし、まあいいか」で何ヶ月も放置して、ある日突然ディスクが100%になって慌てる…… みたいなのは自宅LABあるあるだと思います。

自分もそうだったんですが、ブログを本格運用し始めてからは「あ、これは監視ないとダメだ」と痛感するようになりました。 理由は単純で、壊れたことに気づけないから。

VPSなら提供元がある程度面倒を見てくれますが、自宅サーバは全部自分です。 ディスクが埋まっても、コンテナが落ちても、証明書が切れても、誰も教えてくれません。

というわけで、本章では Prometheus + Grafana + Loki を使った監視基盤の 設計思想全体像 を紹介します。 具体的なセットアップ手順は Part2 以降で掘っていきます。


なぜ Prometheus + Grafana + Loki なのか

監視スタックの選択肢は色々あります。ざっくり比較するとこんな感じ。

スタックメトリクスログ特徴自宅向き度
Prometheus + Grafana + Loki業界標準、エコシステムが巨大
Splunk (Enterprise / Free)最強のログ分析基盤。ただし高い
Zabbixエンタープライズ向け、設定が重い
Datadog / New RelicSaaS。楽だけど従量課金
Uptime Kuma死活監視特化。軽い○(単体なら)
Netdataインストールするだけで動く

正直に言うと、Splunk を入れたかった

これは本音です。 仕事で Splunk を触ったことがある人なら共感してもらえると思いますが、ログの検索・可視化・相関分析に関しては Splunk が頭一つ抜けています。 SPL(Search Processing Language)の表現力は本当に強力で、「あのログとこのログを時間軸で突き合わせて、特定パターンだけ抽出する」みたいなことが直感的に書ける。

じゃあなぜ入れなかったかというと、コストです。

ライセンス制限月額/年額
Splunk Free500MB/日まで無料
Splunk Enterprise無制限約 $1,800/GB/年〜

Splunk Free は 500MB/日 の取り込み制限があります。 nginx のアクセスログだけで 500MB/日 を超えることがある自宅サーバだと、この枠はすぐに埋まります。 しかも Free 版はアラート機能が使えない、ユーザー認証が使えない、分散サーチができない…… と、監視基盤として使うには制約がきつい。

Enterprise は言うまでもなくエンタープライズ価格なので、個人の自宅サーバには論外です。

Splunk の代替としては OpenSearch(旧 Elasticsearch OSS)もありますが、JVM ベースでメモリを大量に食うので NUC の限られたリソースには厳しい。 結局、軽量 + 無料 + Docker と相性が良い という条件で絞ると、Prometheus + Loki の組み合わせに落ち着きました。

「お金が無限にあるなら Splunk + SOAR で全自動化したい」というのは自宅ラボ勢共通の夢ではないでしょうか。

選定理由をまとめると

結論、Prometheus + Grafana + Loki にしました。理由は3つ。

1. 仕事で使っている

業務でもPrometheus/Grafanaを触る機会が多いので、自宅で使うことがそのままスキルの維持になります。 Zabbixも悪くないんですが、最近のトレンド的にはPrometheus系に寄ってきている印象です。 (Splunk のスキルは仕事で別途維持できるので、自宅は別のスタックで経験を積む方が得という判断もあります)

2. Docker との相性が良い

うちの環境は基本的にDockerで動かしているので、cAdvisorやnode_exporterをコンテナとして追加するだけでメトリクスが取れる手軽さは大きい。 Prometheus の設定も prometheus.yml 1ファイルで管理できるので、Gitで管理しやすいです。 Splunk も Docker で動かせますが、コンテナ1つで 4GB+ メモリを要求してくるので、NUC 環境だとリソースが厳しい。

3. ログも同じ画面で見たい

GrafanaにLokiを繋げば、メトリクスとログを同じダッシュボードで横断的に見れます。 「CPU使用率が跳ねた時間帯のnginxログを見る」みたいなことが1画面でできるのは、トラブルシュートの速度が全然違います。 Splunk ならこれがもっと高度にできるのは事実ですが、自宅サーバの規模では Grafana + Loki で十分です。


何を監視するか ── 設計思想

ここが一番大事なところです。 ツールを入れるのは簡単ですが、「何を見るか」を決めないと意味がない

自分は以下の4レイヤーに分けて考えています。

レイヤー1: ホスト(物理/仮想マシン)

まず土台。NUC 3台と、その上で動くVM/LXCの基本リソースです。

メトリクス取得元なぜ見るか
CPU使用率node_exporter異常プロセスの検知
メモリ使用率node_exporterOOMの予兆を掴む
ディスク使用率node_exporter一番大事。自宅サーバの事故原因No.1
ディスクI/Onode_exporterNASのNFS遅延を検知
ネットワークトラフィックnode_exporter異常通信の検知
システム稼働時間node_exporter意図しない再起動の検知

特にディスク使用率は最重要です。 ログが溜まる、Dockerイメージが増える、VMのスナップショットが残る…… 自宅サーバでディスクが埋まるパターンは無限にあります。

レイヤー2: コンテナ(Docker)

うちはブログも含めて全サービスをDockerで動かしているので、コンテナ単位の監視は必須です。

メトリクス取得元なぜ見るか
コンテナCPU/メモリcAdvisorリソースリークの早期発見
コンテナ稼働状態cAdvisor落ちたら即検知
コンテナリスタート回数cAdvisor再起動ループの検知
コンテナネットワークcAdvisorコンテナ間通信の異常

cAdvisor は Google が作ったコンテナメトリクス収集ツールで、Docker socketを読み取って各コンテナのリソース使用量をPrometheusフォーマットで吐いてくれます。 コンテナとして動かすだけなので導入は楽です。

レイヤー3: アプリケーション

ここからはサービス固有の監視です。

メトリクス取得元なぜ見るか
ブログの死活node_exporter の up/down(chillarin-sv01 が応答しているか)Cloudflare Tunnel ホストが落ちた=外からアクセス不可と等価
nginx のリクエスト数/ステータスnginx の stub_status + exporter4xx/5xxの急増を検知
Cloudflare Analyticscf-exporterPV数、国別アクセス、キャッシュヒット率
Remark42 コメント数カスタムexporter or APIスパムの急増検知

ブログの死活監視は、chillarin-sv01 の node_exporter が応答しているかどうかで判断しています。 chillarin-sv01 が落ちると Cloudflare Tunnel(ブログへの入口)も道連れになるため、「node_exporter が応答しない ≒ ブログが外から見えない」 と等価で扱えます。 blackbox-exporter は chillarin-ops 側でネットワーク機器・NAS への ICMP ping 監視に使っており、ブログの HTTP 外形監視には使っていません。

レイヤー4: ログ

メトリクスだけでは「何が起きたか」はわかっても「なぜ起きたか」がわからないことが多い。 そこでLokiによるログ集約が効いてきます。

ログソース収集方法見るポイント
nginx アクセスログPromtail異常なアクセスパターン、404の急増
nginx エラーログPromtailupstream接続エラー
Docker コンテナログPromtail (docker driver)アプリケーションエラー
システムログ (syslog)Promtailカーネルエラー、OOM killer

Promtail は Loki 専用のログ収集エージェントで、ファイルを tail して Loki に送るシンプルなやつです。 Dockerのログドライバーとして設定すると、各コンテナのstdout/stderrを自動的にLokiに流してくれます。


全体構成図

テキストで描くとこんな感じです。(画像は後日差し替え予定)

snippet
┌─────────────────────────────────────────────────────────────┐
│                    chillarin-ops (VM)                        │
│                    172.16.1.151                              │
│                                                             │
│  ┌─────────────┐  ┌─────────────┐  ┌─────────────┐         │
│  │ Prometheus   │  │  Grafana    │  │    Loki     │         │
│  │  :9090       │  │  :3000      │  │  :3100      │         │
│  │              │  │             │  │             │         │
│  │ scrape every │  │ dashboards  │  │ log storage │         │
│  │ 15s          │  │ + alerts    │  │             │         │
│  └──────┬───────┘  └──────┬──────┘  └──────┬──────┘         │
│         │                 │                │                │
│         │    query ───────┘                │                │
│         │    query ────────────────────────┘                │
│         │                                                   │
└─────────┼───────────────────────────────────────────────────┘
          │ scrape (pull)
    ┌─────┴───────────────────────────────────┐
    │                                         │
    ▼                                         ▼
┌─────────────────────┐            ┌─────────────────────┐
│ chillarin-sv01 (VM) │            │ nuc1 / nuc2 / nuc3  │
│ 172.16.1.100        │            │ (Proxmox hosts)     │
│                     │            │                     │
│ ・node_exporter     │            │ ・node_exporter     │
│ ・cAdvisor          │            │   (各ホスト)        │
│ ・nginx-exporter    │            │                     │
│ ・cf-exporter       │            └─────────────────────┘
│ ・promtail          │
│                     │
│ [nginx, hugo, ...]  │
└─────────────────────┘

ポイントは以下の通り。

  • 監視サーバ (chillarin-ops) はブログサーバ (chillarin-sv01) とは別VMにしている。同居させると、ブログが落ちた時に監視も道連れになるので。
  • Prometheus は pull 型。各エクスポーターのエンドポイントを定期的にスクレイプしに行く。push型と違って、監視対象側の設定が最小限で済む。
  • Grafana は Prometheus と Loki の両方をデータソースとして使い、メトリクスとログを同じ画面で見れるようにしている。
  • Promtail は chillarin-sv01 側で動かして、ログを Loki に push する。
  • blackbox-exporter は chillarin-ops 側に置いている。ネットワーク機器・NAS への ping(死活)監視が主目的で、監視対象(chillarin-sv01)が落ちても ops 側から独立して動き続けられる構成にしている。

アラート設計 ── 「本当に通知すべきもの」だけに絞る

監視を入れると「とりあえず全部アラートにしよう」ってなりがちですが、自宅サーバでそれをやると通知地獄になって無視するようになります。本末転倒。

自分のアラートポリシーは 「寝てる間に起きたら翌朝気づきたいもの」 だけに絞っています。

アラート名条件通知先理由
HostDiskAlmostFullディスク使用率 > 85%Discord事故原因No.1。余裕を持って80%台で気づきたい
ContainerDown主要コンテナが5分以上停止Discordブログやコメント機能が落ちてたら直したい
HighMemoryUsageメモリ使用率 > 90% が10分以上DiscordOOM killer が発動する前に気づきたい
CloudflareTunnelDownchillarin-sv01 の node_exporter が2分以上無応答DiscordCloudflare Tunnel ホストが落ちた状態(外からブログにアクセス不可と等価)

通知先は Discord の Webhook にしています。 Slack でもいいんですが、個人利用なので Discord のほうが気軽です。 Grafana の Alerting 機能から直接 Webhook を叩けるので、通知の仕組みとしてはこれだけで完結します。

Alertmanager コンテナ(:9093)も同居させていますが、現時点では receiver を null に設定して意図的に無効化しています。 将来的に「severity に応じて通知チャンネルを分ける」「同じアラートの再通知間隔を細かく制御する」といった運用が必要になったときのために、箱だけ置いてある状態です。

※ 最近 Phase 4 で会員ポータル系のアラート(PortalDown / GrafanaDown / WebhookErrors / HighPaymentFailureRate)も追加しましたが、そのあたりの話は有料コンテンツ側で詳しく紹介予定です。


コスト:「この監視をクラウドでやるといくら?」

せっかくなので、同じ監視をクラウドサービスで実現した場合のコストを概算してみます。

前提

  • 監視対象: 3ホスト + 10コンテナ + 1 Webサイト
  • メトリクス: 約200系列(node_exporter + cAdvisor + exporter群)
  • ログ: 約 500MB/日
  • データ保持期間: 30日

クラウド監視サービスの場合

サービス月額概算備考
Datadog (Infrastructure)$23/host × 3 = $69ホスト数課金
Datadog (Logs)500MB/日 × 30日 = 15GB → $38インデックス課金
Datadog 合計約 $107/月(約16,000円)
New Relic無料枠内に収まる可能性あり100GB/月のログ無料枠
Grafana Cloud$0〜$29/月Free枠: 10kメトリクス系列, 50GBログ

正直、Grafana Cloud の Free 枠なら十分収まる規模ではあります。 ただし、自前で持つメリットは データの保持期間やクエリの自由度に制限がない こと。 あと、Grafana Cloud に上げるということはメトリクスやログを外に出すことになるので、セキュリティ的にオンプレ完結のほうが安心という面もあります。

自前の場合のコストは、chillarin-ops の VM リソース分(CPU 2コア、メモリ 4GB 程度)だけ。 電気代に換算すると月数百円レベルです。


ここまでのまとめ

  • 自宅サーバの監視は ディスク使用率コンテナの死活 が最重要
  • Prometheus + Grafana + Loki を採用。理由は業務との親和性、Docker との相性、メトリクスとログの統合表示
  • 監視対象は4レイヤー: ホスト → コンテナ → アプリケーション → ログ
  • アラートは 「寝てる間に起きたら翌朝気づきたいもの」 だけに絞る
  • 監視サーバはブログサーバと 別VM に配置

次回 Part2 では、Prometheus / Grafana / Loki / Promtail の実際のセットアップと、docker-compose への組み込み方を紹介します。

← 一覧


自宅サーバとネットワークの観測の全体像は 自宅 Observability の完全ガイド — Prometheus + Grafana + Loki で家のサーバとネットワークを観測し続ける にまとめています。監視基盤の設計判断から複合障害・retention 運用までを 1 ページで通読できる Pillar ガイドです。

· · ·

コメント