记录我在区块链互联网公司的实习生活Day25

工作日志

今天是8月16日,星期一,线上办公第🔟天,隐隐约约感觉要解封啦,😙

任务清单

今天的任务只有一个主题——深入研究alertmanager的配置

任务记录

深入研究alertmanager的配置
研究到哪就写到哪吧,如果公司没有分配给我新的工作,那这周基本都在这上面了。
今天看了很多的文章,有官方文档也有大佬们写的博客,无外乎就在研究两个问题,一个是路由配置,一个是报警时间相关的问题

1⃣️:路由配置
配置目的
满足多元化的监控报警要求,比如说区块链方面的报警传给前端的同事,服务器性能方面的报警则要传给运维工作人员(是的,就是我🤠)

怎么配置
下面是alertmanager.yml文件具体内容:

global:
  resolve_timeout: 5m
  # default is 5m

route:
  group_by: ['alert']             # 与rules.yml中的group name保持一致,表示 `alert`组中的警告都使用下面的路由发送
  group_wait: 5s                  # 发出警报后等待同组警报的时间
  group_interval: 5m              # 告警时间间隔
  repeat_interval: 10m            # 重复发送报警的时间间隔
  receiver: 'default'             # 默认根路由的接受者

  routes:                         # 子路由
  - receiver: 'blockchain_Alert'
    match:
      project: blockchain         # match匹配rules.yml文件里label定义的project,project为blockchain的警报发往 `blockchain_Alert`接受者

  - receiver: 'performance_Alert'
    match:                        # match匹配,与上面的意思相同
      project: performance

receivers:                        # 各项接受者的具体配置,其中决定了警报究竟去哪里
- name: 'default'                 # 匹配receiver为‘default’的alert通过webhook发送至下面的url
  webhook_configs:               
  - url: 'http://xx.xx...'

- name: 'performance_Alert'       # 与上面的说明一样,但可以把alert传给两个不同的url
  webhook_configs:
  - url: 'http://xx.xx...'
  - url: 'http://xx.xx...'

- name: 'blockchain_Alert'        # 上同啦
  webhook_configs:
  - url: 'http://xx.xx...'

# inhibit_rules:
#   - source_match:
#       severity: 'critical'
#     target_match:
#       severity: 'warning'
#     equal: ['alertname', 'dev', 'instance']

在alertmanager的路由配置中,一般是由一个根路由(root route)后接若干个子路由(child root)组成,当然你可以只写一个路由,但考虑到日后监控报警工作的多元化,因此强烈建议设置成多个子路由的形式,方便后面的管理。

为了搭配alertmanager.yml文件的正常运行,所以rules.yml要设置成下面这个样子:

group:
- name: 'alert'                        # 与alertmanager.yml文件中参数group_by后面的字符串保持一致,同时说明以下两个alert属于同一个组'alert'
  rules:

  - alert: PrometheusTargetMissing
    expr: up == 0
    for: 10s
    labels:
      level: medium
      project: performance              # 此处为文件alertmanager.yml中match的匹配依据
    annotations:
      description: "A Prometheus target {{$labels.job}} has disappeared. It might be crashed."

  - alert: BlockchainProblem_Test
    expr: delta(substrate_block_height{status="best"}[20s]) >= 2
    for: 0s
    labels:
      level: test
      project: blockchain               # 同上,此处为文件alertmanager.yml中match的匹配依据
    annotations:
      description: "The change of the block height(best) within 20 seconds is greater than or equal to 2"

这么一路配置下来,就能正常运行报警系统了

2⃣️:报警时机(报警时间)的理解
配置目的
对alert进行实时准确的报警

具体理解
一个经典的例子如下所示:

cd prometheus-2.28.1.linux-amd64/ | vim prometheus.yml
# prometheus.yml的配置大致如下

global:
  scrape_interval: 20s
  evaluation_interval: 1m
  # -- snip --

vim rules.yml
# rules.yml的关键配置如下

# 此处语法大家不必较真,只是个例子
ALERT NODE_LOAD_1M
  IF node_load1 > 20
  FOR 1m
# -- snip --

那么请问,触发JobMissing警报所用的时间为多少?🤨
是个好问题,一开始我也没有琢磨出来,这也是我一直想知道的
分析这个问题应该从下面的图看起:
在这里插入图片描述
结合下面的分析,大家可以慢慢推敲出答案:

  1. The load of a node constantly changes, but it gets scraped by Prometheus every scrape_interval (ie. 20s)
  2. Alert rules are then evaluated against the scraped metrics every evaluation_interval (ie. 1m)
  3. When an alert rule expression is true (ie. node_load1 > 20), the alert switches to pending, in order to honor the FOR clause
  4. At the next evaluation cycles, if the alert expression is still true, once the FOR clause is honored the alert finally switches to firing and a notification is pushed to the alert manager

公布一下答案:it takes a time between 1m and 20s + 1m + 1m.

把原文挂出来分享给大家:Prometheus: understanding the delays on alerting
这还有个中文翻译的版本:多久可以收到prometheus的告警?

总结

通过今天的学习,对alertmanager的配置又有了一个更深入的了解,我的第二个项目又能升级一下啦。
明天继续加油研究,顺便和师哥交流一下今天的进度,继续升级我的项目😄

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值