关于监控:prometheus-promeql-实用举例

3次阅读

共计 2023 个字符,预计需要花费 6 分钟才能阅读完成。

实用功能总结

label 正则 / 正则非匹配

  • 举例:pod 状态 kube_pod_status_phase{pod!~"filebeat.*",job="kube-state-metrics", namespace !~"druid",phase=~"Pending|Unknown"}

agg 去掉 / 保留 label,散布状况

  • 去掉举例:sum without(code) (rate(apiserver_request_total[2m] ) )
  • 保留举例:sum by(code) (rate(apiserver_request_total[2m] ) )
  • 举例:apiserver 申请 qps 和按动作散布 sum (rate(apiserver_request_total[2m] ) ) by(verb)
  • 举例:apiserver 申请 qps 和按动作,code 散布 sum (rate(apiserver_request_total[2m] ) ) by(verb,code)

label_replace 变动 label

  • 举例:新增 host 标签内容为 instance 的 ipaddr label_replace(up, "host", "$1", "instance", "(.*):.*")
  • 原始 series ` up{instance="localhost:8080",job="cadvisor"} 1
  • 革新后 series ` up{host="localhost",instance="localhost:8080",job="cadvisor"} 1

topk bottomK 看 top

  • 举例:查看容器 cpu 使用率 top5 topk(5,sum(rate (container_cpu_usage_seconds_total[1m])) by(pod))

同环比 相减

  • 举例:qps 环比 1 小时 掉 10 sum (rate(apiserver_request_total[2m] offset 1h) ) - sum (rate(apiserver_request_total[2m] ) ) > 10

absent nodata 报警

  • == 1 代表 absent 失效
  • 举例:absent(container_cpu_usage_seconds_total{pod=~"k8s-mon.*jddj2"})

查问时间接增加 value 过滤

  • 举例: 容器处于 waiting 状态 kube_pod_container_status_waiting==1
  • 举例: 过滤 cpu 核数大于 8 的节点 kube_node_status_capacity_cpu_cores>8
  • 举例:pod 状态异样:sum by (namespace, pod,cluster,phase) (kube_pod_status_phase{pod!~"filebeat.*",job="kube-state-metrics", namespace !~"druid",phase=~"Pending|Unknown"}) > 0

查问时间接做 value 计算

  • 举例: 依据 idle 算 util 百分比 100 * (1 - avg by(instance)(irate(node_cpu{mode='idle'}[5m])))

组合条件 and

  • 举例: m3db read 大于并且 db_write 大于 1000 avg by(cluster) (rate(database_read_success{cluster="hawkeye-inf",instance="10.21.72.147:9004"}[1m]) ) > 100 and avg by(cluster) (rate(service_writeTaggedBatchRaw_success{cluster="hawkeye-inf",instance="10.21.77.55:9004"}[1m]) ) >1000
  • 前后 label 统一
  • or 同理

分位值 histogram_quantile

  • 举例查看 apiserver 申请提早 90 分位 histogram_quantile(0.90, sum(rate(apiserver_request_duration_seconds_bucket{verb!~"CONNECT|WATCH"}[5m])) by (le))

两组 series 关联

  • 举例:apiserver 申请成功率 sum(apiserver_request_total{code=~"2.*|3.*"})/ sum(apiserver_request_total)

agg_over_time 给所有 ts 的 value 做 agg

  • 举例查看一天的 alert sort_desc(sum(sum_over_time(ALERTS{alertstate=`firing`}[24h])) by (alertname))
  • 举例查看一天的 alert sort_desc(sum(sum_over_time(ALERTS{alertstate=`firing`}[24h])) by (alertname))
正文完
 0