3.5. コアプラットフォームモニタリングのアラートと通知の設定
ローカルまたは外部の Alertmanager インスタンスを設定して、Prometheus からエンドポイントレシーバーにアラートをルーティングできます。すべての時系列とアラートにカスタムラベルを割り当てて、便利なメタデータ情報を追加することもできます。
3.5.1. 外部 Alertmanager インスタンスの設定 リンクのコピーリンクがクリップボードにコピーされました!
OpenShift Container Platform モニタリングスタックには、Prometheus からのアラートのルートなど、ローカルの Alertmanager インスタンスが含まれます。
外部の Alertmanager インスタンスを追加すると、OpenShift Container Platform コアプロジェクトのアラートをルーティングできます。
複数のクラスターに同じ外部 Alertmanager 設定を追加し、クラスターごとにローカルインスタンスを無効にする場合には、単一の外部 Alertmanager インスタンスを使用して複数のクラスターのアラートルーティングを管理できます。
前提条件
-
cluster-adminクラスターロールを持つユーザーとしてクラスターにアクセスできる。 -
cluster-monitoring-configConfigMapオブジェクトを作成している。 -
OpenShift CLI (
oc) がインストールされている。
手順
openshift-monitoringプロジェクトでcluster-monitoring-configconfig map を編集します。$ oc -n openshift-monitoring edit configmap cluster-monitoring-configdata/config.yaml/prometheusK8sの下に、設定の詳細を含むadditionalAlertmanagerConfigsセクションを追加します。apiVersion: v1 kind: ConfigMap metadata: name: cluster-monitoring-config namespace: openshift-monitoring data: config.yaml: | prometheusK8s: additionalAlertmanagerConfigs: - <alertmanager_specification>1 - 1
<alertmanager_specification>は、追加の Alertmanager インスタンスの認証やその他の設定の詳細に置き換えます。現時点で、サポートされている認証方法はベアラートークン (bearerToken) およびクライアント TLS(tlsConfig) です。
次のサンプル config map は、クライアント TLS 認証でベアラートークンを使用して、Prometheus 用の追加の Alertmanager を設定します。
apiVersion: v1 kind: ConfigMap metadata: name: cluster-monitoring-config namespace: openshift-monitoring data: config.yaml: | prometheusK8s: additionalAlertmanagerConfigs: - scheme: https pathPrefix: / timeout: "30s" apiVersion: v1 bearerToken: name: alertmanager-bearer-token key: token tlsConfig: key: name: alertmanager-tls key: tls.key cert: name: alertmanager-tls key: tls.crt ca: name: alertmanager-tls key: tls.ca staticConfigs: - external-alertmanager1-remote.com - external-alertmanager1-remote2.com- 変更を適用するためにファイルを保存します。新しい設定の影響を受ける Pod は自動的に再デプロイされます。
3.5.1.1. ローカル Alertmanager の無効化 リンクのコピーリンクがクリップボードにコピーされました!
Prometheus インスタンスからのアラートをルーティングするローカル Alertmanager は、OpenShift Container Platform モニタリングスタックの openshift-monitoring プロジェクトではデフォルトで有効になっています。
ローカル Alertmanager を必要としない場合、openshift-monitoring プロジェクトで cluster-monitoring-config config map を指定して無効にできます。
前提条件
-
cluster-adminクラスターロールを持つユーザーとしてクラスターにアクセスできる。 -
cluster-monitoring-configconfig map を作成している。 -
OpenShift CLI (
oc) がインストールされている。
手順
openshift-monitoringプロジェクトでcluster-monitoring-configconfig map を編集します。$ oc -n openshift-monitoring edit configmap cluster-monitoring-configdata/config.yamlの下に、alertmanagerMainコンポーネントのenabled: falseを追加します。apiVersion: v1 kind: ConfigMap metadata: name: cluster-monitoring-config namespace: openshift-monitoring data: config.yaml: | alertmanagerMain: enabled: false- 変更を適用するためにファイルを保存します。Alertmanager インスタンスは、この変更を適用すると自動的に無効にされます。
3.5.2. Alertmanager のシークレットの設定 リンクのコピーリンクがクリップボードにコピーされました!
OpenShift Container Platform モニタリングスタックには、アラートを Prometheus からエンドポイントレシーバーにルーティングする Alertmanager が含まれています。Alertmanager がアラートを送信できるようにレシーバーで認証する必要がある場合は、レシーバーの認証認証情報を含むシークレットを使用するように Alertmanager を設定できます。
たとえば、シークレットを使用して、プライベート認証局 (CA) によって発行された証明書を必要とするエンドポイント受信者を認証するように Alertmanager を設定できます。また、基本 HTTP 認証用のパスワードファイルを必要とする受信者で認証するためにシークレットを使用するように Alertmanager を設定することもできます。いずれの場合も、認証の詳細は、ConfigMap オブジェクトではなく Secret オブジェクトに含まれています。
3.5.2.1. Alertmanager 設定へのシークレットの追加 リンクのコピーリンクがクリップボードにコピーされました!
openshift-monitoring プロジェクトの cluster-monitoring-config config map を編集することで、Alertmanager 設定にシークレットを追加できます。
config map にシークレットを追加すると、シークレットは、Alertmanager Pod の alertmanager コンテナー内の /etc/alertmanager/secrets/<secret_name> にボリュームとしてマウントされます。
前提条件
-
cluster-adminクラスターロールを持つユーザーとしてクラスターにアクセスできる。 -
cluster-monitoring-configconfig map を作成している。 -
openshift-monitoringプロジェクトの Alertmanager で設定するシークレットを作成しました。 -
OpenShift CLI (
oc) がインストールされている。
手順
openshift-monitoringプロジェクトでcluster-monitoring-configconfig map を編集します。$ oc -n openshift-monitoring edit configmap cluster-monitoring-configdata/config.yaml/alertmanagerMainの下にsecrets:セクションを次の設定で追加します。apiVersion: v1 kind: ConfigMap metadata: name: cluster-monitoring-config namespace: openshift-monitoring data: config.yaml: | alertmanagerMain: secrets:1 - <secret_name_1>2 - <secret_name_2>次の config map 設定の例では、
test-secret-basic-authおよびtest-secret-api-tokenという名前の 2 つのSecretオブジェクトを使用するように Alertmanager を設定します。apiVersion: v1 kind: ConfigMap metadata: name: cluster-monitoring-config namespace: openshift-monitoring data: config.yaml: | alertmanagerMain: secrets: - test-secret-basic-auth - test-secret-api-token- 変更を適用するためにファイルを保存します。新しい設定は自動的に適用されます。
3.5.3. 追加ラベルの時系列 (time series) およびアラートへの割り当て リンクのコピーリンクがクリップボードにコピーされました!
Prometheus の外部ラベル機能を使用して、Prometheus から送信されるすべての時系列とアラートにカスタムラベルを付けることができます。
前提条件
-
cluster-adminクラスターロールを持つユーザーとしてクラスターにアクセスできる。 -
cluster-monitoring-configConfigMapオブジェクトを作成している。 -
OpenShift CLI (
oc) がインストールされている。
手順
openshift-monitoringプロジェクトでcluster-monitoring-configconfig map を編集します。$ oc -n openshift-monitoring edit configmap cluster-monitoring-configdata/config.yamlの下の各メトリクスに追加するラベルを定義します。apiVersion: v1 kind: ConfigMap metadata: name: cluster-monitoring-config namespace: openshift-monitoring data: config.yaml: | prometheusK8s: externalLabels: <key>: <value>1 - 1
<key>: <value>をキーと値のペアに置き換えます。<key>は新しいラベルの一意の名前、<value>はその値です。
警告-
prometheusまたはprometheus_replicaは予約され、上書きされるため、これらをキー名として使用しないでください。 -
キー名に
clusterを使用しないでください。これを使用すると、開発者ダッシュボードでデータが表示されない問題が発生する可能性があります。
たとえば、リージョンと環境に関するメタデータをすべての時系列とアラートに追加するには、次の例を使用します。
apiVersion: v1 kind: ConfigMap metadata: name: cluster-monitoring-config namespace: openshift-monitoring data: config.yaml: | prometheusK8s: externalLabels: region: eu environment: prod- 変更を適用するためにファイルを保存します。新しい設定の影響を受ける Pod は自動的に再デプロイされます。
3.5.4. アラート通知の設定 リンクのコピーリンクがクリップボードにコピーされました!
OpenShift Container Platform 4.18 では、アラート UI でアラートの発生を確認できます。アラートレシーバーを設定することで、デフォルトのプラットフォームアラートに関する通知を送信するように Alertmanager を設定できます。
Alertmanager はデフォルトでは通知を送信しません。Web コンソールまたは alertmanager-main シークレットを通じてアラートレシーバーを設定して、通知を受信するように Alertmanager を設定することを強く推奨します。
3.5.4.1. デフォルトのプラットフォームアラートのアラートルーティングを設定する リンクのコピーリンクがクリップボードにコピーされました!
クラスターからの重要なアラートを受信するために通知を送信するように Alertmanager を設定できます。Alertmanager からデフォルトのプラットフォームアラートに関する通知を送信する場所と方法をカスタマイズするには、openshift-monitoring namespace の alertmanager-main シークレットのデフォルト設定を編集します。
サポート対象のアップストリームバージョンの Alertmanager 機能はすべて、OpenShift Container Platform の Alertmanager 設定でもサポートされます。サポート対象のアップストリーム Alertmanager バージョンのあらゆる設定オプションを確認するには、Alertmanager configuration (Prometheus ドキュメント) を参照してください。
前提条件
-
cluster-adminクラスターロールを持つユーザーとしてクラスターにアクセスできる。 -
OpenShift CLI (
oc) がインストールされている。
手順
現在アクティブな Alertmanager 設定を
alertmanager-mainシークレットから展開し、ローカルのalertmanager.yamlファイルとして保存します。$ oc -n openshift-monitoring get secret alertmanager-main --template='{{ index .data "alertmanager.yaml" }}' | base64 --decode > alertmanager.yaml-
alertmanager.yamlファイルを開きます。 Alertmanager の設定を編集します。
オプション: デフォルトの Alertmanager 設定を変更します。
デフォルトの Alertmanager シークレット YAML の例
global: resolve_timeout: 5m http_config: proxy_from_environment: true1 route: group_wait: 30s2 group_interval: 5m3 repeat_interval: 12h4 receiver: default routes: - matchers: - "alertname=Watchdog" repeat_interval: 2m receiver: watchdog receivers: - name: default - name: watchdog- 1
- HTTP クラスター全体のプロキシーを設定した場合は、
proxy_from_environmentパラメーターをtrueに設定して、すべてのアラートレシーバーのプロキシーを有効にします。 - 2
- Alertmanager が通知を送信する前に、アラートグループの初期アラートを収集するまで待機する時間を指定します。
- 3
- 最初の通知がすでに送信されているアラートグループに追加された新しいアラートに関する通知を Alertmanager が送信するまでの時間を指定します。
- 4
- アラート通知を繰り返すまでの最小時間を指定します。各グループの間隔で通知を繰り返す場合は、
repeat_intervalの値をgroup_intervalの値よりも小さく設定します。ただし、特定の Alertmanager Pod が再起動または再スケジュールされた場合などには、通知の繰り返しが遅れる可能性があります。
アラートレシーバーの設定を追加します。
# ... receivers: - name: default - name: watchdog - name: <receiver>1 <receiver_configuration>2 # ...PagerDuty をアラートレシーバーとして設定する例
# ... receivers: - name: default - name: watchdog - name: team-frontend-page pagerduty_configs: - routing_key: xxxxxxxxxx1 http_config:2 proxy_from_environment: true authorization: credentials: xxxxxxxxxx # ...メールアドレスをアラートレシーバーとして設定する例
# ... receivers: - name: default - name: watchdog - name: team-frontend-page email_configs: - to: myemail@example.com1 from: alertmanager@example.com2 smarthost: 'smtp.example.com:587'3 auth_username: alertmanager@example.com4 auth_password: password hello: alertmanager5 # ...重要Alertmanager には、メールアラートを送信するために外部 SMTP サーバーが必要です。メールアラートのレシーバーを設定する際には、外部 SMTP サーバーの必要な接続の詳細情報があることを確認してください。
ルーティング設定を追加します。
# ... route: group_wait: 30s group_interval: 5m repeat_interval: 12h receiver: default routes: - matchers: - "alertname=Watchdog" repeat_interval: 2m receiver: watchdog - matchers:1 - "<your_matching_rules>"2 receiver: <receiver>3 # ...警告match、match_re、target_match、target_match_re、source_match、source_match_reのキー名は使用しないでください。これらは非推奨であり、今後のリリースで削除される予定です。アラートルーティングの例
# ... route: group_wait: 30s group_interval: 5m repeat_interval: 12h receiver: default routes: - matchers: - "alertname=Watchdog" repeat_interval: 2m receiver: watchdog - matchers:1 - "service=example-app" routes:2 - matchers: - "severity=critical" receiver: team-frontend-page # ...前の例では、
example-appサービスによって発生した重大度がcriticalのアラートが、team-frontend-pageレシーバーにルーティングされます。通常、このタイプのアラートは、個人または緊急対応チームに通知します。
新規設定をファイルで適用します。
$ oc -n openshift-monitoring create secret generic alertmanager-main --from-file=alertmanager.yaml --dry-run=client -o=yaml | oc -n openshift-monitoring replace secret --filename=-ルーティングツリーを可視化してルーティング設定を確認します。
$ oc exec alertmanager-main-0 -n openshift-monitoring -- amtool config routes show --alertmanager.url http://localhost:9093出力例
Routing tree: . └── default-route receiver: default ├── {alertname="Watchdog"} receiver: Watchdog └── {service="example-app"} receiver: default └── {severity="critical"} receiver: team-frontend-page
3.5.4.2. OpenShift Container Platform Web コンソールを使用したアラートルーティングの設定 リンクのコピーリンクがクリップボードにコピーされました!
OpenShift Container Platform Web コンソールを使用してアラートルーティングを設定すると、クラスターの重要な問題を確実に把握できます。
OpenShift Container Platform Web コンソールでは、alertmanager-main シークレットよりもアラートルーティングを設定するための設定が少なくなっています。より多くの設定にアクセスしてアラートルーティングを設定するには、「デフォルトのプラットフォームアラートのアラートルーティングを設定する」を参照してください。
前提条件
-
cluster-adminクラスターロールを持つユーザーとしてクラスターにアクセスできる。
手順
Administrator パースペクティブで、Administration
Cluster Settings Configuration Alertmanager に移動します。 注記または、通知ドロワーから同じページに移動することもできます。OpenShift Container Platform Web コンソールの右上にあるベルのアイコンを選択し、AlertmanagerReceiverNotConfigured アラートで Configure を選択します。
- ページの Receivers セクションで、Create Receiver をクリックします。
- Create Receiver フォームで、Receiver name を追加し、リストから Receiver type を選択します。
レシーバー設定を編集します。
PagerDuty receiver の場合:
- 統合のタイプを選択し、PagerDuty 統合キーを追加します。
- PagerDuty インストールの URL を追加します。
- クライアントおよびインシデントの詳細または重大度の指定を編集する場合は、Show advanced configuration をクリックします。
Webhook receiver の場合:
- HTTP POST リクエストを送信するエンドポイントを追加します。
- デフォルトオプションを編集して解決したアラートを receiver に送信する場合は、Show advanced configuration をクリックします。
メール receiver の場合:
- 通知を送信するメールアドレスを追加します。
SMTP 設定の詳細を追加します。これには、通知の送信先のアドレス、メールの送信に使用する smarthost およびポート番号、SMTP サーバーのホスト名、および認証情報を含む詳細情報が含まれます。
重要Alertmanager には、メールアラートを送信するために外部 SMTP サーバーが必要です。メールアラートのレシーバーを設定する際には、外部 SMTP サーバーの必要な接続の詳細情報があることを確認してください。
- TLS が必要かどうかを選択します。
- 解決済みのアラートが receiver に送信されないようにデフォルトオプションを編集する、またはメール通知設定のボディーを編集する必要がある場合は、Show advanced configuration をクリックします。
Slack receiver の場合:
- Slack Webhook の URL を追加します。
- 通知を送信する Slack チャネルまたはユーザー名を追加します。
- デフォルトオプションを編集して解決済みのアラートが receiver に送信されないようにしたり、アイコンおよびユーザー設定を編集する必要がある場合は、Show advanced configuration を選択します。チャネル名とユーザー名を検索し、これらをリンクするかどうかを選択することもできます。
デフォルトでは、すべてのセレクターに一致するラベルを持つ Firing アラートが receiver に送信されます。receiver に送信する前に、Firing アラートのラベル値を完全に一致させる場合は、次の手順を実行します。
- フォームの Routing Labels セクションに、ルーティングラベルの名前と値を追加します。
- Add label を選択して、さらにルーティングラベルを追加します。
- Create をクリックしてレシーバーを作成します。
3.5.4.3. デフォルトのプラットフォームアラートとユーザー定義アラートに異なるアラートレシーバーを設定する リンクのコピーリンクがクリップボードにコピーされました!
デフォルトのプラットフォームアラートとユーザー定義アラートに異なるアラートレシーバーを設定して、次の結果を確実に得ることができます。
- すべてのデフォルトのプラットフォームアラートは、これらのアラートを担当するチームが所有する受信機に送信されます。
- すべてのユーザー定義アラートは別の受信者に送信されるため、チームはプラットフォームアラートにのみ集中できます。
これを実現するには、Cluster Monitoring Operator によってすべてのプラットフォームアラートに追加される openshift_io_alert_source="platform" ラベルを使用します。
-
デフォルトのプラットフォームアラートを一致させるには、
openshift_io_alert_source="platform"マッチャーを使用します。 -
ユーザー定義のアラートを一致させるには、
openshift_io_alert_source!="platform"または'openshift_io_alert_source=""'マッチャーを使用します。
ユーザー定義アラート専用の Alertmanager の別のインスタンスを有効にしている場合、この設定は適用されません。