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://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
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安装
原文:
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