使用IBM Cloud Private (ICP) 提供的Alertmanager通过电子邮件进行通知

目的的定义是追求或达到特定的目标或朝向某个方向走的意图或意图本身。

在之前的文章中,我们使用附带的ICP Prometheus和Grafana来实现应用程序指标的可视化。这次,我们将尝试在发现异常时发送电子邮件通知。

邮件通知是由Prometheus的伙伴组件Alertmanager在默认情况下启动的,因此您可以使用它。顺便提一下,类似的通知功能也存在于Grafana中。在实际运营中,到底使用哪个好,或者应该怎么使用它们,老实说我还不太清楚。这次我们将使用Alertmanager。

验证环境
– IBM云私有2.1.0.2 (Kubernetes 1.9.1)

操作步骤

在Alertmanager中添加邮件发送设置

Alertmanager将使用kube-system命名空间中名为monitoring-prometheus-alertmanager的ConfigMap。默认情况下,它几乎没有任何内容,因此我们将在这里添加各种配置。本次将添加最基本的电子邮件发送配置(以下有注释的5行)。

$ kubectl edit configmap monitoring-prometheus-alertmanager -n kube-system

apiVersion: v1
data:
  alertmanager.yml: |-
    global:
      smtp_smarthost: 192.168.11.12:25      # SMTPサーバ
      smtp_from: alertmanager@hoge.jp       # FROMアドレス
      smtp_require_tls: false               # TLS使用有無
    receivers:
      - name: default-receiver
        email_configs:                      # メール送信先設定
        - to: teru@hoge.jp                  # TOアドレス
    route:
      group_wait: 10s
      group_interval: 5m
      receiver: default-receiver
      repeat_interval: 3h
(略)

一旦保存,就会自动反映到Alertmanager的Pod中。不过,并不是立即生效,可能需要几十秒到几分钟的时间。

在Prometheus中添加规则。

检测规则使用Prometheus的alert-rules ConfigMap。由于原本几乎没有内容,默认情况下,我们将添加新规则。这次我们将阈值降低,以确保通知被发送。

$ kubectl edit configmap alert-rules -n kube-system

apiVersion: v1
data:
  sample.rules: "" # デフォルトではこれしか書かれていない
  # ここから追加
  jvm.rules: |-
    groups:
      - name: jvm                       # グループ名
        rules:
          - alert: jvm_heap_high        # ルール名
            expr: jvm_memory_used_bytes{area="heap",job="kubernetes-pods"} > 134217728
                                        # 128MBを超えたら通知
            for: 1m                     # 1分継続したら通知
            labels:
              severity: warning         # 緊急度など

把这个也保存下来,稍等一会儿,就能在Prometheus的Pod中得到反映。

从Prometheus控制台进行确认

我们在 Prometheus 的控制台上确认状态。

$ kubectl get pods -n kube-system | grep prometheus
monitoring-prometheus-7994986858-4nwp8                    3/3       Running   0          6d
monitoring-prometheus-alertmanager-7dc884c44d-hnjj2       3/3       Running   0          3d
monitoring-prometheus-kubestatemetrics-798dd85965-jrfr2   1/1       Running   0          6d
monitoring-prometheus-nodeexporter-amd64-25nhf            1/1       Running   0          6d
monitoring-prometheus-nodeexporter-amd64-4dbgm            1/1       Running   0          6d
monitoring-prometheus-nodeexporter-amd64-tl6mb            1/1       Running   0          6d
monitoring-prometheus-nodeexporter-amd64-wwcht            1/1       Running   0          6d

$ kubectl port-forward monitoring-prometheus-7994986858-4nwp8 9090:9090 -n kube-system

当点击菜单中的Alerts时,立即会发现有被检测到的通知。看起来是因为状态已变为Firing,通知已发送到Alertmanager。

image.png

确认电子邮件

我收到了一封如下的电子邮件。通知也起作用了呢。

image.png

不幸的是,所有链接都变成了无效链接。这是因为URL仍保留了Pod的名称和端口。如果要正确运行它们,您需要使用Ingress或NodePort来使Prometheus和Alertmanager可以从集群外部访问,并且还需要更改电子邮件模板。由于我现在已经筋疲力尽,所以到此为止吧。

想法

这次只进行了最基本的设置来进行功能确认,但在商用环境中需要更详细的设置。特别是监控领域非常复杂,因此需要阅读手册并进行研究。

https://prometheus.io/docs/introduction/overview/

请查阅上述链接了解Prometheus的简介和概述。

广告
将在 10 秒后关闭
bannerAds