prometheus监控规则

参考:https://blog.51cto.com/u_11555417/5515816

  • 可以在pm.yml 配置文件中配置表达式,重启prometheus后,验证规则生效
  • 也可以在prometheus首页执行表达式

node节点cpu使用率

(1 - avg(irate(node_cpu_seconds_total{mode="idle"}[1m])) by (instance)) * 100 

100 - (avg by (instance) (rate(node_cpu_seconds_total{job="node",mode="idle"}[1m])) * 100)
#5分钟
100 - avg (irate(node_cpu_seconds_total{job="node",mode="idle"}[5m])) by (instance) * 100

四舍五入
round(100 - avg(irate(node_cpu_seconds_total{mode="idle"}[1m])) by (instance) * 100 )

#大于80告警
round(100 - avg(irate(node_cpu_seconds_total{mode="idle"}[5m])) by (instance) * 100 ) > 80

内存使用率

node_memory_MemTotal_bytes - 主机上的总内存
node_memory_MemFree_bytes - 主机上的空闲内存
node_memory_Buffers_bytes_bytes - 缓冲区缓存中的内存
node_memory_Cached_bytes_bytes - 页面缓存中的内存

#计算内存百分比:(总内存-(空余内存+缓存+缓冲))/总内存*100
round((node_memory_MemTotal_bytes - (node_memory_MemFree_bytes + node_memory_Cached_bytes + node_memory_Buffers_bytes)) / node_memory_MemTotal_bytes * 100)

告警表达式:当内存使用率超过80的时候就告警
round((node_memory_MemTotal_bytes - (node_memory_MemFree_bytes + node_memory_Cached_bytes + node_memory_Buffers_bytes)) / node_memory_MemTotal_bytes * 100) > 80

硬盘使用率

#和内存类似,我们使用 (空闲的空间)/总空间 * 100 得出空闲空间的百分比
node_filesystem_free_bytes{mountpoint="/",device="rootfs"} / node_filesystem_size_bytes{mountpoint="/",device="rootfs"} * 100
#然后使用100 减去空闲的百分比,就得到磁盘使用的百分比,由于可能有多个磁盘空间,所以我们这里使用正则表达式,表示所有分区:
100-(node_filesystem_free_bytes{fstype=~"ext4|xfs"}/node_filesystem_size_bytes {fstype=~"ext4|xfs"}*100)
向上取整
ceil(100-(node_filesystem_free_bytes{fstype=~"ext4|xfs"}/node_filesystem_size_bytes {fstype=~"ext4|xfs"}*100))  
#告警表达式
round(100-(node_filesystem_free_bytes{fstype=~"ext4|xfs"}/node_filesystem_size_bytes {fstype=~"ext4|xfs"}*100)) > 80

磁盘io使用率

#先求出5m之内磁盘IO的增长率:</p>
irate(node_disk_io_time_seconds_total[5m])
#根据avg行数求出这个时间段的平均值,也就是这个时间段的IO:
avg(irate(node_disk_io_time_seconds_total[5m])) by (instance)  * 100
#100减去这个磁盘的IO使用率,就得到磁盘IO得空闲百分比,跟60相比较就得到如下表达式
100-(avg(irate(node_disk_io_time_seconds_total[1m])) by(instance)* 100) < 60

网络使用率(功能待改进)

round(irate(node_network_receive_bytes_total{instance!~"data.*",device!~'tap.*|veth.*|br.*|docker.*|vir.*|lo.*|vnet.*'}[1m])/1024) > 2048

并发会话连接

node_netstat_Tcp_CurrEstab
node_netstat_Tcp_CurrEstab >500