【Ceph】監視系コンテナについて調査した際の学習記録

2024年7月5日

こんにちは、キクです。

本記事は、僕が自己学習で学んだことをブログでアウトプットするシリーズになります。

今回はCeph環境で動いている『監視系コンテナ』について書いていこうと思います。
具体的には「Grafana」「Prometheus」「Alertmanager」「Node Exporter」が稼働するコンテナです。

それでは、よろしくお願いします。

注意事項

本記事は自己学習としてのアウトプットが目的となります。

そのため、本記事には誤った情報が含まれる可能性もありますが、ご了承ください。

はじめに

つい先月、以下の記事にあるようなCephの学習用環境をローカルに構築したというのは記憶にも新しいです。

冒頭でも触れましたが、そのCeph環境において「mon」や「osd」などCephに関するコンポーネントとは別に以下のようなツールのコンテナが自動的に作成されて稼働していました

  1. Grafana
  2. Prometheus
  3. Alertmanager
  4. Node Exporter
root@ceph01:~# ceph orch ps
NAME                  HOST    PORTS        STATUS         REFRESHED  AGE  MEM USE  MEM LIM  VERSION  IMAGE ID      CONTAINER ID
alertmanager.ceph01   ceph01  *:9093,9094  running (6d)      3h ago   3w    35.1M        -  0.25.0   c8568f914cd2  fdd3bc627a64
crash.ceph01          ceph01               running (6d)      3h ago   3w    8716k        -  17.2.7   ff4519c9e0a2  98bdff902680
crash.ceph02          ceph02               running (2m)      1s ago   3w    10.1M        -  17.2.7   ff4519c9e0a2  4527c003a5bc
crash.ceph03          ceph03               running (91s)     2s ago   3w    11.0M        -  17.2.7   ff4519c9e0a2  7f97de0dde37
crash.ceph04          ceph04               running (65s)     2s ago   3w    30.9M        -  17.2.7   ff4519c9e0a2  3aafa6e5f19b
grafana.ceph01        ceph01  *:3000       running (6d)      3h ago   3w     163M        -  9.4.7    954c08fa6188  5f781567ee65
mgr.ceph01.ysiryi     ceph01  *:8443,9283  running (6d)      3h ago   3w     452M        -  17.2.7   ff4519c9e0a2  9612a07f4450
mgr.ceph02.yqwrrm     ceph02  *:8443,9283  running (2m)      1s ago   3w     474M        -  17.2.7   ff4519c9e0a2  9dd79b00ad77
mon.ceph01            ceph01               running (6d)      3h ago   3w     427M    2048M  17.2.7   ff4519c9e0a2  feea4a0db39a
mon.ceph02            ceph02               running (2m)      1s ago   3w    38.5M    2048M  17.2.7   ff4519c9e0a2  d7bc80d6f2eb
mon.ceph03            ceph03               running (90s)     2s ago   3w    41.0M    2048M  17.2.7   ff4519c9e0a2  e4c4b74278a1
node-exporter.ceph01  ceph01  *:9100       running (6d)      3h ago   3w    21.1M        -  1.5.0    0da6a335fe13  4a900911ba37
node-exporter.ceph02  ceph02  *:9100       running (2m)      1s ago   3w    7396k        -  1.5.0    0da6a335fe13  afe465b01c69
node-exporter.ceph03  ceph03  *:9100       running (91s)     2s ago   3w    7384k        -  1.5.0    0da6a335fe13  2fa76c26ad72
node-exporter.ceph04  ceph04  *:9100       running (65s)     2s ago   3w    7484k        -  1.5.0    0da6a335fe13  e3722691ca60
osd.0                 ceph01               running (6d)      3h ago   3w     184M    4096M  17.2.7   ff4519c9e0a2  ac4699ce114c
osd.1                 ceph02               running (2m)      1s ago   3w    77.0M    4096M  17.2.7   ff4519c9e0a2  2d3019c6f193
osd.2                 ceph03               running (74s)     2s ago   3w    79.1M    4096M  17.2.7   ff4519c9e0a2  06c962601d11
osd.3                 ceph04               running (54s)     2s ago   3w    78.2M    1561M  17.2.7   ff4519c9e0a2  c4397d032917
prometheus.ceph01     ceph01  *:9095       running (6d)      3h ago   3w     166M        -  2.43.0   a07b618ecd1d  a0ecf7592091

これらは「監視関連のツール」というのは何となく把握していたのですが、特に急ぎで必要なわけでもなかったので見て見ぬふりをしていました。

しかし、業務内で「Grafana」などのキーワードを時々耳にするようにもなってきたので、いい機会だと思い今回触りだけでも学んでみようとなりました。

ちなみに、これらのツールに関して今まで一切触れたことがないので、超基本的な部分に留まります。

各監視系コンテナについて

Grafana

オープンソースのデータ可視化および監視ツール
Cephクラスタのメトリクスを可視化するために使用される

