常用prometheus告警规则模板

一、应用类相关

1.监控应用是否可用

规则模板 :

up=${value} 

规则描述:

监测应用是否可用

参数说明:

value : 0表示宕机  1 表示可用

具体应用

groups:
- name: example   #报警规则组的名字
  rules:
  - alert: InstanceDown     #检测job的状态,持续1分钟metrices不能访问会发给altermanager进行报警
    expr: up == 0
    for: 1m    #持续时间 , 表示持续一分钟获取不到信息,则触发报警
    labels:
      serverity: page   # 自定义标签
    annotations:
      summary: "Instance {{ $labels.instance }} down"     # 自定义摘要 
      description: "{{ $labels.instance }} of job {{ $labels.job }} has been down for more than                1 minutes."   # 自定义具体描述

本文理出的规则模板主要用于告警规则中的 “expr” 表达式使用。

labels参数说明

env : 数据源(通常用于区分环境)
instance : 实例名称
job : 应用名

2.接口请求异常(job,method,uri)

规则模板 :

http_server_requests_seconds_count{exception!="None",job="${app}",method="${method}",uri="${uri}"}  > ${value} 

规则描述 :

请求接口的异常信息不为空, 使用的时候需要动态传入 app , method ,uri , value 这四个参数,然后设置规则。

参数详解:

tex app : 应用名 method : POST 或 GET uri : 接口地址 value : 检测指标 ,取值为 int整数

labels参数说明

env : 数据源(通常用于区分环境)
exception : 异常信息
instance : 实例名
job : 应用名
method : POST 或GET
status :http请求状态 200为成功
uri : 接口地址

3.接口请求异常(job,method,uri),正则表达式(job,uri)

规则模板:

http_server_requests_seconds_count{exception!="None",job=~"${app}",method="${method}",uri=~"${uri}"}  > ${value} 

规则描述 :

请求接口的异常信息不为空, 使用的时候需要动态传入 app , method ,uri , value 这四个参数 ,这四个参数中Job和uri可以为正则表达式,然后设置规则。

参数解释:

app : 应用名 , 可使用正则表达式,例: .*MSG.* 
method : POST 或 GET ,需大写
uri : 接口地址 , 可使用正则表达式
value : 检测指标 ,取值为 int整数

labels参数说明

env : 数据源(通常用于区分环境)
exception : 异常信息
instance : 实例名
job : 应用名
method : POST 或GET
status :http请求状态 200为成功
uri : 接口地址

4.应用CPU占比

规则模板:

process_cpu_usage{job="${app}"} * 100 > ${value}

规则描述 :

监测应用使用的百分比 , 此处仅需传入 app 名称,就可以监测某个应用了

参数解释 :

app : 应用名 
value : 检测指标, 百分比

labels参数说明

env : 数据源(通常用于区分环境)
instance : 实例名称
job : 应用名

5.Hystrix接口调用熔断次数监控

规则模板:

increase(hystrix_errors_total{job="${app}"}[${timeRange}]) > ${value}

规则描述 :

监测在指定的时间范围内,应用调用其他接口被Hystrix熔断的次数,

参数解释:

app : 应用名
timeRange : 指定时间范围内的熔断次数,取值单位可以为  s (秒) , m(分钟) , h(小时) ,d(天)
value : 熔断次数,int整数

labels参数说明

env : 数据源(通常用于区分环境)
group : 我们通过fegin调用其他应用的应用名
instance : 实例名称
job : 应用名
key : 具体的类名以及调用的方法 例: AcsClient#checkUserLogin(String)

6.Hystrix接口调用失败次数监控

规则模板:

increase(hystrix_fallback_total{job="${app}"}[${timeRange}]) > ${value}

规则描述 :

监测在指定的时间范围内,应用调用其他接口failback的次数

参数解释:

app : 应用名
timeRange : 指定时间范围内的熔断次数,取值单位可以为  s (秒) , m(分钟) , h(小时) ,d(天)
value : failback次数,int整数

labels参数说明

env : 数据源(通常用于区分环境)
group : 我们通过fegin调用其他应用的应用名
instance : 实例名称
job : 应用名
key : 具体的类名以及调用的方法 例: AcsClient#checkUserLogin(String)

