5.3. Service Telemetry Framework でのアラート
Prometheus ではアラートルールを作成し、Alertmanager ではアラートルートを作成します。Prometheus サーバーのアラートルールは、アラートを管理する Alertmanager にアラートを送信します。Alertmanager は通知をオフにしたり、アラートを集約してメール (on-call 通知システムまたはチャットプラットフォーム) で通知を送信できます。
アラートを作成するには、以下のタスクを行います。
- Prometheus でアラートルールを作成します。詳細は、「Prometheus でのアラートルールの作成」を参照してください。
Alertmanager でアラートルートを作成します。アラートルートを作成するには、2 つの方法があります。
関連情報
Prometheus と Alertmanager によるアラートまたは通知の詳細については、https://prometheus.io/docs/alerting/overview/ を参照してください。
Service Telemetry Framework (STF) で使用できるアラートの例を見るには、https://github.com/infrawatch/service-telemetry-operator/tree/master/deploy/alerts を参照してください。
5.3.1. Prometheus でのアラートルールの作成
Prometheus はアラートルールを評価して通知を行います。ルール条件が空の結果セットを返す場合は、条件は偽となります。それ以外の場合は、ルールが真となり、アラートが発生します。
手順
- Red Hat OpenShift Container Platform にログインします。
service-telemetry
namespace に切り替えます。$ oc project service-telemetry
アラートルールを含む
PrometheusRule
オブジェクトを作成します。Prometheus Operator は、ルールを Prometheus に読み込みます。$ oc apply -f - <<EOF apiVersion: monitoring.coreos.com/v1 kind: PrometheusRule metadata: creationTimestamp: null labels: prometheus: default role: alert-rules name: prometheus-alarm-rules namespace: service-telemetry spec: groups: - name: ./openstack.rules rules: - alert: Collectd metrics receive rate is zero expr: rate(sg_total_collectd_msg_received_count[1m]) == 0 1 EOF
- 1
- ルールを変更するには、
expr
パラメーターの値を編集します。
Operator がルールを Prometheus に読み込んだことを確認するには、
curl
にアクセスできる Pod を作成します。$ oc run curl --image=radial/busyboxplus:curl -i --tty
curl
コマンドを実行してprometheus-operated
サービスにアクセスし、メモリーに読み込まれるルールを返します。[ root@curl:/ ]$ curl prometheus-operated:9090/api/v1/rules {"status":"success","data":{"groups":[{"name":"./openstack.rules","file":"/etc/prometheus/rules/prometheus-default-rulefiles-0/service-telemetry-prometheus-alarm-rules.yaml","rules":[{"state":"inactive","name":"Collectd metrics receive rate is zero","query":"rate(sg_total_collectd_msg_received_count[1m]) == 0","duration":0,"labels":{},"annotations":{},"alerts":[],"health":"ok","evaluationTime":0.000525886,"lastEvaluation":"2022-02-01T17:42:52.161007803Z","type":"alerting"}],"interval":30,"limit":0,"evaluationTime":0.000541524,"lastEvaluation":"2022-02-01T17:42:52.161000138Z"}]}}
出力に Pod から定義された
./openstack.rules
が含まれるかなど、出力にPrometheusRule
オブジェクトに読み込まれるルールが表示されることを確認するには、Pod を終了します。[ root@curl:/ ]$ exit
curl
Pod を削除して環境を消去します。$ oc delete pod curl pod "curl" deleted
関連情報
- アラートの詳細については、https://github.com/coreos/prometheus-operator/blob/master/Documentation/user-guides/alerting.md を参照してください。
5.3.2. カスタムアラートの設定
カスタムアラートは、「Prometheus でのアラートルールの作成」 で作成した PrometheusRule
オブジェクトに追加できます。
手順
oc edit
コマンドを使用します。$ oc edit prometheusrules prometheus-alarm-rules
-
PrometheusRules
マニフェストを編集します。 - マニフェストを保存し、終了します。
関連情報
- アラートルールの設定方法は、https://prometheus.io/docs/prometheus/latest/configuration/alerting_rules/ を参照してください。
- Prometheus Rules オブジェクトの詳細については、https://github.com/coreos/prometheus-operator/blob/master/Documentation/user-guides/alerting.md を参照してください。
5.3.3. Alertmanager での標準的なアラートルートの作成
Alertmanager を使用して、電子メール、IRC、その他の通知チャネルなどの外部システムにアラートを配信します。Prometheus Operator は、Alertmanager 設定を Red Hat OpenShift Container Platform シークレットとして管理します。デフォルトで、Service Telemetry Framework (STF) は、受信側を持たない基本的な設定をデプロイします。
alertmanager.yaml: |- global: resolve_timeout: 5m route: group_by: ['job'] group_wait: 30s group_interval: 5m repeat_interval: 12h receiver: 'null' receivers: - name: 'null'
STF を使用してカスタム Alertmanager ルートをデプロイするには、alertmanagerConfigManifest
パラメーターを Service Telemetry Operator に渡す必要があります。これにより、更新されたシークレットが作成され、Prometheus Operator の管理対象となります。
alertmanagerConfigManifest
に、送信されるアラートのタイトルとテキストを設定するカスタムテンプレートが含まれている場合は、Base64 エンコードされた設定を使用して、alertmanagerConfigManifest
のコンテンツをデプロイします。詳細は、「Alertmanager のテンプレート化によるアラートルートの作成」 を参照してください。
手順
- Red Hat OpenShift Container Platform にログインします。
service-telemetry
namespace に切り替えます。$ oc project service-telemetry
STF デプロイメントの
ServiceTelemetry
オブジェクトを編集します。$ oc edit stf default
新規パラメーター
alertmanagerConfigManifest
およびSecret
オブジェクトの内容を追加し、Alertmanager のalertmanager.yaml
設定を定義します。注記この手順では、Service Telemetry Operator が管理するデフォルトのテンプレートを読み込みます。変更が正しく入力されていることを確認するには、値を変更して
alertmanager-default
シークレットを返し、新しい値がメモリーに読み込まれていることを確認します。たとえば、パラメーターglobal.resolve_timeout
の値を5m
から10m
に変更します。apiVersion: infra.watch/v1beta1 kind: ServiceTelemetry metadata: name: default namespace: service-telemetry spec: backends: metrics: prometheus: enabled: true alertmanagerConfigManifest: | apiVersion: v1 kind: Secret metadata: name: 'alertmanager-default' namespace: 'service-telemetry' type: Opaque stringData: alertmanager.yaml: |- global: resolve_timeout: 10m route: group_by: ['job'] group_wait: 30s group_interval: 5m repeat_interval: 12h receiver: 'null' receivers: - name: 'null'
設定がシークレットに適用されたことを確認します。
$ oc get secret alertmanager-default -o go-template='{{index .data "alertmanager.yaml" | base64decode }}' global: resolve_timeout: 10m route: group_by: ['job'] group_wait: 30s group_interval: 5m repeat_interval: 12h receiver: 'null' receivers: - name: 'null'
設定が Alertmanager にロードされたことを確認するには、
curl
にアクセスできる Pod を作成します。$ oc run curl --image=radial/busyboxplus:curl -i --tty
alertmanager-operated
サービスに対してcurl
コマンドを実行し、ステータスとconfigYAML
の内容を取得し、提供された設定が Alertmanager の設定と一致することを確認します。[ root@curl:/ ]$ curl alertmanager-operated:9093/api/v1/status {"status":"success","data":{"configYAML":"...",...}}
-
configYAML
フィールドに予想される変更が含まれることを確認します。 Pod を終了します。
[ root@curl:/ ]$ exit
環境を消去するには、
curl
Pod を削除します。$ oc delete pod curl pod "curl" deleted
関連情報
- Red Hat Open Shift Container Platform のシークレットと Prometheus オペレーターの詳細については、Prometheus user guide on alerting を参照してください。
5.3.4. Alertmanager のテンプレート化によるアラートルートの作成
Alertmanager を使用して、電子メール、IRC、その他の通知チャネルなどの外部システムにアラートを配信します。Prometheus Operator は、Alertmanager 設定を Red Hat OpenShift Container Platform シークレットとして管理します。デフォルトで、Service Telemetry Framework (STF) は、受信側を持たない基本的な設定をデプロイします。
alertmanager.yaml: |- global: resolve_timeout: 5m route: group_by: ['job'] group_wait: 30s group_interval: 5m repeat_interval: 12h receiver: 'null' receivers: - name: 'null'
alertmanagerConfigManifest
パラメーターに、送信されたアラートのタイトルとテキストを設定するためのカスタムテンプレートなどが含まれている場合、Base64 エンコードされた設定を使用して、alertmanagerConfigManifest
のコンテンツをデプロイします。
手順
- Red Hat OpenShift Container Platform にログインします。
service-telemetry
namespace に切り替えます。$ oc project service-telemetry
STF デプロイメントの
ServiceTelemetry
オブジェクトを編集します。$ oc edit stf default
STF を使用してカスタム Alertmanager ルートをデプロイするには、
alertmanagerConfigManifest
パラメーターを Service Telemetry Operator に渡す必要があります。これにより、更新されたシークレットが作成され、Prometheus Operator の管理対象となります。apiVersion: infra.watch/v1beta1 kind: ServiceTelemetry metadata: name: default namespace: service-telemetry spec: backends: metrics: prometheus: enabled: true alertmanagerConfigManifest: | apiVersion: v1 kind: Secret metadata: name: 'alertmanager-default' namespace: 'service-telemetry' type: Opaque data: alertmanager.yaml: Z2xvYmFsOgogIHJlc29sdmVfdGltZW91dDogMTBtCiAgc2xhY2tfYXBpX3VybDogPHNsYWNrX2FwaV91cmw+CnJlY2VpdmVyczoKICAtIG5hbWU6IHNsYWNrCiAgICBzbGFja19jb25maWdzOgogICAgLSBjaGFubmVsOiAjc3RmLWFsZXJ0cwogICAgICB0aXRsZTogfC0KICAgICAgICAuLi4KICAgICAgdGV4dDogPi0KICAgICAgICAuLi4Kcm91dGU6CiAgZ3JvdXBfYnk6IFsnam9iJ10KICBncm91cF93YWl0OiAzMHMKICBncm91cF9pbnRlcnZhbDogNW0KICByZXBlYXRfaW50ZXJ2YWw6IDEyaAogIHJlY2VpdmVyOiAnc2xhY2snCg==
設定がシークレットに適用されたことを確認します。
$ oc get secret alertmanager-default -o go-template='{{index .data "alertmanager.yaml" | base64decode }}' global: resolve_timeout: 10m slack_api_url: <slack_api_url> receivers: - name: slack slack_configs: - channel: #stf-alerts title: |- ... text: >- ... route: group_by: ['job'] group_wait: 30s group_interval: 5m repeat_interval: 12h receiver: 'slack'
設定が Alertmanager に読み込まれたことを確認するために、
curl
コマンドにアクセスできる Pod を作成します。$ oc run curl --image=radial/busyboxplus:curl -i --tty
alertmanager-operated
サービスに対してcurl
コマンドを実行し、ステータスとconfigYAML
の内容を取得し、提供された設定が Alertmanager の設定と一致することを確認します。[ root@curl:/ ]$ curl alertmanager-operated:9093/api/v1/status {"status":"success","data":{"configYAML":"...",...}}
-
configYAML
フィールドに予想される変更が含まれることを確認します。 Pod を終了します。
[ root@curl:/ ]$ exit
環境を消去するには、
curl
Pod を削除します。$ oc delete pod curl pod "curl" deleted
関連情報
- Red Hat Open Shift Container Platform のシークレットと Prometheus オペレーターの詳細については、Prometheus user guide on alerting を参照してください。