主な機能

  • ダッシュボードの作成とカスタマイズ
  • 複数のデータソースの統合 (例: Prometheus, Elasticsearch, InfluxDBなど)
  • 視覚化のための様々なウィジェット(グラフ、チャート、ヒートマップなど)
  • アラートの作成と通知 -> 別でPrometheus / Alertmanagerが動いている環境では利用しなかったりもする

事前設定もしくは自作したダッシュボードからCephのパフォーマンスやステータスなどをリアルタイムで監視できる

Grafanaは複数のデータソース(Prometheus,InfluxDBなど)をサポートしており、Cephメトリクスを収集するためには、通常はPrometheusを利用する

参考:PrometheusとGrafanaを組み合わせて監視用ダッシュボードを作る

Grafanaのダッシュボードには通常以下のURLで接続できる

https://CephサーバIPアドレス:3000

Ceph#1より各コンテナの状況を確認すると、Ceph#1上でポート3000のGrafanaコンテナが稼働していることが分かる

root@ceph01:~# ceph orch ps
NAME                  HOST    PORTS        STATUS         REFRESHED  AGE  MEM USE  MEM LIM  VERSION  IMAGE ID      CONTAINER ID
~省略~
grafana.ceph01        ceph01  *:3000       running (6d)      3h ago   3w     163M        -  9.4.7    954c08fa6188  5f781567ee65
~省略~

Grafana管理画面にログインできない問題

上記画面はログインしなくても確認できたが、Grafanaの特徴の一つでもある「ダッシュボード作成」はログインしないとできなさそうだった

しかし、いざデフォルトのログイン情報「admin / admin」でログインしようとするも失敗してしまう状況
加えて、grafanaコンテナ内部で確認してみるとそもそもadminが存在していない

追記

adminはシステムユーザ一として含まれるものではなく、Grafanaが使用するデータベース(/var/lib/grafana/grafana.db)内に存在するユーザのことだと判明

調べてみるとgrafanaの設定ファイル「/etc/grafana/grafana.ini」の以下の部分が原因らしい

[security]
  disable_initial_admin_creation = true

ChatGPTを参考に、上記設定を修正してログインを試みる

root@ceph01:~# docker exec -it コンテナID /bin/sh
sh-4.4$
sh-4.4$ vi /etc/grafana/grafana.ini
[security]
 #disable_initial_admin_creation = true
  disable_initial_admin_creation = false
root@ceph01:~# docker restart コンテナID
コンテナID

-> デフォルトログイン情報「admin / admin」でログインできるようになった

初回ログインでパスワード変更を促された

ログインできたことでダッシュボード作成などもできるようになった

Prometheus

さまざまなシステムやアプリケーションからメトリクスを収集することが可能で、それを「時系列データベース」と呼ばれる領域に保存する

Alertmanagerと連携してアラート生成することもできる

主な機能

  • メトリクスの収集 (プル型のデータ収集)
  • 時系列データの保存
  • PromQLを使用したデータのクエリ
  • アラートルールの定義と管理
  • 簡単なGUIを提供し、メトリクスのクエリやグラフ表示が可能

アラート設定

Grafanaの管理画面からアラート設定を確認してみたが、確かにPrometheusが設定を持っていそうなことが分かる

Prometheusサーバ(コンテナ)内部でも設定ファイルを確認してみる

/prometheus $ ls -al /etc/prometheus/alerting/
total 48
drwxr-xr-x    2 nobody   nobody        4096 Jun  7 23:53 .
drwxr-xr-x    3 nobody   nobody        4096 Jun  7 23:53 ..
-rw-------    1 nobody   nobody       40075 Jun 10 01:36 ceph_alerts.yml
-rw-------    1 nobody   nobody           0 Jun 10 01:36 custom_alerts.yml
/prometheus $ cat /etc/prometheus/alerting/ceph_alerts.yml
groups:
  - name: "cluster health"
    rules:
      - alert: "CephHealthError"
        annotations:
          description: "The cluster state has been HEALTH_ERROR for more than 5 minutes. Please check 'ceph health detail' for more information."
          summary: "Ceph is in the ERROR state"
        expr: "ceph_health_status == 2"
        for: "5m"
        labels:
          oid: "1.3.6.1.4.1.50495.1.2.1.2.1"
          severity: "critical"
          type: "ceph_default"
      - alert: "CephHealthWarning"
        annotations:
          description: "The cluster state has been HEALTH_WARN for more than 15 minutes. Please check 'ceph health detail' for more information."
          summary: "Ceph is in the WARNING state"
        expr: "ceph_health_status == 1"
        for: "15m"
        labels:
          severity: "warning"
          type: "ceph_default"
  - name: "mon"
    rules:
      - alert: "CephMonDownQuorumAtRisk"
        annotations:
          description: "{{ $min := query \\"floor(count(ceph_mon_metadata) / 2) + 1\\" | first | value }}Quorum requires a majority of monitors (x {{ $min }}) to be active. Without quorum the cluster will become inoperable, affecting all services and connected clients. The following monitors are down: {{- range query \\"(ceph_mon_quorum_status == 0) + on(ceph_daemon) group_left(hostname) (ceph_mon_metadata * 0)\\" }} - {{ .Labels.ceph_daemon }} on {{ .Labels.hostname }} {{- end }}"
          documentation: "<https://docs.ceph.com/en/latest/rados/operations/health-checks#mon-down>"
          summary: "Monitor quorum is at risk"

