6.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 を参照してください。
6.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.rhobs/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 EOF
ルールを変更するには、
expr
パラメーターの値を編集します。Operator がルールを Prometheus に読み込んだことを確認するには、Basic 認証で default-prometheus-proxy ルートに対して
curl
コマンドを実行します。$ curl -k -H "Authorization: Bearer $(oc create token stf-prometheus-reader)" https://$(oc get route default-prometheus-proxy -ogo-template='{{ .spec.host }}')/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 count is zero","query":"rate(sg_total_collectd_msg_received_count[1m]) == 0","duration":0,"labels":{},"annotations":{},"alerts":[],"health":"ok","evaluationTime":0.00034627,"lastEvaluation":"2021-12-07T17:23:22.160448028Z","type":"alerting"}],"interval":30,"evaluationTime":0.000353787,"lastEvaluation":"2021-12-07T17:23:22.160444017Z"}]}}
関連情報
6.3.2. カスタムアラートの設定
カスタムアラートは、「Prometheus でのアラートルールの作成」 で作成した PrometheusRule
オブジェクトに追加できます。
手順
oc edit
コマンドを使用します。$ oc edit prometheusrules.monitoring.rhobs prometheus-alarm-rules
-
PrometheusRules
マニフェストを編集します。 - マニフェストを保存し、終了します。
関連情報
- アラートルールの設定方法は、https://prometheus.io/docs/prometheus/latest/configuration/alerting_rules/ を参照してください。
- PrometheusRules オブジェクトの詳細は、https://github.com/coreos/prometheus-operator/blob/master/Documentation/user-guides/alerting.md を参照してください。
6.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'
Prometheus Pod から
alertmanager-proxy
サービスに対してwget
コマンドを実行して、ステータスとconfigYAML
の内容を取得し、提供された設定が Alertmanager の設定と一致することを確認します。$ oc exec -it prometheus-default-0 -c prometheus -- sh -c "wget --header \"Authorization: Bearer \$(cat /var/run/secrets/kubernetes.io/serviceaccount/token)\" https://default-alertmanager-proxy:9095/api/v1/status -q -O -" {"status":"success","data":{"configYAML":"...",...}}
-
configYAML
フィールドに予想される変更が含まれることを確認します。
関連情報
- Red Hat OpenShift Container Platform のシークレットと Prometheus オペレーターの詳細は、Prometheus user guide on alerting を参照してください。
6.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
次の例のように、alertmanager.yaml というファイルに必要な alertmanager 設定を作成します。
$ cat > alertmanager.yaml <<EOF 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' EOF
設定マニフェストを生成して、STF デプロイメントの
ServiceTelemetry
オブジェクトに追加します。$ CONFIG_MANIFEST=$(oc create secret --dry-run=client generic alertmanager-default --from-file=alertmanager.yaml -o json) $ oc patch stf default --type=merge -p '{"spec":{"alertmanagerConfigManifest":'"$CONFIG_MANIFEST"'}}'
設定がシークレットに適用されたことを確認します。
注記operator が各オブジェクトを更新するため、少し時間がかかります。
$ 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'
Prometheus Pod から
alertmanager-proxy
サービスに対してwget
コマンドを実行して、ステータスとconfigYAML
の内容を取得し、提供された設定が Alertmanager の設定と一致することを確認します。$ oc exec -it prometheus-default-0 -c prometheus -- /bin/sh -c "wget --header \"Authorization: Bearer \$(cat /var/run/secrets/kubernetes.io/serviceaccount/token)\" https://default-alertmanager-proxy:9095/api/v1/status -q -O -" {"status":"success","data":{"configYAML":"...",...}}
-
configYAML
フィールドに予想される変更が含まれることを確認します。
関連情報
- Red Hat OpenShift Container Platform のシークレットと Prometheus オペレーターの詳細は、Prometheus user guide on alerting を参照してください。