7.JVM堆内存使用率监控

规则模板

sum(jvm_memory_used_bytes{job="${app}", instance="${instance}", area="heap"})*100/sum(jvm_memory_max_bytes{job="${app}",instance="${instance}", area="heap"}) >${value}

规则描述

监测JVM的堆内存的使用率, 前提是一定要指定应用名和实例名,否则prometheus不知道监控的那个JVM,这里是以JVM为单位的

参数解释

app : 应用名
instance : 实例名,默认为 IP:PORT
value : 监控指标,int整数,百分比

8.JVM非堆内存使用率监控

规则模板

sum(jvm_memory_used_bytes{job="${app}", instance="${instance}", area="nonheap"})*100/sum(jvm_memory_max_bytes{job="${app}",instance="${instance}", area="nonheap"})  > ${value}

规则描述

监测JVM的非堆内存的使用率(也就是通常意义上的栈内存,JIT编译代码缓存,永久代(jdk1.8为元空间)), 前提是一定要指定应用名和实例名,否则prometheus不知道监控的那个JVM,这里是以JVM为单位的

参数解释

app : 应用名
instance : 实例名,默认为 IP:PORT
value : 监控指标,int整数,百分比

9.接口某个时间段内平均响应时间监控

规则模板

increase(http_server_requests_seconds_sum{job="${app}",exception="None", uri="${uri}"}[${timeRange}])/
increase(http_server_requests_seconds_count{job="${app}",exception="None", uri="${uri}"}[${timeRange}]) >${value}

规则描述

监控某个接口在指定时间范围内的相应时间

参数解释

app : 应用名
instance : 实例名,默认为 IP:PORT
uri : 接口地址
timeRange : 时间范围
value :监控指标,long类型,毫秒级别。 

labels参数说明

env : 数据源(通常用于区分环境)
exception : 异常信息
instance : 实例名
job : 应用名
method : POST 或GET
status :http请求状态 200为成功
uri : 接口地址

10.接口某个时间段内平均响应时间监控(正则表达式)

规则模板

increase(http_server_requests_seconds_sum{job=~"${app}",exception="None", uri=~"${uri}"}[${timeRange}])/increase(http_server_requests_seconds_count{job="${app}",exception="None", uri=~"${uri}"}[${timeRange}]) >${value}

规则描述

监控某个接口在指定时间范围内的响应时间,比如在某些场景下,有些接口的请求时间过于慢了, 这样我们可以及时收到通知,以便后续优化。

参数解释

app : 应用名, 正则表达式匹配
uri : 接口地址 , 正则表达式匹配
timeRange : 时间范围
value :监控指标,long类型,毫秒级别。 

labels参数说明

env : 数据源(通常用于区分环境)
exception : 异常信息
instance : 实例名
job : 应用名
method : POST 或GET
status :http请求状态 200为成功
uri : 接口地址

二、服务器相关

11.全局CPU使用率监测

规则模板

100 - ((avg by (instance,job,env)(irate(node_cpu_seconds_total{mode="idle"}[30s]))) *100) > ${value}

规则描述

监测CPU的平均使用率

参数解释

value :监控指标,百分比,int整数 

labels参数说明

env : 数据源(通常用于区分环境)
instance : 实例名
job : 应用名

12.监测指定服务器的CPU使用率

规则模板

100 - ((avg by (instance,job,env)(irate(node_cpu_seconds_total{mode="idle",job="${app}"}[30s]))) *100) > ${value}

规则描述

监测某个应用的CPU的平均使用率

参数解释

app : 服务器IP 
value :监控指标,百分比,int整数 

labels参数说明

env : 数据源(通常用于区分环境)
instance : 实例名
job : 应用名

13.内存使用率

规则模板

((node_memory_MemTotal_bytes -(node_memory_MemFree_bytes+node_memory_Buffers_bytes+node_memory_Cached_bytes) )/node_memory_MemTotal_bytes ) * 100 > ${value}

规则描述

监测内存使用率

参数解释

value :监控指标,百分比,int整数 

labels参数说明

env : 数据源(通常用于区分环境)
instance : 实例名
job : 应用名

14.磁盘使用率

规则模板

