本文へスキップ
CoRISE
CASE / 03Platform & Operations

レガシー監視基盤から
可観測性基盤への刷新

個別に監視する仕組みから、システム全体を観測し続ける基盤へ。長期間運用されてきたシステム監視基盤を、Kubernetesを中心としたモダンな可観測性基盤へ段階的に刷新しました。

従来はMunin、Nagios、Cacti、syslog-ngなどを組み合わせ、ホストや個別サービスごとに監視項目とアラート条件を設定する構成でした。CoRISEは既存の監視基盤を一度に置き換えるのではなく、その役割を整理しながら、Prometheus、Thanos、Grafana、Vector、Loki、OpenTelemetry、Alertmanagerを中心とする構成へ段階的に移行しました。

  • Kubernetes
  • Prometheus
  • Thanos
  • Grafana
  • Vector
  • Loki
  • OpenTelemetry
  • Alertmanager
  • Nix / NixOS

レガシー監視基盤からの段階的な移行

一度に置き換えるのではなく、既存の役割を整理しながら移行。

Kubernetes上で宣言的に管理する可観測性基盤

Prometheus、Thanos、Grafana、Vector、Loki、OpenTelemetryを中核に構成。

監視基盤自身の更新・保守まで継続運用

Nixを利用したコンポーネント管理と、監視基盤自身の監視。

「サーバが動いているか」から、「サービスがどう動いているか」へ。

従来の監視基盤は、サーバ、プロセス、ネットワーク、個別メトリクスなどを監視し、定められた条件を超えた場合に通知する、実績のある構成でした。しかし、コンテナやKubernetesを利用した動的な環境では、監視対象そのものが継続的に変化します。

重要になるのは、個々のホストを監視することだけではなく、次を継続的に把握できることです。

そこで、監視対象を個別に登録するモデルから、システム自身が観測データを公開し、それを共通基盤で収集・評価するモデルへ移行しました。

ホスト中心・個別設定型の監視。

旧環境ではMunin、Nagios、Cacti、syslog-ngを利用。それぞれが重要な役割を担っていましたが、運用モデルとしては比較的静的でした。

↔ 横にスクロールして図全体をご覧いただけます。

移行前の監視基盤ホストからMunin,Cacti,Nagios,syslog-ngへ分岐します。それぞれMetrics,Metricsとグラフ,ChecksとAlerts,Logsを扱います。この環境での個別管理を表す概念図であり,各ツールの連携能力の制限を示すものではありません。MetricsMetrics / GraphsChecks / AlertsLogsHOSTSMUNINCACTINAGIOSSYSLOG-NG
図 01 — Metrics、Logs、Alertingがそれぞれ異なる仕組みとして管理され、設定変更も個別に必要だった

安定して動作していた一方で、システム規模や構成の変化に伴い、次の課題が顕在化していました。

Kubernetes上で宣言的に管理する可観測性基盤。

新しい基盤では、観測データの役割ごとにコンポーネントを整理しました。

Thanos

Prometheusのメトリクスを長期間保持し、複数のPrometheus環境を横断して検索できる構成を採用しました。短期的な異常検知だけでなく、次の分析にも利用できる基盤です。

  • 長期的な傾向
  • 処理能力・容量の計画
  • 過去障害との比較
  • 季節性
  • リソース利用の変化

Grafana

メトリクスやログを横断して参照する共通の可視化層として利用。単なるグラフ表示ではなく、運用者がシステム状態を理解するための共通インターフェースとして位置づけています。

OpenTelemetry

新しいアプリケーションや分散システムでは、OpenTelemetryを観測データの標準的な入口として採用。メトリクス、ログ、トレースを個別の監視製品へ直接依存させるのではなく、計装とバックエンドを分離できる構造にしています。

アラートルール + Alertmanager

アラート条件をメトリクスと同じ宣言的な仕組みで管理し、Alertmanagerで通知のグループ化、振り分け、通知の抑制などを扱います。単純に「閾値を超えたら通知する」のではなく、次を運用ルールとしてコード化しました。

  • どの状態を異常とみなすか
  • どの程度継続した場合に通知するか
  • 関連するアラートをどうまとめるか
  • 誰に通知するか

観測データの経路を、一つの系として設計する。

↔ 横にスクロールして図全体をご覧いただけます。

Telemetryの収集・参照とアラート通知アプリケーション・インフラのMetricsをPrometheusが収集し,Thanosが長期保持と横断検索を支えます。LogsはVectorからLokiへ送られます。GrafanaはMetricsとLogsを参照します。OpenTelemetryによるInstrumentationからCollectorへ送られたTelemetryはBackendへ転送されます。Collector自体はトレース保存・検索基盤ではありません。アラートはPrometheusで評価し,Grafanaを経由せずAlertmanagerから運用者へ通知します。構成要素とデータの関係を示す概念図です。KUBERNETES — DECLARATIVE CONFIGURATIONTELEMETRY BACKENDSMetrics / Logsを参照Prometheusで評価Grouping / Routing / Silence → 通知APPLICATIONSMETRICSLOGSTRACESPROMETHEUSVECTOROPENTELEMETRYTHANOSLOKIOTEL COLLECTORGRAFANAALERTING RULESALERTMANAGEROPERATIONS TEAM
図 02 — Metrics・Logsの参照,Telemetryの転送,アラート通知を分けて設計する。

監視設定そのものを、運用可能なソフトウェアへ。

