记录规则(recording rules)与告警规则(alerting rule)

记录规则(recording rules)
配置规则
Prometheus支持两种类型的规则,可以对其进行配置,然后定期进行评估:记录规则和警报规则。要在Prometheus中包含规则,请创建一个包含必要规则语句的文件,并让Prometheus通过Prometheus配置中的rule_files字段加载该文件。规则文件使用YAML。
可以通过发送SIGHUP到Prometheus进程在运行时重新加载规则文件。仅当所有规则文件格式正确时,才会应用更改。
 
语法检查规则
要在不启动Prometheus服务器的情况下快速检查规则文件在语法上是否正确,请安装并运行Prometheus的promtool命令行实用工具:
vim rules.yml:
groups:
  - name: test
    rules:
    - record: job:http_requests:rate5m
      expr: sum by (job)(rate(http_requests_total[5m]))
 
promtool check rules rules.yml
当该文件在语法上有效时,检查器将已解析规则的文本表示形式打印到标准输出,然后以0返回状态退出。
如果存在任何语法错误或无效的输入参数,则会将错误消息打印为标准错误,并以1返回状态退出。
 
记录规则
记录规则使您可以预先计算经常需要或计算量大的表达式,并将其结果保存为一组新的时间序列。这样,查询预先计算的结果通常比每次需要原始表达式都要快得多。这对于仪表板特别有用,仪表板每次刷新时都需要重复查询相同的表达式。
记录和警报规则存在于规则组中。组中的规则以规则的时间间隔顺序运行。
规则文件的语法为:
groups:
  [ - <rule_group> ]
一个简单的示例规则文件将是:
groups:
  - name: example
    rules:
    - record: job:http_inprogress_requests:sum
      expr: sum(http_inprogress_requests) by (job)
 
# 收集的指标名称record: <string>
 
告警规则(alerting rule)
带有警报的示例规则文件为:
groups:
- name: example
  rules:
  - alert: HighRequestLatency
    expr: job:request_latency_seconds:mean5m{job="myjob"} > 0.5
    for: 10m
    labels:
      severity: page
    annotations:
      summary: High request latency
可选for子句使Prometheus在第一次遇到新的表达式输出矢量元素与将警报计为对此元素的触发进行计数之间等待一段时间。在这种情况下,Prometheus将在每次发出警报之前检查警报在10分钟内是否继续处于活动状态。活动但尚未触发的元素处于挂起状态。
该labels子句允许指定一组附加标签来附加到警报。任何现有的冲突标签都将被覆盖。标签值可以模板化。
该annotations子句指定了一组信息标签,可用于存储更长的附加信息,例如警报说明或运行手册链接。注释值可以模板化。
 
模板
标签和注释值可以使用控制台模板进行模板化。该$labels 变量保存警报实例的标签键/值对。可以通过$externalLabels变量访问已组态的外部标签。该 $value变量保存警报实例的评估值。
# To insert a firing element's label values:
{{ $labels.<labelname> }}
# To insert the numeric expression value of the firing element:
{{ $value }}
 
例子:
groups:
- name: example
  rules:
  # Alert for any instance that is unreachable for >5 minutes.
  - alert: InstanceDown
    expr: up == 0
    for: 5m
    labels:
      severity: page
    annotations:
      summary: "Instance {{ $labels.instance }} down"
      description: "{{ $labels.instance }} of job {{ $labels.job }} has been down for more than 5 minutes."
 
  # Alert for any instance that has a median request latency >1s.
  - alert: APIHighRequestLatency
    expr: api_http_request_latencies_second{quantile="0.5"} > 1
    for: 10m
    annotations:
      summary: "High request latency on {{ $labels.instance }}"
      description: "{{ $labels.instance }} has a median request latency above 1s (current value: {{ $value }}s)”
 
在运行时检查警报
要手动检查哪些警报处于活动状态(挂起或触发),请导航到Prometheus实例的“警报”选项卡。这将向您显示每个定义的警报当前处于活动状态的确切标签集。
对于待处理和触发警报,Prometheus还存储表格的合成时间序列ALERTS{alertname="<alert name>", alertstate="pending|firing", <additional alert labels>}。1只要警报处于指示的活动(挂起或触发)状态,样本值就设置为,如果不再如此,则将系列标记为陈旧。
 
发送警报通知
Prometheus的警报规则擅长于确定当前已发生的问题,但它们并不是完整的通知解决方案。在简单的警报定义之上,还需要另一层来添加摘要,通知速率限制,静默和警报依赖性。在Prometheus的生态系统中, Alertmanager担当了这个角色。因此,Prometheus可以配置为定期将有关警报状态的信息发送到Alertmanager实例,该实例随后负责调度正确的通知。
可以将Prometheus 配置为通过其服务发现集成自动发现可用的Alertmanager实例。
 
简单的警报字段模板
alert: InstanceDown #检测job的状态,持续1分钟metrices不能访问会发给altermanager进行报警
expr: up == 0
for: 5m
labels:
  severity: page
annotations:
  summary: "Instance {{$labels.instance}} down"
  description: "{{$labels.instance}} of job {{$labels.job}} has been down for more than 5 minutes."

猜你喜欢

转载自www.cnblogs.com/gschain/p/11697293.html