Anypoint Platform PCE のアラートの設定

Anypoint Platform Private Cloud Edition (Anypoint Platform PCE) では、いずれかのアラート定義で指定された条件が検出された場合にトリガーされる組み込みアラートが提供されます。

測定値は Prometheus​ に保存され、 Alertmanager​ によって読み取られます。アラートがトリガーされると、Alertmanager はメールを送信します。

アラート定義

デフォルトのアラートを次の表に示します。

Table 1. アラート定義
コンポーネント アラート 説明

CPU

高い CPU 使用量

使用量が 75% を超えたときに警告をトリガーし、使用量が 90% を超えたときに重大なエラーをトリガーします。

Memory (メモリ)

高いメモリ使用量

使用量が 80% を超えたときに警告をトリガーし、使用量が 90% を超えたときに重大なエラーをトリガーします。

Systemd

全体的な systemd の健全性

失敗したサービスが systemd によって検出されたときにエラーをトリガーします。

Systemd

個別の systemd ユニットの健全性

systemd ユニットが読み込まれないかアクティブでないときにエラーをトリガーします。

Filesystem (ファイルシステム)

高いディスク領域使用量

使用量が 80% を超えたときに警告をトリガーし、使用量が 90% を超えたときに重大なエラーをトリガーします。

Filesystem (ファイルシステム)

高い inode 使用量

使用量が 90% を超えたときに警告をトリガーし、使用量が 95% を超えたときに重大なエラーをトリガーします。

System (システム)

アップタイム

ノードのアップタイムが 5 分未満のときに警告をトリガーします。

System (システム)

カーネルパラメーター

パラメーターが設定されていないときにエラーをトリガーします。詳細は、 値の表​を参照してください。

Etcd

etcd インスタンスの健全性

etcd リーダーが 5 分以上ダウンしたときにエラーをトリガーします。

Etcd

etcd レイテンシーチェック

フォロワーとリーダーのレイテンシーが 500 ミリ秒を超えたときに警告をトリガーし、1 分間で 1 秒を超えたときにエラーをトリガーします。

Docker

Docker デーモンの健全性

Docker デーモンがダウンしたときにエラーをトリガーします。

Kubernetes

Kubernetes ノードの準備状況

ノードが準備できていないときにエラーをトリガーします。

アラート定義の設定

次の例で示しているように、新しいアラートは ​alert​ と呼ばれる gravity resource を使用して定義します。

kind: alert
version: v2
metadata:
name: cpu-alert
spec:
# the alert name
alert_name: CPUAlert
# the rule group the alert belongs to
group_name: test-group
# the alert expression
formula: |
    node:cluster_cpu_utilization:ratio * 100 > 80
# the alert labels
labels:
    severity: info
# the alert annotations
annotations:
    description: |
    Cluster CPU usage exceeds 80%.

Prometheus アラートについての詳細は、 「Alerting Rules (アラートルール)」​のドキュメントを参照してください。

  • アラートを作成するには、次のコマンドを実行します。

    gravity resource create alert.yaml
  • 既存のアラートを表示するには、次のコマンドを実行します。

    gravity resource get alerts
  • アラートを削除するには、次のコマンドを実行します。

    gravity resource rm alert cpu-alert

アラートの配信を設定する

メールアラートを送信するように Alertmanager を設定するには、次の gravity resource を作成します。

  1. 次の仕様を使用して、gravity 内に ​smtp-config.yaml​ という名前のファイルを作成して、プレースホルダー値を SMTP 設定の値に置き換えます。

    kind: smtp
    version: v2
    metadata:
        name: smtp
    spec:
       host: <SMTP_HOST>
       port: <SMTP_PORT>
       username: <SMTP_USERNAME>
       password: <SMTP_PASSWORD>
    ---
    kind: alerttarget
    version: v2
    metadata:
        name: email-alerts
    spec:
        # email address of the alerts recipient
        email: <RECIPIENT_EMAIL>
  2. gravity resource create smtp-config.yaml​ を実行します。次の出力が表示されることを確認してください。

    Created cluster SMTP configuration
    Created monitoring alert target "email-alerts"
  3. デフォルトのルーターを gravity 内の Alertmanager 設定に追加します。

    kubectl get secret -n monitoring alertmanager-monitoring-kube-prometheus-alertmanager -o json | jq --arg foo "$(kubectl get secret -n monitoring alertmanager-monitoring-kube-prometheus-alertmanager -o json | jq -r '.data["alertmanager.yaml"]' | base64 -d | yq r - --tojson | jq -r '.route.routes[1] |= . + {"match":{"alertname": "Watchdog", "receiver": "default", "continue": true}}' | jq -r '.route.routes[0].match += {"continue":true}' | yq r - -P | base64 | tr -d '\n')" '.data["alertmanager.yaml"]=$foo' | kubectl apply -f -
  4. <​SMTP_FROM​> 値を置き換えて送信元メールアドレスを設定します。

    kubectl get secret -n monitoring alertmanager-monitoring-kube-prometheus-alertmanager -o json | jq --arg foo "$(kubectl get secret -n monitoring alertmanager-monitoring-kube-prometheus-alertmanager -o json | jq -r '.data["alertmanager.yaml"]' | base64 -d | yq w - 'global.smtp_from' <SMTP_FROM> | base64 | tr -d '\n')" '.data["alertmanager.yaml"]=$foo' | kubectl apply -f -
  5. Alertmanager ポッドを再起動します。

    kubectl delete pod -n monitoring -l app=alertmanager
  6. gravity 内で次のコマンドを実行して Alertmanager をテストします。

    curl -H 'Content-Type: application/json' -d '[{"labels":{"alertname":"test-alert","state":"firing"}}]' http://monitoring-kube-prometheus-alertmanager.monitoring.svc.cluster.local:9093/api/v1/alerts

アラートのトラブルシューティング

一般的なトラブルシューティングタスクとして次のようなものがあります。

  • アラートの配信を設定したときに ​FROM​ および ​TO​ のアドレスとして定義したアドレスを使用して SMTP サーバーがメールを送受信できることを確認します。

  • クラスターノードで SMTP サーバーと通信できることを確認します。

    たとえば、​telnet​ を使用して SMTP サーバーをいずれかのクラスターノードから接続します。

    telnet my.smtp.server.com 587
    Trying XXX.XXX.XXX.XXX...
    Connected to my.smtp.server.com.
    Escape character is '^]'.
    220 my.smtp.server.com ESMTP
    ^[^]
    telnet> quit
    Connection closed.