当前位置: 代码迷 >> 综合 >> Prometheus Operator 使用operator管理alertmanager
  详细解决方案

Prometheus Operator 使用operator管理alertmanager

热度:105   发布时间:2023-09-30 10:29:08.0

Prometheus Operator-下篇使用Prometheus Operator管理监控配置,如alertmanager报警,自定义告警规则等~Prometheus Operator 使用operator管理alertmanagerhttps://mp.weixin.qq.com/s?__biz=MzU0NjEwMTg4Mg==&mid=2247485774&idx=1&sn=1b0301dadc4b737e19b1066219813db7&chksm=fb63865bcc140f4d8966d1c3745c8f69c6384337c43a1a8eda6e1ae488bd78f08e44c9553b19&token=313041406&lang=zh_CN#rd到目前为止,我们已经通过Prometheus Operator的自定义资源类型管理了Promtheus的实例,监控配置以及告警规则等资源。

通过Prometheus Operator将原本手动管理的工作全部变成声明式的管理模式,大大简化了Kubernetes下的Prometheus运维管理的复杂度。接下来,我们将继续使用Promtheus Operator定义和管理Alertmanager相关的内容。

为了通过Prometheus Operator管理Alertmanager实例,用户可以通过自定义资源Alertmanager进行定义,如下所示,通过replicas可以控制Alertmanager的实例数:

cat alertmanager-inst.yaml

apiVersion: monitoring.coreos.com/v1
kind: Alertmanager
metadata:name: instnamespace: monitoring
spec:replicas: 3

当replicas大于1时,Prometheus Operator会自动通过集群的方式创建Alertmanager。将以上内容保存为文件alertmanager-inst.yaml,并通过以下命令创建:

kubectl -n monitoring apply -f alertmanager-inst.yaml

 查看Pod的情况如下所示,我们会发现Alertmanager的Pod实例一直处于ContainerCreating的状态中:

kubectl -n monitoring get pods

通过kubectl describe命令查看该Alertmanager的Pod实例状态,可以看到类似于以下内容的告警信息:

MountVolume.SetUp failed for volume "config-volume" : secrets "alertmanager-inst" not found

这是由于Prometheus Operator通过Statefulset的方式创建的Alertmanager实例,在默认情况下,会通过alertmanager-{ALERTMANAGER_NAME}的命名规则去查找Secret配置并以文件挂载的方式,将Secret的内容作为配置文件挂载到Alertmanager实例当中。因此,这里还需要为Alertmanager创建相应的配置内容,如下所示,是Alertmanager的配置文件:

cat alertmanager.yaml

global:resolve_timeout: 5m
route:group_by: ['job']group_wait: 30sgroup_interval: 5mrepeat_interval: 12hreceiver: 'webhook'
receivers:
- name: 'webhook'webhook_configs:- url: 'http://alertmanagerwh:30500/'

 将以上内容保存为文件alertmanager.yaml,并且通过以下命令创建名为alrtmanager-inst的Secret资源:

kubectl -n monitoring create secret generic alertmanager-inst --from-file=alertmanager.yaml

重新更新alertmanager-inst.yaml文件

kubectl -n monitoring delete  -f alertmanager-inst.yaml
kubectl -n monitoring apply  -f alertmanager-inst.yaml

在Secret创建成功后,查看当前Alertmanager Pod实例状态。如下所示:

[root@master ~]# kubectl get pod -n monitoring
NAME                                   READY   STATUS    RESTARTS   AGE
alertmanager-inst-0                    2/2     Running   0          21m
alertmanager-inst-1                    2/2     Running   0          21m
prometheus-k8s-0                       3/3     Running   9          10d
prometheus-operator-7d6496d74b-vrjcj   1/1     Running   5          14d

在alertmanager前端创建service,以便我们在浏览器可以访问:

cat alertmanager-service.yaml

apiVersion: v1
kind: Service
metadata:labels:app: alertmanager-servicename: alertmanager-operator-svcnamespace: monitoring
spec:ports:- name: operatorport: 9093protocol: TCPtargetPort: 9093selector:alertmanager: instapp: alertmanagersessionAffinity: Nonetype: NodePort

Prometheus Operator 使用operator管理alertmanager

接下来,我们只需要修改我们的Prometheus资源定义,通过alerting指定使用的Alertmanager资源即可:

cat prometheus-inst.yaml

apiVersion: monitoring.coreos.com/v1
kind: Prometheus
metadata:name: instnamespace: monitoring
spec:serviceAccountName: prometheusserviceMonitorSelector:matchLabels:team: frontendruleSelector:matchLabels:role: alert-rulesprometheus: examplealerting:alertmanagers:- name: alertmanager-examplenamespace: monitoringport: webresources:requests:memory: 400Mi

等待Prometheus重新加载后,访问http://192.168.0.6:31535/config我们可以看到Prometheus Operator在配置文件中添加了以下配置: 

Prometheus Operator 使用operator管理alertmanager

  相关解决方案