アラート設定

演習の概要

このモジュールでは、プロジェクトのアプリケーションのアラートを設定します。


アラート設定の有効化

ROSAクラスターでは、ROSAの利用者が作成したプロジェクトで実行しているアプリケーションを対象とした、 アラート設定が可能です。アラート設定をする場合、利用者が作成したプロジェクトのモニタリングが有効になっている必要があります。

アラート設定を有効化するには、モニタリングの時と同様に、「openshift-user-workload-monitoring」プロジェクトの 「user-workload-monitoring-config」設定マップ(ConfigMap)を、 次のように末尾3行の「alertmanager: …​」を追加して保存します。

本演習をワークショップ形式で実施している場合、この設定はすでに適用済みとなっています。
kind: ConfigMap
apiVersion: v1
metadata:
  name: user-workload-monitoring-config
  namespace: openshift-user-workload-monitoring
data:
  config.yaml: |
    prometheus:
      retention: 30d
      volumeClaimTemplate:
        spec:
          resources:
            requests:
              storage: 200Gi
    alertmanager:
      enabled: true
      enableAlertmanagerConfig: true

アラート出力用のサンプルアプリケーションの作成

ユーザープロジェクトを対象としたカスタムアラートを利用するには、 Prometheusのフォーマットに沿ったメトリクスを出力するアプリケーションを作成しておく必要があります。 そのためのサンプルアプリがありますので、まずはこちらを適当なプロジェクトで作成します。

プロジェクトを選択して、OpenShiftクラスターのWebコンソール右上にある、「+」アイコンをクリックします。

OpenShiftでは、このインタフェースからYAML/JSON形式のテキストを直接入力して、Podなどのリソースを作成できます。
yaml input1

サンプルアプリケーションを実行するための、次のYAML形式のテキストを入力して「作成」をクリックします。 これによって、レプリカ数2の「prometheus-example-app」Podが実行されます。 また、PrometehusメトリクスをOpenShiftクラスター内部で見るために利用する「prometheus-example-app」 Serviceも、同時に作成しています。

---
apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: prometheus-example-app
  name: prometheus-example-app
spec:
  replicas: 2
  selector:
    matchLabels:
      app: prometheus-example-app
  template:
    metadata:
      labels:
        app: prometheus-example-app
    spec:
      containers:
      - image: quay.io/brancz/prometheus-example-app:v0.2.0
        imagePullPolicy: IfNotPresent
        name: prometheus-example-app
---
apiVersion: v1
kind: Service
metadata:
  labels:
    app: prometheus-example-app
  name: prometheus-example-app
spec:
  ports:
  - port: 8080
    protocol: TCP
    targetPort: 8080
    name: web
  selector:
    app: prometheus-example-app
  type: ClusterIP
yaml input2

ServiceMonitorの作成

「prometheus-example-app」Serviceを利用したモニタリングのための、 Kubernetesカスタムリソース としてServiceMonitorというリソースが、OpenShiftでは利用できるようになっています。 これを cluster-admin などの管理者アカウントで作成します。 ローカルユーザーでログインしている場合は、管理者アカウントで再ログインします。

先ほどYAML形式のテキストを入力した時と同様に、 「+」アイコンをクリックしてServiceMonitorを作成します。 「interval: 30s」で、メトリクスデータをスクレイピング(収集・加工)する間隔を30秒と設定しています。 また、「selector」を指定して、「app: prometheus-example-app」ラベルを持つServiceを対象としています。

「prometheus-example-app」Serviceを作成したプロジェクトに、このServiceMonitorを作成します。
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
  labels:
    k8s-app: prometheus-example-monitor
  name: prometheus-example-monitor
spec:
  endpoints:
  - interval: 30s
    port: web
    scheme: http
    path: /metrics
  selector:
    matchLabels:
      app: prometheus-example-app

ここまでの設定により、「モニタリング」メニューの「Metrics」タブから、 このサンプルアプリケーションにあるメトリクスを見れるようになります。 「Metrics」タブから「カスタムクエリー」を選択して、「version」を入力してEnterキーを押します。 すると、次のようなメトリクスを確認できます。

custom query

アラートルールの作成

簡単なアラートルールを作成してみます。OpenShiftではアラートルール作成のための、 KubernetesカスタムリソースであるPrometheusRuleが利用できるようになっています。 1つ以上のPodがダウンしたときに、アラートを発行する設定としてみます。

このサンプルアプリのPodの同時実行数は2となるので、「version」の値の合計値が「2」となっています。 そこで、1つ以上Podがダウンしたときの「version」の値の合計値が1(2未満)になるか、 または、全てのPodがダウンして「version」メトリクスが取得できない場合を想定した条件式を「expr:」で設定します。 「for: 30s」では、アラート発行のための条件式が真となって、アラートが「保留中」状態から「実行中」 状態になるまでの時間を30秒と設定しています。

このPrometheusRuleも、ServiceMonitorを作成したプロジェクトを選択して、 管理者アカウントでYAMLテキストを直接入力して作成します。
apiVersion: monitoring.coreos.com/v1
kind: PrometheusRule
metadata:
  name: example-alert
spec:
  groups:
  - name: prometheus-example-app-down
    rules:
    - alert: PrometheusExampleAppDown
      annotations:
        description: One or more example pods down.
        summary: Example Pods Down.
      expr: sum(version) < 2 or absent(version)
      for: 30s
      labels:
        severity: warning

作成したアラートルールや、それに伴ったアラート状態は、管理者アカウントでログインしている場合、 「モニタリング」メニューの「アラートタブ」から確認できます。 右側にある「・」が3つ縦に並んだアイコンをクリックして、「アラートルールの表示」をクリックすることで、 「アラートルールの詳細」を確認できます。

alert rule info

アラートのテスト

アラートをテストしてみます。 「トポロジー」メニューから、「prometheus-example-app」アプリケーションを選択して、 詳細タブから「↓矢印」を1回クリックして、Podの数を1つ減らします。

alert test

これにより、アラート状態が「実行中」に変わります。 管理者アカウントでログインしている場合、「モニタリング」メニューの「アラート」タブから確認できます。 「One or more example pods down」をクリックすると、アラートの詳細を確認できます。

firing alert
「通知」にあるスイッチをOFFにすると、アラートをサイレンス状態にできます。 また、アラートをCLIで確認したい場合は、 こちらのページにある情報を参考にしてください。

「トポロジー」メニューから サンプルアプリのPod数を再度2に戻す(Podの詳細タブの「↑」矢印をクリック)と、 アラート状態が「実行中」から、もともとの何もない状態に戻ります。

ROSAやOpenShiftでは、アラートを下記の外部システムに送信できます。

  • PagerDuty

  • Webhook

  • Email

  • Slack

Gmailに届いたアラートメールの例は、下記の画像のようになります。アラート送信の設定方法については、 公式ドキュメントをご参照ください。

gmail alert