16 監視とアラート #
SUSE Enterprise Storage 7では、cephadmが監視スタックとアラートスタックを展開します。ユーザはcephadmを使用して展開したいサービス(Prometheus、Alertmanager、Grafanaなど)をYAML設定ファイルで指定する必要がありますが、CLIを使用してサービスを展開することもできます。同じ種類のサービスが複数展開される場合は、高可用性セットアップが展開されます。ノードエクスポータはこのルールの例外です。
cephadmを使用して以下の監視サービスを展開できます。
「Prometheus」は監視およびアラートツールキットです。このツールはPrometheusエクスポータからのデータを収集し、事前に定義されたしきい値に達した場合は事前に設定されたアラートを発します。
「Alertmanager」はPrometheusサーバによって送信されるアラートを処理します。このツールはアラートの重複排除、グループ化、ルーティングを行って適切な受信者に届けます。デフォルトでは、自動的にCephダッシュボードが受信者に設定されます。
「Grafana」は視覚化およびアラートソフトウェアです。この監視スタックではGrafanaのアラート機能を使用しません。そのかわり、アラートにはAlertmanagerを使用します。
「ノードエクスポータ」はPrometheus用エクスポータで、インストールしたノードに関するデータを提供します。すべてのノードにノードエクスポータをインストールすることをお勧めします。
Prometheus Manager ModuleはPrometheusエクスポータを提供し、ceph-mgr
収集ポイントのCephパフォーマンスカウンタを伝達します。
「スクレイピング」対象(メトリクスを提供するデーモン)などの、Prometheus設定はcephadmが自動的に設定します。cephadmはデフォルトアラートのリストも展開します。たとえば、health error
、10% OSDs down
、pgs inactive
などです。
デフォルトでは、GrafanaへのトラフィックはTLSで暗号化されます。ユーザは手持ちのTLS証明書を支給するか、自己署名証明書を利用できます。Grafanaが展開される前にカスタム証明書を設定していない場合は、自動的に自己署名証明書が作成され、Grafana用に設定されます。
Grafana用のカスタム証明書は、以下のコマンドを使用して設定できます。
cephuser@adm >
ceph config-key set mgr/cephadm/grafana_key -i $PWD/key.pemcephuser@adm >
ceph config-key set mgr/cephadm/grafana_crt -i $PWD/certificate.pem
AlertmanagerはPrometheusサーバによって送信されるアラートを処理します。重複排除、グループ化、正しいレシーバへのルーティングを行います。アラートはAlertmanagerを用いて停止できますが、Cephダッシュボードからも管理できます。
すべてのノードにノードエクスポータ
を展開することをお勧めします。展開にはnode-exporter
サービスタイプを記載したmonitoring.yaml
ファイルを使用できます。サービスの展開の詳細については、5.4.3.8項 「監視スタックの展開」を参照してください。
16.1 カスタムイメージまたはローカルイメージの設定 #
このセクションでは、サービスの展開やアップグレードを行う際に使用するコンテナイメージの設定を変更する方法を説明します。サービスの展開または再展開に必要なコマンドは含まれません。
監視スタックを展開する方法としては、5.4.3.8項 「監視スタックの展開」に記載されているような、監視スタックの仕様を適用する方法をお勧めします。
カスタムイメージまたはローカルコンテナイメージを展開するには、イメージをcephadmに設定しなければなりません。そのためには、次のコマンドを実行する必要があります。
cephuser@adm >
ceph config set mgr mgr/cephadm/OPTION_NAME VALUE
OPTION_NAMEには、次のいずれかの名前が入ります。
container_image_prometheus
container_image_node_exporter
container_image_alertmanager
container_image_grafana
オプションが設定されていないか、設定が削除されている場合は、以下のイメージをVALUEとして使用します。
registry.suse.com/caasp/v4.5/prometheus-server:2.18.0
registry.suse.com/caasp/v4.5/prometheus-node-exporter:0.18.1
registry.suse.com/caasp/v4.5/prometheus-alertmanager:0.16.2
registry.suse.com/ses/7/ceph/grafana:7.0.3
以下に例を示します。
cephuser@adm >
ceph config set mgr mgr/cephadm/container_image_prometheus prom/prometheus:v1.4.1
カスタムイメージを設定すると、デフォルトの値は無視されます(ただし、上書きはされません)。デフォルトの値はアップデートが利用可能になった際に変更されます。カスタムイメージを設定すると、カスタムイメージを設定したコンポーネントの自動アップデートができなくなります。アップデートをインストール可能にするには、手動で設定(イメージ名とタグ)をアップデートする必要があります。
推奨設定を使用することを選択する場合、以前に設定したカスタムイメージをリセットすることができます。リセット後は再びデフォルト値が使用されます。設定オプションをリセットするには、ceph config rm
を使用してください。
cephuser@adm >
ceph config rm mgr mgr/cephadm/OPTION_NAME
以下に例を示します。
cephuser@adm >
ceph config rm mgr mgr/cephadm/container_image_prometheus
16.2 監視サービスのアップデート #
16.1項 「カスタムイメージまたはローカルイメージの設定」で述べたように、cephadmは推奨されるテスト済みのコンテナイメージのURLが設定された状態で提供されます。これらのイメージはデフォルト値として使用されています。
Cephパッケージをアップデートすると、これらのURLの新しいバージョンが提供される場合があります。この場合、コンテナイメージの取得元がアップデートされるだけで、サービスはアップデートされません。
16.1項 「カスタムイメージまたはローカルイメージの設定」で述べた手動によるアップデート、またはCephパッケージのアップデートにともなう自動アップデートによって、コンテナイメージのURLが最新版にアップデートされると、監視サービスをアップデートできるようになります。
監視サービスのアップデートにはceph orch redeploy
を使用します。以下に例を示します。
cephuser@adm >
ceph orch redeploy node-exportercephuser@adm >
ceph orch redeploy prometheuscephuser@adm >
ceph orch redeploy alertmanagercephuser@adm >
ceph orch redeploy grafana
今のところ、1つのコマンドで存在するすべての監視サービスをアップデートすることはできません。監視サービスをアップデートする順番は重要ではありません。
カスタムコンテナイメージを使用している場合、Cephパッケージがアップデートされても監視サービス用のURLは自動的には変更されません。カスタムコンテナイメージを指定している場合は、手動で新しいコンテナイメージのURLを指定する必要があります。たとえば、ローカルコンテナレジストリを使用する場合に、このようなケースが生じます。
使用をお勧めするコンテナイメージのURLについては、16.1項 「カスタムイメージまたはローカルイメージの設定」セクションを参照してください。
16.3 監視の無効化 #
監視スタックを無効化するには、次のコマンドを実行します。
cephuser@adm >
ceph orch rm grafanacephuser@adm >
ceph orch rm prometheus --force # this will delete metrics data collected so farcephuser@adm >
ceph orch rm node-exportercephuser@adm >
ceph orch rm alertmanagercephuser@adm >
ceph mgr module disable prometheus
16.4 Grafanaの設定 #
CephダッシュボードのバックエンドはGrafana URLを必要とします。これは、フロントエンドがGrafanaダッシュボードの有無を確認してからロードできるようにするためです。CephダッシュボードにGrafanaを実装している方法の性質から、CephダッシュボードでGrafanaのグラフを確認できるようにするには、2つの作業を結びつける必要があります。
バックエンド(Ceph MGRモジュール)は要求されたグラフの存在を確認する必要があります。この要求が正常に完了した場合、バックエンドはフロントエンドに対してGrafanaに安全にアクセスできることを通知します。
その後、フロントエンドは
iframe
を使用してユーザのブラウザから直接Grafanaのグラフを要求します。Cephダッシュボードを通じて、迂回することなくGrafanaのインスタンスに直接アクセスします。
お客様の環境によっては、ユーザのブラウザがCephダッシュボードで設定したURLに直接アクセスすることが難しい場合もあります。対策としては、フロントエンド(ユーザのブラウザ)がGrafanaへのアクセスに使うべきURLを伝えるためだけに使用する、別のURLを設定する方法があります。
フロントエンドに返答するためのURLを変更するには、次のコマンドを実行します。
cephuser@adm >
ceph dashboard set-grafana-frontend-api-url GRAFANA-SERVER-URL
コマンド中でオプションの値を指定していない場合は、GRAFANA_API_URLオプションの値が利用されます。この値は、cephadmのアップデートにより自動的かつ定期的に設定されます。オプションの値を指定した場合は、ブラウザが指定したURLを使ってGrafanaにアクセスするように設定されます。
16.5 Prometheus Manager Moduleの設定 #
Prometheus Manager ModuleはCephの内部モジュールの1つで、Cephの機能を拡張します。このモジュールはCephから(メタ)データを読み込み、Cpehの状態やヘルスに関する情報を取得します。そして、Prometheusが利用できるフォーマットで(スクレイピングされた)データを提供します。
設定変更を適用するには、Prometheus Manager Moduleを再起動する必要があります。
16.5.1 ネットワークインタフェースの設定 #
デフォルトでは、Prometheus Manager ModuleはIPv4およびIPv6の全アドレスからのHTTPリクエストをホストのポート9283番で受け付けます。ポートとリッスンアドレスはceph config-key set
でmgr/prometheus/server_addr
キーとmgr/prometheus/server_port
キーを使用して設定可能です。このポートはPrometheusのレジストリに登録されます。
server_addr
をアップデートするには、次のコマンドを実行します。
cephuser@adm >
ceph config set mgr mgr/prometheus/server_addr 0.0.0.0
server_port
をアップデートするには、次のコマンドを実行します。
cephuser@adm >
ceph config set mgr mgr/prometheus/server_port 9283
16.5.2 scrape_interval
の設定 #
デフォルトでは、Prometheus Manager Moduleのスクレイピング間隔は15秒に設定されています。スクレイピング間隔を10秒未満にすることはお勧めしません。Prometheusモジュールに別のスクレイピング間隔を設定するには、scrape_interval
を希望する値に設定してください。
正常な動作と不具合の防止のため、このモジュールのscrape_interval
とPrometheusのスクレイピング間隔は常に一致するように設定する必要があります。
cephuser@adm >
ceph config set mgr mgr/prometheus/scrape_interval 15
16.5.3 キャッシュの設定 #
大規模なクラスタ(OSDが1000を超えるクラスタ)では、メトリクスの取得にかかる時間が重要になる場合があります。キャッシュを使用しないと、Prometheus Manager Moduleがマネージャを過負荷状態に陥らせ、Ceph Managerインスタンスが応答しなくなったり、クラッシュするおそれがあります。そのため、キャッシュ機能はデフォルトで有効に設定してあり、無効にできません。しかしその結果、キャッシュが古くなる可能性があります。Cephからのメトリクスの取得にかかる時間がscrape_interval
の設定を超えると、キャッシュは古くなったと見なされます。
この場合、警告が記録されるとともに、モジュールが次のいずれかの動作をします。
HTTPステータスコード503(service unavailable)を返します。
キャッシュが古くなっている可能性を承知の上で、キャッシュのコンテンツを返します。
この動作は、ceph config set
コマンドにより設定できます。
古くなっている可能性のあるデータを返すことをモジュールに指示するには、return
に設定してください。
cephuser@adm >
ceph config set mgr mgr/prometheus/stale_cache_strategy return
service unavailable
を返すことをモジュールに指示するには、fail
に設定してください。
cephuser@adm >
ceph config set mgr mgr/prometheus/stale_cache_strategy fail
16.5.4 RBDイメージ監視の有効化 #
必要に応じて、Prometheus Manager ModuleはRBDイメージごとのIO統計状態を収集できます。そのためには、動的OSDパフォーマンスカウンタを有効化します。mgr/prometheus/rbd_stats_pools
設定パラメータで指定したプールのすべてのイメージについて、統計情報が収集されます。
パラメータはpool[/namespace]
エントリのカンマかスペースで区切ったリストです。namespaceを指定しない場合は、プールのすべてのネームスペースについて統計情報が収集されます。
以下に例を示します。
cephuser@adm >
ceph config set mgr mgr/prometheus/rbd_stats_pools "pool1,pool2,poolN"
モジュールは指定されたプールとネームスペースをスキャンして、利用可能なイメージのリストを作成します。さらに、モジュールはリストを定期的に更新します。更新間隔はmgr/prometheus/rbd_stats_pools_refresh_interval
パラメータにより設定可能です(秒単位)。デフォルト値は300秒(5分)です。
たとえば、同期間隔を10分に変更するには次のコマンドを実行します。
cephuser@adm >
ceph config set mgr mgr/prometheus/rbd_stats_pools_refresh_interval 600
16.6 Prometheusのセキュリティモデル #
Prometheusのセキュリティモデルは、信頼されていないユーザがPrometheus HTTPのエンドポイントとログにアクセスできる場合を仮定しています。この条件では、信頼されていないユーザが、データベースに格納されているPrometheusが収集したすべての(メタ)データや、さまざまな運用情報とデバッグ情報にアクセスできます。
しかし、PrometheusのHTTP APIは読み込み専用の動作しかできないように制限されています。APIにより設定を変更することはできないため、機密情報は持ち出せません。さらに、PrometheusにはDoS攻撃(Denial-of-Service Attack)の被害を軽減するための対策が組み込まれています。
16.7 Prometheus Alertmanager SNMPウェブフック #
SNMPトラップを使用してPrometheusアラートに関する通知を受け取りたい場合は、cephadmを使用してPrometheus Alertmanager SNMPウェブフックをインストールできます。そのためには、以下の内容を含むサービス仕様と配置仕様を記載するファイルを作成する必要があります。
サービス仕様と配置仕様を記載するファイルの詳細については、5.4.2項 「サービス仕様と配置仕様」を参照してください。
service_type: container service_id: prometheus-webhook-snmp placement: ADD_PLACEMENT_HERE image: registry.suse.com/ses/7/prometheus-webhook-snmp:latest args: - "--publish 9099:9099" envs: - ARGS="--debug --snmp-host=ADD_HOST_GATEWAY_HERE" - RUN_ARGS="--metrics" EOF
サービスをデフォルト設定で動作させるには、上記のサービス仕様を使用してください。
Prometheus受信者がリスンするポートを公開する必要があります。そのためには、サービスの実行中にコマンドライン引数--publish HOST_PORT:CONTAINER_PORT
を使用します。これは、コンテナがポートを自動的には公開しないためです。仕様に以下の行を追加する方法でも、ポートを公開できます。
args: - "--publish 9099:9099"
あるいは、コマンドライン引数--network=host
を使用して、ホストネットワークにコンテナを接続する方法もあります。
args: - "--network=host"
SNMPトラップ受信者がコンテナと同じホストにインストールされていない場合、SNMPホストのFQDNも指定する必要があります。container/hostの外部からSNMPトラップを受信できるように、コンテナのネットワークゲートウェイを使用してください。
envs: - ARGS="--debug --snmp-host=CONTAINER_GATEWAY"
16.7.1 prometheus-webhook-snmp
サービスの設定 #
コンテナは環境変数または設定ファイルを用いて設定できます。
環境変数を使用する場合は、ARGS
によりグローバルオプションを設定し、RUN_ARGS
によりrun
コマンドのオプションを指定します。サービス仕様は以下のように編集する必要があります。
envs: - ARGS="--debug --snmp-host=CONTAINER_GATEWAY" - RUN_ARGS="--metrics --port=9101"
設定ファイルを使用する場合、サービス仕様を以下のように編集する必要があります。
files: etc/prometheus-webhook-snmp.conf: - "debug: True" - "snmp_host: ADD_HOST_GATEWAY_HERE" - "metrics: True" volume_mounts: etc/prometheus-webhook-snmp.conf: /etc/prometheus-webhook-snmp.conf
展開には次のコマンドを実行します。
cephuser@adm >
ceph orch apply -i SERVICE_SPEC_FILE
詳細については、5.4.3項 「Cephサービスの展開」を参照してください。
16.7.2 Prometheus AlertmanagerのSNMP用設定 #
最後に、Prometheus AlertmanagerをSNMPトラップ用に設定する必要があります。このサービスをまだ展開していない場合は、サービス仕様ファイルを作成してください。Prometheus Alertmanager SNMPウェブフックがインストールされているホストのIPアドレスかFQDNでIP_OR_FQDN
を置き換える必要があります。以下に例を示します。
すでにこのサービスを展開している場合は、AlertmanagerがSNMP用に正しくセットアップされていることを確認し、以下の設定で再展開してください。
service_type: alertmanager placement: hosts: - HOSTNAME webhook_configs: - 'http://IP_OR_FQDN:9099/'
次のコマンドを実行して、サービス仕様を適用します。
cephuser@adm >
ceph orch apply -i SERVICE_SPEC_FILE