开发者学堂课程【3天吃透 Prometheus:Alertmanager 告警】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/1244/detail/18450
Alertmanager 告警
五、组合 Prometheus 与 Alertmanager
这应该有个示例,先看一眼组合 Prometheus 与 alert manager。大体上要做这样几步第一,你可以直接在 Prometheus 的主配置文件当中。这个留言当中,其中有一段我们此前说过,它默认被注释的标为定义表谈到,并在顶级的 alerting 段当中。这就是告诉我们的 Prometheus alert manager。在什么地方使用 alert managers,依赖什么静态配置,以 target 的方式指明服务器。注意这不是配置监控的,不是配置监控目标的。 target 指的是谁是邮件,谁是报警服务器的。如果我们要把它纳入到监控系统中,在底下的定义在 design script configure 当中定一个 job 或者定一个 target 才可以。这不妨使用此前用到基于文件的服务发现方式来进行定义,可能会更好一些。你比如我们在 target 目录下专门定义一个以 alert manager 开头的文件,既可以让上面 alerting there 基于服务发现加载target,也可以让下面即服务方向或者把它作为监控的目标。这一个配置两个方向都解决了。因此我们这里可以采用第二个方式,动态配置指令。右侧是基于文件发现是用的配置令。
我们里边定义target,这是 target 服务器的地址和端口。我们会在标签放在一个文件中,而后在 alerting 。注意 alert 上面我们也不使用 static 什么 figure 了,而使用 fail SD configure 就用到 failed 指名通道。而加载同时还能把它作为 3 个目标,所以你还可以专门的 job 纳入组内的监控。与依然可以使用基于稳定的发行。否则的话,上面静态,下面也在静态。我们就可以来编辑 on the Prometheus。所以我们先去定义的文件。我们来在 targets 目录下请定义一个叫做 alert manager 杠,比如叫servers,我叫 servers 都行,点EMO。而后习惯性的方式就知道 whether 指定叫做target,而且是以这个方式指定一个,你如果有多个,把它写进去就行。其实用 mirror 元素的方式指定 target 对应的主机名和端口号,这个主机名叫 master 到底没问题。于是 targets 第一个我直接使用了 10002291. 19093 端口。如果有需要打标签,我使用 labels 打个标签,比如我给你判,就叫做 alert manner,别往外加了。如果有需要,你可以讲没有,基于文件服务发现文件已经定义好了,叫 alert manager。 所以在上一段alert manager 就不用使用 static configure,labels 叫 fail SD configure。记文件的服务发现基于文件服务发现,那就不用去 target 而提了。关键是谁就行使用files。alert manage 很容易会产生比误,敲起来就敲错了,我们一会来验证它。第一步。好的,接着我们还应该把它纳入到我们的监控表里来,如果有必要,给某个教育组合起来也可以,我自己定义也可以。所以比如这一个 girlfriend we land,我就贴到这, alert manager 文件是 alert manager 打头的。都定义完了,于是我们现在可以尝试着来使用它了。但问题是,我们虽然配置了对接了 alert manager,但你并没有告警规则,所以它并不会发生告警的。真正要能够告警,我们现在只是让 promises 能够对接到 alert manager 上去了。Alert manager 也有一个所谓的告警收件人信息了,但是我们要不要告警,发什么告警,并没有做任何配置。
我们接下来还得定义一个东西,它的成语 the rules and the rules 此前我们曾经加个叫记录规则,接下来我们还可以再加一点项,再放进一些规则进来。这个规则叫告警规则。可以把我们告警表达式或者叫告警的配置放在一个文件当中,让 promises 能够周期性的去评估告警规则。一个 bird 表达式的结果是true,它是false。如果是true,则它能达到什么结果?能说过如果是ture,但还没有到达真正发送警报的时间,它会让警报处于 pending 状态。我们先来看 1 我先来重启只是看 promise 和默认的位置,可以发现 promise 的界面上这里就有个verse,这其实就显示告警信息的,但是我们还没有定义任何告警规则。 rules 当中这些都是记录规则,叫record。没有一个属于alert,因而这里在 alerts 这,它是没有任何不会发生发挥作用的。
而这 3 种颜色分别代表了如果被触发了告警,他们的告警状态处于什么状态。 inactive 表现定义的告警规则。但这个规则没有被触发,因为没有异常刚给大家讲过的。而 pending 则表示触发了,但还没有先发出去,叫pending。一旦 pending 超时了,就可以 fire 了。一旦只有在 fire 这儿的时候,你的告警才会发给我们的 alert manager。you alert manager 在这负责这样发行的。因而这样就到了一个特别关键的一步定义告警规则。所以我们一并把事情完成,去定义告警规则。比如这次告警规则放哪?
you write recording rolls 我们再来一个叫 alerting alerting to rolls,应该就叫做告警规则。先创建目录。我把所有的告警规则都放在目录下的多个文件中进行组织。如果你有多种告警,比如买 4 个告警, Redis 告警,主机告警等等。我们应该把节点的告警放在一起,把一种应用自己的告警放在一起。所以我们建议各位分文件来分别管理不同的告警,不要把所有规则堆在一起。我说这种内容最为简单的告警示例,应该很容易看懂。
六、添加告警规则
首先 gross 说就叫分组的信息, name 叫组名叫 all instances,表示所有实例。底下 rules 第一条造型规则写的是什么? the alert 这要定义规则名称,也叫告警名称叫做instance。 Dam 指的是什么实力宕机了。每一个 target 都用一个指标,叫做up,如果 up 等于0,就意味着实力棒抓不到指标了。 up 等于 1 表示是正常的。能理解方这意思。所以我们没写哪个实例代表是任何一个实例,因为我使用 up 的一个表达式。注意这个 up 是什么?是我们的 from QL 表达式。而 up 等于 0 是一个比较表达式。我们说了告警规则就是比较表达式。它怎么比较取出来所有的拥有 up 指标之下的所有视频序列,比较起来有没有等于 0 就很好,有等于 0 的就表示触发告以通知了。但是告诉我们选for,在这 for 表示循环之意对吧?循环求什么?一分钟。我一分钟之内可能会多次检测,但是如果在一分钟之内检测,它的表达式始终是满足的,始终为true。我们一直在讲,一直为true,就意味着一定有一个实例一直处于宕机状态,默认在这我可以设定这个规则,每 15 秒。这是到底规则的设定。每 15 秒评估一次,而后一分钟之内我就评估了四次,四次评估都为true。我们去认为实际上也不算亏。现实中生产中我们很有可能时间会更长一点,因为我们抓取指标抓取可能没那么长,没那么快频率。建议你最少能够容纳 3 个抓取操作,或者 3 个评估操作。这叫做 for 1m。annotations。 labels 是我们自己一旦被警告,被触发以后各个注意。一旦告警被触发,它生成告警自己是一个独立的时间序列,告警自己也是一个独立的时间序列。它也有标签,它的标签就是触发告警的实例的标签。up。它一定能匹配出来某个时间序列。实验室的时候应该还有标签,标签会源源不动的附了给它了。它的名字是全打写的。有这些标签,我们如果是真认为这个标签还不够,我还可以给它额外加标签。 labels 加了一个新标签 severity 标签名 critical 标签值。除此之外,我们还可以给这样一个 alert 加个注解,叫annotations,叫注解。比如 title instance dim description,就叫描述 instance has been dim for more than one minutes。因此,而你在实际当地也超过 1 分钟。这个就是你在发送告警信息的时候可能要发的内容的一部分。各个记得它会给我们的邮件默认的模板。邮件模板所作为内容一部分。当然,事实上这些也会显示在我们的告警的面板当中。由此,这里我称之前可能写了一个很简单的告警规则,也就意味着我们先不把问题集中在如何构建告警复杂。对所说的格式的定义,事实上我们也可以看一下我们的 alert configuration 当中。告警规则是 alerting loss 是 Prometheus 的阶段。后面真正的配置语法应该永远在 configuration 当中。叫 alerting rules 或者我们的 rules 底下 rules fails 就加载 literary 跳转, i want to give you a level the?他也只有示例我们到底要怎么用?既然如此,我们倒也不必要非得研究它。 recording Ross 规则很相像,爱听的格式。 rules 组名, rules 可以定义一条规则,每一条规则可以有自己的label。基本上已经包含了它几乎在配置上所应该用的所有元素。就直接使用she。我们在 alerting rolls 目录下创建一个,比如叫做 INS dance, yeah yeah yeah what is this alert yellow?instances。接下来我们使用 side to Paas 就能贴到盖。我们做一个简单的修改生效就行了。所以缩减的问题我们改一改。我要 gross 是 group 底下的一个规则。规则应该有自己的名称,肯定不是主要元素。它应该有表达式e,s,p,r。这个表达式就是所谓的告警表达式。而后这个告警会延迟多长时间?在这里发送 for,我们没有任何国外信息,直接都是给的直接字串。所以无论是哪个实体故障,可能发的信息都是一样的。因为断了模板。但是我这两天又说模板扩展模板没要求好rooms。
而且我们制定了一条规则,是告警节点。 节点上如果内存空间太小了, c q 占用率太高了,是不是都可以告诉你们文件系统所剩的空间快完了?没准你确认对英文念中的 original 可能都会多大。各位记得主要看你关注节点上的哪些指标比较重要。弹力化作为节点来讲,网络内存、CPU、磁盘、文件、系统大小空间,这应该是 5 个特别关键指标再重复用应该是 5 个。 c t o 内存磁盘用 o i o 和磁盘, i o i o 和磁盘空间是两回事。等于是可以编辑下 order from missiles,点 yellow 让它加载报警规则,一定要去加载它。所以这底下可以让它去读取告警规则。是 alerting Ross 之下的所有填 emoji 的整体就可以了。第一,在 alert manager 上,你要定义好路由和receiver。第二, Prometheus 要指向这个 rest manager,要能用你的 lot manager。第三, Prometheus 上要定好告警规则,这样有了告警通知,他才会发给你的 urge manager。明白both manager 才能根据你定的路由和 receiver 来想对应的 receiver 发告警在这边可能稍微配置过程稍微复杂,后面就可以让我们 permission 重启。
他说我加载了这个文件,其中有一条规则,对应的组名叫做 all instances。其中有一个规则,这就只显示了一个英文指定的名称,叫做 instant stand expression 为up,等于 0 four 1 分钟。第一, make want to 但是回到 alert manager 上,回到我们 alert manager 。你发现这 alert manager alerts 上没有任何信息,因为它没有处罚任何警报。 in 表示我们没有节点宕机,所以它不会绕行的。我现在模拟一个节点宕机。
大家知道,在我们这里监控有 4 个节点,你可以认为每一个节点其实就不能叫节点,它应该认为叫target。每个 target 就 16 一个instance。总结这些 instance 当中,任何一个模拟合样的down,或者是抓取不到指标了,哪应该都会发送到主体积累。有三个endpoints。我们把我们的 note 01还有 note 03,就把 exporter 地产给它停了就行。停了抓不到指标,它的 up 又为 0 。所以你不用非得模型说我把节点给它上掉 exporter 进程当中就可以。由此到节点 03 上我们这里执行 system c t l 去 stop node exposure。它的 9100 端口主机上在 target 这儿我们刷新一下,过一会儿 node 03 应该就显示为 unknown 什么之类的状态,显示电动状态。再回到 verse 这儿还会被触发。等一会儿过了我们评估到某一刻的时候,到规则到不到评估的时间的时候,这儿应该会显示为pending。某一刻头 pending 一段时间,再接着就 file 疑问。给我看到当前节处于 contenting 状态。
注意 labels 你看 label APP 等于 node x culture,这是我们自己通过 reload 加进来的instance。 node 03 可以靠冒号 9100 job with notes severity。这个 label 其实就叫告警的label。各位注意,这是告警的label,而这个 label 它是从对应的 target 这种复制过来之后,又自己加了两个label,一个叫severity,一个叫name。所以我说标签集合。其实你哪个节点到了,它就会复制哪个节点。 filer 现在为红色看没有。这里 filer了,你就意味我们 alert manager 上这应该会有告警信息的。 alert manager 的界面刷新一下看,这有个告警信息出现了。大概他说告警信息上面或者叫告警上面有这么多个标签。这是我过滤出来的所有告警。我们也可以在这加个过滤器,只看其中一部分告警。我们来看看告警到底被触发发送没有。回到我们 blow manager 这个节点上,这里有个警告 notify attempt to failed,好像你的接收人有点。接收人是错的,跟我的格式可能是不接人。我准备要连看一下 male extra。我们看一下邮件没发出来。这跟我们的邮件地址有关,应该写成 root 和 host 可能比较合适一点。但是它已经在试图发送告诉信息了,我们必须要改善我们邮件服务吗?我已经写了那个 house 了,我们去 etc post fix 编辑一下main。 我们用本地做测试。 inight interface 我是用 power 监听所有接口。 on the my origin 等于 my domain。my domain 等于马哥 Edu . com。 my house name 就是我们本期的手机地址,应该等于 master 零一点。 close the face 它进行应该所有地址了。可以介绍邮件,转一份,它会重试,发送一律后用户会收到。
这样子我们再让一个节点就行了。可能再触发一下。起来以后你发现它会恢复的。往 model 02 放一下。请大家恢复的告警信息回到我们的 verse 这儿刷新一下。因为看到刚才那个 note 03 一旦恢复,告警信息就已经不再出现了。只要我们问题解决了,这个告警就不再出现了。各位记得回到我们的 alert manager 上,在这刷新。你发现 alert manager 也没了,但是我们的 node 02 又被我们停掉了。过一会可能 node 02 开始警告了。来告警信息。这次就已经是解决 L2 了。
所以我们说标签附加的 version 的标签其实就是对应的实例的,或者叫时间序列的标签。 我再稍等片刻,可能还没到 1 分钟。 只要我们不改它,它就fairy。如果在它 pending 期间,我们又把它上线了,它又不会报警,它又不会真正触发报警操作的。我来看到告警信息。应该又出现了一个新的告警信息,而后他到底发出去没有?我来看我们这里的日志信息,这次有没有说错误。应该会支持 copy to 什么之类的。 put that little horse 这次的预发总而应该不会再错了。这是此前我们把它停掉的时候调研的信息。 此行的邮件它应该会重复发吗?于是我们还得给他触发一次,把 2 人停起来, 3 个停掉。我们这次会去验证它了,等会顺道再去验证。