ocp 之 Prometheus Operator ~Operator-Prometheus原理 -JG第一次-PrometheusRule - Prometheus断点每周

Prometheus的告警恢复和修改 operator版Prometheus默认的 Prometheus.yml

gpt回答告警问题

如果您没有收到Prometheus的告警恢复通知,请检查以下几个可能的原因:
检查Alertmanager的配置文件中的group_wait参数是否正确设置。group_wait参数定义了Alertmanager在发送告警恢复通知之前等待的时间,以便其他相关告警的解决状态被合并。如果group_wait参数设置得太短,Alertmanager可能会在恢复通知发送之前等待过早结束。您可以尝试增加group_wait参数的值来解决这个问题。
检查Prometheus告警规则的配置文件中的for参数是否正确设置。for参数定义了告警状态的持续时间,只有在该持续时间内连续没有匹配到告警规则的表达式时,告警状态才会从触发状态转换为未触发状态,从而触发告警恢复。如果for参数设置得太短,告警状态可能会在告警恢复通知发送之前过早结束。您可以尝试增加for参数的值来解决这个问题。
检查Prometheus告警规则的配置文件中的标签和注释是否正确设置。告警恢复通知需要包含一些标签和注释信息,以便Alertmanager正确识别和合并相关告警的恢复通知。如果这些信息未正确设置,Alertmanager可能无法正确识别告警恢复通知。
检查Prometheus和Alertmanager的日志文件,以查看是否存在任何错误或警告信息。这些日志文件可以提供有关问题的更多详细信息,并帮助您解决告警恢复通知未发送的问题。

继续追问Prometheus.yml下落 在 statefulsets.apps 里面

参考文章:https://blog.csdn.net/lhuang0813/article/details/135522670
参考官网:https://yunlzheng.gitbook.io/prometheus-book/part-iii-prometheus-shi-zhan/operator/use-custom-configuration-in-operator
oc get statefulsets.apps prometheus-k8s -n openshift-monitor
NAME READY AGE
prometheus-k8s 2/2 110d
在这里插入图片描述

JG第一次PrometheusRule

表达式理解 gpt回答

sum(increase(kube_pod_container_status_restarts_total{namespace=~"mas-masuat-core|mas-masuat-manage|shuto-uat-app|it"}[10m])) by (pod, container) > 3    
这个表达式可以在给一个值吗?我查询之后 pod没有值 

这个表达式的结果是一个布尔值,表示最近10分钟内,重启次数超过3次的容器数量是否大于0。如果结果为true,则表示有至少一个容器的重启次数超过了3次。

根据您的描述,您在查询时未能获取到任何结果,可能是因为在您的集群中没有符合条件的容器。请注意,这个表达式只会统计指定命名空间中的容器,如果您要查询其他命名空间中的容器,需要修改表达式中的namespace条件。

另外,您还需要确保您的Prometheus实例正在收集kube_pod_container_status_restarts_total指标,并且有相应的数据。您可以使用Prometheus的Web UI或者PromQL查询语句来检查指标数据是否存在。如果数据不存在,请检查您的Kubernetes集群配置是否正确,并确保容器的重启次数符合预期。

gpt完整的Rule规则 - 对应 PrometheusRule的 spec部分

可能是因为您的告警规则中缺少恢复告警的配置。在Prometheus的告警规则中,我们可以通过配置for参数和labels参数来实现告警的自动恢复。

具体来说,我们可以在告警规则中添加一个for参数,用于指定在多长时间内没有满足告警条件后,自动恢复告警。例如,如果我们希望在容器重启次数超过3次后,连续5分钟没有再次触发告警时自动恢复告警,可以将for参数设置为5m,如下所示:

groups:  
- name: example  
  rules:  
  - alert: ContainerRestartedTooManyTimes  
    expr: sum(increase(kube_pod_container_status_restarts_total{namespace="your-namespace"}[10m])) by (pod, container) > 3  
    for: 5m  
    labels:  
      severity: warning  
      type: container_restart  
      container: "{{ $labels.container }}"  
      pod: "{{ $labels.pod }}"  
    annotations:  
      summary: "Container {{ $labels.container }} in pod {{ $labels.pod }} restarted too many times"  
      description: "Container {{ $labels.container }} in pod {{ $labels.pod }} has restarted too many times in the last 10 minutes"  
 
在这个告警规则中,我们增加了一个labels参数,用于设置告警的标签信息。标签中包含了告警的类型、容器名称和Pod名称等信息。这些信息可以方便我们对告警进行管理和过滤。

