Sensu监控实战

在之前博文Sensu初探中介绍了

  • [sensu框架]
  • [sensu目录结构]
  • [sensu工作模式]
  • [sensu高可用部署架构]
  • [sensu web界面]

本篇将从实战来介绍Sensu如何实现轻量级的监控。

[Sensu安装配置]
Sensu安装及其配置参见其官网文档 Sensu

Sensu-server依赖rabbitmq-server和redis-server,这里建议redis-server使用2.8版本以上的,主要是作者在部署的时候想用redis-sentinel做一个redis的监控,从而保证整套系统的高可用。低版本的redis也是够用的。

web界面使用uchiwa。


监控无非就是我们挑一个时间,针对一个地方上的一个对象,获取其执行的状态信息。我们更进一步希望能将这个信息捞出来,并通过一定途径传递出去。

为什么说Sensu轻量呢,一方面是因为Sensu代码轻量,另一方面Sensu更主要是做了一个框架的事情。
我们先理解Sensu是一个远程执行脚本的工具,这里的脚本不限形式,可以是shell,python或者是ruby等,任何一个脚本语言。为了做到监控,sensu引入了定时器功能,亦就是我们可以让客户端上某个脚本定时执行,类似cron任务一样。地点即是sensu-client所在的那台机器。那么怎么监控对象呢?那这个sensu就不管了,我们就需要使用自己写的一些脚本去获取该对象的一些状态信息,这样的好处是灵活,但若是一个服务并没有提供任何client和api,那这种情况是不适合使用sensu进行监控的。sensu对这个脚本开头没有什么规定,但对这个脚本结尾有规定。那就是脚本在退出时返回值限于(0,1,2,3)并且规定 0 : ok,即服务运行正常;1 : warning,即服务存在一定问题;2 : critical,即出现了严重的错误;3 : 自定义。这些规定并不是强约束的,只是sensu-server通过这些返回值可以选择触发handler(另一些脚本)。因此,我们可以根据自己的需要,重新定义这些返回值。那么handler就是我们传输这些错误信息的途径了,可以是SMS,email,etc..

上面一堆废话只是希望读者能大致对sensu实现监控有一个印象,请原谅作者当年上语文课时的放荡不羁。

[第一个check]

1.我们需要在 sensu-server 中定义check

这里写图片描述

很明显,定义是一个json格式。这里详细介绍一下各个参数意思。

  • checks : 标明这是一个check,用来区分一会介绍的handler
  • cinder-api : 是这个check的名字,主要是用于web界面显示
  • command : 就是我们要远程执行的命令,很明显我们是要在远程主机上执行p_cinder_api.sh这个脚本。
  • subscribers :是对应于client定义中[subscriptions]字段,如果client订阅了这个subscribers,那么client会执行这个脚本。
  • type : metric 使用这个参数后,我们不仅可以捞出脚本返回值[status],也可以捞出脚本输出的一些msg[output]
  • handlers :是client脚本执行异常之后,我们可以根据返回值触发一些handlers,执行通知等event
  • interval : 我们希望脚本执行的时间间隔,这里是1分钟一次
  • occurrences : 是我们希望脚本返回状态累计错误几次再触发handler
  • refresh: 用来刷新 occurrences ,单位是秒。

有了这个check-define后,我们的sensu-server就会每60s推出一个命令至rabbitmq,sensu-client会监听rabbitmq ,消费感兴趣(subscriptions)的消息。

2.我们定义一个client
client定义非常简单,它只需要告知服务器自己的一些基本信息以及自己感兴趣的check。

这里写图片描述

  • address:填写该主机ip地址
  • subscriptions : 订阅感兴趣的check。

3.编一个需要远程执行的脚本
脚本复杂与否,看自己的心情,注意的是就是要满足sensu的格式。

这里写图片描述

这是一个sh脚本
echo出的信息,sensu会通过返回的[output]字段返回。
exit 出的信息,sensu会通过[status]字段返回。

有了上述三步后,我们已经可以每60s在该节点上执行一个脚本,然后将信息返回至sensu-server。
接下来我们来完成最后一步,就是拿到返回状态后,我们做什么。

4.定义一个handler

这里写图片描述

  • command :需要handler执行的脚本,是放在sensu-server节点上的
  • severities : 用于觉得check返回值为什么时触发handler,我们这里是返回1,2时触发

5.实现一个email报警
我是使用python实现email报警的,这里相信大家可以轻松在网上找到实例。所以主要介绍一下我们拿到的返回值都有哪些,方便大家过滤出自己感兴趣的内容。

这里写图片描述

这是一个client执行完脚本后的返回值,在server端捕捉到的。
可以挑选一些自己关注的字段,用email传出。

这里写图片描述


至此我们实现了一个简单的监控。虽然简单,不过完整。
总体感觉对一些较为轻量的服务监控使用sensu还是蛮顺手的,比如监控rabbitmq队列情况,负载等。

sensu还提供了一些其他特性,例如事先不需要定义脚本,通过api将脚本内容直接传递至client,然后执行,或者是将所有节点返回结果汇合后发至server。这些其他特性可以进一步参见官网文档。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值