(node_filesystem_avail_bytes{fstype !~ "nfs|rpc_pipefs|rootfs|tmpfs",device!~"/etc/auto.misc|/dev/mapper/centos-home",mountpoint !~ "/boot|/net|/selinux"} /node_filesystem_size_bytes{fstype !~ "nfs|rpc_pipefs|rootfs|tmpfs",device!~"/etc/auto.misc|/dev/mapper/centos-home",mountpoint !~ "/boot|/net|/selinux"} ) * 100 > ${value}

规则描述

监测磁盘使用的比率,可以自定义当使用率大于多少的时候进行报警

参数解释

value :监控指标,百分比,int整数 

labels参数说明

env : 数据源(通常用于区分环境)
instance : 实例名
job : 应用名
device : 系统路径
fstype : 文件系统类型
mountpoint : /

15.网卡流出速率

规则模板

(irate(node_network_transmit_bytes_total{device!~"lo"}[1m]) / 1000) > ${value}

规则描述

监控网卡的流出速率

参数解释

value :监控指标,单位为 kb

labels参数说明

env : 数据源(通常用于区分环境)
instance : 实例名
job : 应用名
device : 网卡名称 ,例: eth0 , eth1

16.系统负载率1分钟

规则模板

node_load1 > ${value}

规则描述

监测系统一分钟内的负载率。

参数解释

value :监控指标,dubble小数

labels参数说明

env : 数据源(通常用于区分环境)
instance : 实例名
job : 应用名

17.系统负载率5分钟

规则模板

node_load5 > ${value}

规则描述

监测系统5分钟内的负载率。

参数解释

value :监控指标,dubble小数

labels参数说明

env : 数据源(通常用于区分环境)
instance : 实例名
job : 应用名

18.系统负载率15分钟

规则模板

node_load15 > ${value}

规则描述

监测系统15分钟内的负载率。

参数解释

value :监控指标,dubble小数

labels参数说明

env : 数据源(通常用于区分环境)
instance : 实例名
job : 应用名

 

其他:

(1)https://blog.youkuaiyun.com/xiegh2014/article/details/91598728

(2)https://awesome-prometheus-alerts.grep.to/rules