如果您已经添加了for参数和labels参数,但是仍然没有收到恢复告警,可能是因为您的Prometheus配置不正确,或者是因为告警规则中的配置有误。您可以检查Prometheus的告警记录,查看是否存在恢复告警的记录,以及告警的状态是否正确。同时,也可以检查告警规则的配置是否符合预期。

王凯的PrometheusRule

apiVersion: monitoring.coreos.com/v1
kind: PrometheusRule
metadata:
  creationTimestamp: '2024-04-16T06:31:22Z'
  generation: 2
  managedFields:
    - apiVersion: monitoring.coreos.com/v1
      fieldsType: FieldsV1
      fieldsV1:
        'f:spec':
          .: {}
          'f:groups': {}
      manager: Mozilla
      operation: Update
      time: '2024-04-16T07:10:51Z'
  name: mas-podrestart
  namespace: openshift-monitoring
  resourceVersion: '167413905'
  uid: 03a6f77b-5089-4daa-b33e-cd69ed9cd21f
spec:
  groups:
    - name: Pod重启
      rules:
        - alert: Pod重启
          annotations:
            description: 'Pod {{ $labels.pod }} 在 {{ $labels.namespace }} 命名空间中重启了。'
            summary: 'Pod {{ $labels.pod }} 在 {{ $labels.namespace }} 命名空间中重启了。'
          expr: >-
            increase(kube_pod_container_status_restarts_total{namespace=~"mas-mas-core|mas-mas-manage|eams-app-api|it"}[10m])>3
          for: 1m
          labels:
            severity: warning

PrometheusRules是告警!!

AlertmanagerConfigs只关心label标签 告警级别 匹配转发这些

在这里插入图片描述

operator-prometheus原理 推荐

原文:https://www.modb.pro/db/423351

我们来解读下Prometheus Operator官方提供的结构图中Operator从发现serviceMonitor到生成Prometheus的配置文件的整个过程:

prometheus operator通过发现的serviceMonitor资源,生成prometheus crd资源,这里的prometheus crd资源就是期望的Prometheus server

prometheus CRD发现各种serviceMonitor后,生产prometheus的自定义资源,也就是一系列Job组成的Prometheus监控对象

最终Opertor根据prometheus crd的定义生成prometheus server的配置文件

而Prometheus Operator发现ServiceMonitor的范围是根据prometheus crd中的serviceMonitorNamespaceSelector 指定namespace下的servi

参考文章 20221221

https://blog.csdn.net/weixin_44257754/article/details/126832779

kube-prometheus stack Kubernetes 1.20 1.21 1.22 1.23 1.24
release-0.8 ✔ ✔ ✗ ✗ ✗
release-0.9 ✗ ✔ ✔ ✗ ✗
release-0.10 ✗ ✗ ✔ ✔ ✗
release-0.11 ✗ ✗ ✗ ✔ ✔
main ✗ ✗ ✗ ✗ ✔

git clone https://github.com/prometheus-operator/kube-prometheus.git
cd kube-prometheus/ && git checkout release-0.10
git branch

如果镜像拉不到就修改:quay.io/brancz/ 替换为 cnych 即:

quay.io/brancz/kube-state-metrics:v2.3.0  
替换为
cnych/kube-state-metrics:v2.3.0

patch命令详解

-p '{"spec":{"type":"NodePort"}}'

kubectl patch svc jenkins-kube-public -n kube-public -p '{"spec":{"type":"NodePort"}}'

进阶实战深入阅读推荐:https://zhuanlan.zhihu.com/p/76835425
原理:在这里插入图片描述

上图是Prometheus-Operator官方提供的架构图,其中Operator是最核心的部分,作为一个控制器,他会去创建Prometheus、ServiceMonitor、AlertManager以及PrometheusRule4个CRD资源对象,然后会一直监控并维持这4个资源对象的状态。

其中创建的prometheus这种资源对象就是作为Prometheus Server存在,而ServiceMonitor就是exporter的各种抽象,exporter前面我们已经学习了,是用来提供专门提供metrics数据接口的工具,Prometheus就是通过ServiceMonitor提供的metrics数据接口去 pull 数据的,当然alertmanager这种资源对象就是对应的AlertManager的抽象,而PrometheusRule是用来被Prometheus实例使用的报警规则文件。

这样要在集群中监控什么数据,就变成了直接去操作 Kubernetes 集群的资源对象了,是不是方便很多了。上图中的 Service 和 ServiceMonitor 都是 Kubernetes 的资源,一个 ServiceMonitor 可以通过 labelSelector 的方式去匹配一类 Service,Prometheus 也可以通过 labelSelector 去匹配多个ServiceMonitor。