刷新の重要な目的の一つは、ツールを新しくすることではなく、監視基盤そのものを再現・変更・レビュー可能にすることでした。監視対象、アラートルール、ダッシュボード、KubernetesリソースなどをYAMLや構成ファイルとして管理し、変更履歴をGit上に残せる形へ移行しました。

↔ 横にスクロールして図全体をご覧いただけます。

宣言的な構成変更の流れ監視対象・ルール・Dashboardなどの構成をGitで管理し,レビューと変更を経て宣言的な構成としてKubernetesへ反映します。CONFIGURATIONGITREVIEW / CHANGEDECLARATIVECONFIGURATIONKUBERNETES
図 03 — 構成変更が、ソフトウェア開発と同じレビュー工程を経てKubernetesへ反映される

異常を知らせるだけでなく、原因を調べられる基盤へ。

旧来の監視では「何かがおかしい」ことを検出することが中心でした。新しい可観測性基盤では、検知 → 状況把握 → 調査 → 診断 → 改善までを一続きの運用体験として考えました。

↔ 横にスクロールして図全体をご覧いただけます。

検知から改善へ続く運用Detection(検知),Context(状況把握),Investigation(調査),Diagnosis(診断),Improvement(改善)が順に進みます。改善から検知へ戻る矢印は,知見を監視ルールへ反映する関係を示します。DETECTIONCONTEXTINVESTIGATIONDIAGNOSISIMPROVEMENT
図 04 — 一続きの運用体験として設計された5段階

たとえば障害対応は、次の流れをたどります。

  1. 01Prometheusのメトリクスから異常を検知する
  2. 02Grafanaで関連メトリクスを確認する
  3. 03同じ時間帯のLokiのログを確認する
  4. 04必要に応じてトレースを確認する
  5. 05Kubernetesの状態を確認する
  6. 06原因を修正する
  7. 07新たなメトリクスやアラートへ知見を反映する

障害対応で得られた知識を、次の監視ルールやダッシュボードへ戻すことで、監視基盤自体を継続的に改善できるようにしました。

監視基盤そのものも、本番システムとして扱う。

可観測性基盤が停止すれば、障害時に最も必要な情報が失われます。そのため、監視対象のシステムだけでなく、監視基盤自身の状態も監視対象としました。

監視システムを「補助ツール」ではなく、本番基盤の一部として扱っています。

  • Prometheus
  • Thanos
  • Grafana
  • Loki
  • Vector
  • OTel Collector
  • Alertmanager
  • Kubernetes
  • etcd

動かすだけでなく、更新し続けられること。

可観測性基盤は自社運用のKubernetes上で運用されています。CoRISEは監視アプリケーションだけでなく、Kubernetesのコンポーネント、etcd、ミドルウェア、コンテナイメージ、構成、依存関係のライフサイクル管理にも関与しました。Nixを利用してKubernetesや関連ツールのバージョンを管理し、環境差異を減らしながら継続的な更新を行える構成としました。

  • Kubernetesのコンポーネント
  • etcd
  • ミドルウェア
  • コンテナイメージ
  • 構成
  • 依存関係

刷新によって変わったのは、監視ツールの名前だけではありません。

  • ホスト中心の監視
  • 静的な設定
  • ツールごとの個別管理
  • メトリクスとログの分断
  • 閾値を中心としたアラート
  • 手作業での設定変更
  • 短期的な監視が中心
  • サービス・基盤全体の可観測性
  • Kubernetesの状態に追従する監視対象の検出
  • 宣言的な構成管理
  • メトリクス・ログ・トレースの関連付け
  • Prometheusによるアラート評価
  • Gitで管理する運用設定
  • Thanosによるメトリクスの長期保持
  • Lokiによるログの集約・分析
  • OpenTelemetryによる計装
  • 基盤の継続的な更新・保守

変化に追従できる運用基盤へ。

この刷新によって目指したのは、単に新しい監視製品へ置き換えることではありませんでした。システム構成が変化しても監視基盤が追従できること。問題が起きたときに、通知だけでなく原因調査に必要な情報へ到達できること。運用で得られた知見を、監視設定やシステム設計へ戻せること。そして、監視基盤そのものを継続的に更新・改善できること。

監視を、変更可能で継続的に改善される技術基盤へ変えること — それが、この取り組みの中心でした。

この可観測性基盤の設計・構築・移行・継続運用に関わり、特に以下を担当しました。

  1. 01レガシー監視基盤からの段階的な移行
  2. 02Prometheusを中心としたメトリクス基盤
  3. 03Thanosによる長期メトリクス基盤
  4. 04Grafanaによる可視化
  5. 05Vectorによるログ収集パイプライン
  6. 06Lokiによるログ集約
  7. 07OpenTelemetryを利用した観測データの収集・参照構成
  8. 08アラートルール / Alertmanagerによる通知基盤
  9. 09Kubernetes上への可観測性基盤構築
  10. 10宣言的構成管理
  11. 11Nixを利用したコンポーネントのライフサイクル管理
  12. 12Kubernetes / etcdの継続運用
  13. 13可観測性基盤自身の監視
  14. 14ミドルウェアの更新
  15. 15継続的な運用改善
  • Kubernetes
  • Nix / NixOS
  • Prometheus
  • Thanos
  • Grafana
  • Vector
  • Loki
  • OpenTelemetry
  • Alertmanager
  • etcd
  • Git
  • YAML

Contact

監視を、運用できる可観測性基盤へ。

既存のNagios、Cacti、Muninなどを利用した監視基盤の刷新、Prometheus / Grafana / OpenTelemetryへの移行、Kubernetes上の可観測性基盤構築、継続的な運用までご相談いただけます。

相談する

実績一覧に戻る