<think>好的,用户想了解如何在Prometheus中设置和配置Kubernetes的监控规则,包括教程和最佳实践。首先,我需要回忆一下Prometheus监控K8S的基本流程。通常,这涉及到部署Prometheus到集群中,可能使用Operator来简化管理,然后配置服务发现、抓取规则告警规则等。 接下来,用户可能需要具体的步骤,比如如何部署Prometheus。这时候需要提到常用的方法,比如使用Helm Chart或者手动部署。同时,服务发现的配置是关键,Prometheus需要自动发现K8S中的各种资源,比如Pod、Service、Node等,这通常通过kubernetes_sd_configs来实现。这部分需要详细说明配置文件的写法,尤其是relabel_configs的使用,因为标签重写对于过滤和标记目标很重要。 然后是监控规则的配置,包括哪些核心指标是必须监控的,比如节点资源使用率、Pod状态、Deployment可用性等。对于每个指标,需要给出具体的PromQL表达式,例如CPU使用率的计算方式。同时,要提到如何将这些规则写入Prometheus规则文件,可能需要使用ConfigMap来管理这些规则,特别是当使用Prometheus Operator时,可以通过自定义资源定义(CRD)来声明告警规则告警配置部分,用户可能需要知道如何将Prometheus与Alertmanager集成,设置通知方式,比如邮件或Slack。这部分需要提到Alertmanager的配置文件和路由规则,确保告警能够正确路由并通知到相关人员。 可视化方面,Grafana的使用是必不可少的,需要指导用户如何导入现有的仪表盘模板,比如Kubernetes Cluster Monitoring,或者根据需求自定义仪表盘。这里可以提到Grafana的数据源配置以及如何利用PromQL查询来创建图表。 最佳实践部分,应该包括标签管理、资源限制、定期审查监控规则、备份配置和安全性考虑。例如,建议使用有意义的标签来区分环境,避免监控组件本身消耗过多资源,以及如何定期更新告警阈值以适应集群的变化。 最后,用户可能需要参考资料,比如官方文档和社区资源,确保信息的准确性和可靠性。同时,生成的相关问题需要覆盖用户可能进一步询问的方向,比如性能优化、高可用性配置、排除常见问题的方法等。 需要注意的是,回答中要引用提供的参考资料,比如Prometheus在K8S中的最佳实践,Grafana的集成方法等,确保引用标识正确添加。同时,保持语言的中文和结构清晰,分步骤说明,便于用户理解和操作。</think>### 在Prometheus中配置Kubernetes监控规则的步骤 #### 1. **部署Prometheus到Kubernetes集群** - **推荐方式**:使用Helm Chart或Prometheus Operator快速部署。 ```bash # 使用Helm安装Prometheus Stack(包含Prometheus、Alertmanager、Grafana) helm repo add prometheus-community https://prometheus-community.github.io/helm-charts helm install prometheus prometheus-community/kube-prometheus-stack ``` - **手动配置**:通过`Deployment`和`Service`资源部署,需配置RBAC权限和存储卷[^1]。 #### 2. **配置服务发现(Service Discovery)** Prometheus通过`kubernetes_sd_configs`自动发现K8S资源。在`prometheus.yml`中添加以下配置: ```yaml scrape_configs: - job_name: 'kubernetes-nodes' kubernetes_sd_configs: - role: node # 监控节点资源 relabel_configs: - source_labels: [__address__] regex: '(.*):10250' replacement: '${1}:9100' # 重写端口为kubelet暴露的metrics端口 target_label: __address__ ``` - **关键标签重写**:通过`relabel_configs`过滤无关目标,例如仅监控生产环境Pod: ```yaml - source_labels: [__meta_kubernetes_namespace] action: keep regex: production ``` #### 3. **定义核心监控规则** - **节点资源监控**: - **CPU使用率**: ```promql (1 - avg(rate(node_cpu_seconds_total{mode="idle"}[5m])) by (instance)) * 100 ``` - **内存使用率**: ```promql (node_memory_MemTotal_bytes - node_memory_MemAvailable_bytes) / node_memory_MemTotal_bytes * 100 ``` - **Pod健康状态**: ```promql kube_pod_status_phase{phase=~"Pending|Unknown"} > 0 ``` - **Deployment副本可用性**: ```promql kube_deployment_status_replicas_available / kube_deployment_spec_replicas < 0.8 ``` #### 4. **告警规则配置(alert.rules.yml)** 将规则文件挂载到Prometheus容器,或通过Prometheus Operator的`PrometheusRule` CRD定义: ```yaml groups: - name: Kubernetes-Alerts rules: - alert: NodeCPUHigh expr: (1 - avg(rate(node_cpu_seconds_total{mode="idle"}[5m])) by (instance)) * 100 > 80 for: 10m labels: severity: critical annotations: summary: "节点CPU使用率过高: {{ $labels.instance }}" ``` #### 5. **集成Alertmanager** - **路由配置**(alertmanager.yml): ```yaml route: group_by: [alertname, cluster] receiver: 'slack-notifications' receivers: - name: 'slack-notifications' slack_configs: - api_url: 'https://hooks.slack.com/services/XXX' ``` #### 6. **可视化配置(Grafana)** - **导入官方仪表盘**:ID为`3119`的“Kubernetes Cluster Monitoring”模板。 - **自定义查询**:例如监控Service的请求延迟: ```promql histogram_quantile(0.95, sum(rate(nginx_ingress_controller_request_duration_seconds_bucket[5m])) by (le, service)) ``` --- ### **最佳实践** 1. **标签管理**:为监控对象添加`env=prod`或`team=backend`等标签,便于过滤和聚合[^3]。 2. **资源限制**:为Prometheus Pod设置内存限制(如8GiB以上),避免OOM问题。 3. **定期审查规则**:每季度优化过时的告警阈值,删除冗余指标。 4. **备份配置**:将`prometheus.yml`和告警规则纳入版本控制(如Git)。 5. **安全加固**:启用HTTPS和RBAC,限制`/metrics`端口的访问权限[^2]。 --- ### **引用示例** 通过Prometheus Operator可简化K8S监控的配置流程,实现声明式管理。Grafana与Prometheus的集成能显著提升指标可视化的效率。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值