作者:祁恩达
链接:https://www.jianshu.com/p/b2f1b58c8e7f
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

一 helm安装

原文:https://blog.csdn.net/weixin_47003048/article/details/111397787

1 安装helm 并添加仓库

wget https://get.helm.sh/helm-v3.2.1-linux-amd64.tar.gz
tar -xf helm-v3.2.1-linux-amd64.tar.gz
mv ./linux-amd64/helm /usr/bin
helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
helm repo update
helm search repo prometheus-community

2 安装

想要提前自定义配置可以把chart包下载下来
#helm pull prometheus-community/prometheus-operator(可选)
kubectl create ns monitoring
helm install prometheus-operator --set rbacEnable=true --namespace=monitoring  --wait prometheus-community/prometheus-operator

获取安装源
docker run -itd --name=download registry.baidubce.com/tools/download-prometheus-operator:v0.38.1

获取离线安装包
docker cp download:/opt/prometheus-operator-0381.tar .
docker cp download:/opt/prometheus-operator-9.3.2.tgz .

最后在各个节点加载镜像
docker load -i prometheus-operator-0381.tar



离线安装
kubectl create ns monitoring
helm install prometheus-operator --set rbacEnable=true --namespace=monitoring  --wait ./prometheus-operator-9.3.2.tgz
kubectl -n monitoring patch svc prometheus-operator-grafana -p '{"spec":{"type":"NodePort"}}'
kubectl -n monitoring patch svc prometheus-operator-prometheus -p '{"spec":{"type":"NodePort"}}'
获取grafana admin用户密码
kubectl  -n monitoring get secrets |grep Opaque|grep grafana|awk '{print $1}'|xargs kubectl -n monitoring get secrets -o yaml|grep admin-password|grep -v f:|awk -F "admin-password: " '{print $2}'|base64 -d

卸载

helm -n monitoring delete prometheus-operator

 kubectl -n monitoring get deployments.apps|tail -n +2|awk '{print $1}'|xargs kubectl -n monitoring delete deployments.apps
 kubectl -n monitoring get svc|tail -n +2|awk '{print $1}'|xargs kubectl -n monitoring delete svc
 kubectl -n monitoring get sts|tail -n +2|awk '{print $1}'|xargs kubectl -n monitoring delete sts
 kubectl -n monitoring get crd|tail -n +2|awk '{print $1}'|xargs kubectl -n monitoring delete crd
 kubectl -n monitoring get servicemonitorings.monitoringing.coreos.com|tail -n +2|awk '{print $1}'|xargs kubectl -n monitoring delete servicemonitorings.monitoringing.coreos.com
 kubectl -n monitoring get ds|tail -n +2|awk '{print $1}'|xargs kubectl -n monitoring delete ds
 kubectl -n monitoring get job|tail -n +2|awk '{print $1}'|xargs kubectl -n monitoring delete job
 kubectl -n monitoring get pod|tail -n +2|awk '{print $1}'|xargs kubectl -n monitoring delete pod
 kubectl get PodSecurityPolicy|grep prome|awk '{print $1}'|xargs kubectl delete podsecuritypolicies.policy
 kubectl get clusterrole|grep prometheus|awk '{print $1}'|xargs kubectl delete clusterrole
 kubectl get clusterrolebindings.rbac.authorization.k8s.io|grep prometheus|awk '{print $1}'|xargs kubectl delete clusterrolebindings.rbac.authorization.k8s.io
 kubectl  -n kube-system get svc|grep prometheus|awk '{print $1}'|xargs kubectl -n kube-system delete svc
 kubectl  -n kube-system get mutatingwebhookconfigurations.admissionregistration.k8s.io|grep prometheus|awk '{print $1}'|xargs kubectl delete mutatingwebhookconfigurations.admissionregistration.k8s.io
 kubectl  -n kube-system get validatingwebhookconfigurations.admissionregistration.k8s.io|grep prometheus|awk '{print $1}'|xargs kubectl delete validatingwebhookconfigurations.admissionregistration.k8s.io
 kubectl delete ns monitoring

二 kubectl安装

Prometheus Operator部署和使用:
https://blog.csdn.net/twingao/article/details/105261641

Prometheus-operator 介绍和配置解析:
https://blog.csdn.net/Choerodon/article/details/98587027

自定义监控告警 以redis为例

https://zhuanlan.zhihu.com/p/321526960

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值