~省略~

-> かなり大量の設定が入っていた

疑問:GrafanaとPrometheusの役割と関係性がいまいち理解できない

PrometheusにもGUI管理画面は提供されているが、非常にシンプルであり、ダッシュボード作成やデータの可視化にはあまり適していない

グラフは確認できなかったが、以下のURLでPrometheusのGUIに接続できた

http://PrometheusサーバIPアドレス:9095

ポート9095については「ceph orch ps」で表示されたprometheusコンテナで利用しているポート

root@ceph01:~# ceph orch ps
NAME                  HOST    PORTS        STATUS          REFRESHED  AGE  MEM USE  MEM LIM  VERSION  IMAGE ID      CONTAINER ID
~省略~
prometheus.ceph01     ceph01  *:9095       running (108m)     9m ago   3w     127M        -  2.43.0   a07b618ecd1d  ef7a7cf71227

※IPアドレスは実質コンテナ稼働ホストのIPアドレス(今回の場合は192.168.40.151)でOKだった

Grafanaはオープンソースの「データ可視化ツール」であり、Prometheusを含むさまざまなデータソースからメトリクスデータを取り込んで、カスタマイズ可能なダッシュボードを提供することに価値がある

また、Grafanaでもアラート作成や管理は可能であるが、この部分はPrometheus/Alertmanagerの機能で賄えているので基本的に使わない認識で良さそう

Node-Exporter

Prometheusエコシステムの一部で、サーバのメトリクスを収集するエージェント

主な機能

  • システムリソースの使用状況の監視(CPU、メモリ、ディスク、ネットワークなど)
  • エクスポートされたメトリクスの標準化された形式での提供
  • Prometheusとのシームレスな統合

主な役割

システムメトリクスの収集

Node Exporterは、CPU使用率 / メモリ使用率 / ディスクI/O / ネットワーク統計など、ホストシステムのハードウェアおよびOSレベルのメトリクスを収集する

メトリクスの提供

収集したメトリクスをHTTPエンドポイント(デフォルトポート:9100)を通じて公開し、Prometheusが定期的に収集できるようにする -> Prometheus側の設定ファイル「prometheus.yml」に基づいて、定期的にNode Exporterのエンドポイントからメトリクスを収集(=スクレイピング)

以下のように設定が入っている

scrape_configs:
 ~省略~
  - job_name: 'node'
    static_configs:
    - targets: ['ceph01:9100']
      labels:
        instance: 'ceph01'
    - targets: ['ceph02:9100']
      labels:
        instance: 'ceph02'
    - targets: ['ceph03:9100']
      labels:
        instance: 'ceph03'
    - targets: ['ceph04:9100']
      labels:
        instance: 'ceph04'

Alertmanager

Prometheusのアラートを管理するためのツール
Prometheusから送信されたアラートを受信し、それを適切なチャンネル(Email, Slack, PagerDutyなど)に通知する

アラートの集約や抑制、ルーティングも行う

主な機能

  • アラートの受信: Prometheusから送信されたアラートを受信する
  • アラートの集約: 同様のアラートをグループ化し、一つの通知にまとめる。
  • アラートの抑制: 特定の条件に基づいてアラート通知を抑制する
  • アラートのルーティング: アラートを適切な受信者やチャンネルにルーティングする
  • 通知: Email、Slack、PagerDutyなどの通知サービスへの連携

利用方法(ChatGPT調べ)

  1. アラートルールの設定 Prometheus でアラートルールを設定し、特定の条件に基づいてアラートを発生させる
  2. 通知ルートの設定 Alertmanager によってアラート通知をルート設定する 例えば、Eメール、Slack、PagerDuty などの通知先を指定できる
  3. 抑制ルールの設定 短時間で多くのアラートが発生した場合に、重複アラートを抑制するルールを設定できる

疑問:PrometheusとAlertmanagerが連携する設定はどこで行われている?

基本的にはPrometheus側の設定ファイルで行われている

確かに以下のように設定が入っていた

/prometheus $ cat /etc/prometheus/prometheus.yml
# This file is generated by cephadm.
~省略~
alerting:
  alertmanagers:
    - scheme: http
      static_configs:
        - targets: ['ceph01:9093']
~省略~

以下の通り、ceph01のalertmanagerコンテナにおいてポート9093が利用されているので、正常に連携設定が行われていそう

root@ceph01:~# ceph orch ps
NAME                  HOST    PORTS        STATUS         REFRESHED  AGE  MEM USE  MEM LIM  VERSION  IMAGE ID      CONTAINER ID
alertmanager.ceph01   ceph01  *:9093,9094  running (6d)      3h ago   3w    35.1M        -  0.25.0   c8568f914cd2  fdd3bc627a64
~省略~

-学習記録, Ceph
-,