本文主要介绍运维监控软件Sensu,主要包括Sensu的组成,事件处理流程,以及Sensu的安装过程。
Sensu 简介
Sensu是由 Sonian 公司开发的一种监控框架,主要用于基础设施和应用的监控和检测。Sensu可以为基础设施、服务、应用运行状况以及业务的监控提供一个框架。Sensu专门设计用于解决现代基础设施平台在规模(即公共,私有和混合云)中混合使用静态,动态和短暂基础设施所带来的监控挑战。
Sensu的优势
- 可以监控服务器、服务、应用运行状态
- 可以发送告警和通知
- 支持客户端的动态注册
- 基于分布式的设计,能够轻松的动态伸缩规模
- 支持通过插件的形式自定义检查的内容,拥有丰富的插件库
- 内置的集成工具,可用于和其它系统集成,如
Graphite、Email等 - 提供丰富的
API接口,支持通过API调用访问事件和客户端信息,触发检测等
Sensu 的组成部分
数据传输部分
Sensu使用消息总线(如RabbitMQ)来互信通信,Sensu的这种消息总线通信已被抽象为Sensu Transport。Sensu服务需要通过访问Sensu Transport实例(例如RabbitMQ群集)才能运行。Sensu检查请求和Check Results会作为消息发布到Sensu Transport,相应的Sensu服务可以通过订阅的方式来接收这些消息。
数据存储
在Sensu体系中,只有Sensu Server、API和dashboard才需要访问数据存储。通过将数据存储在Redis中,Sensu服务本身可以保持无状态。主要存储以下数据:
- 客户端注册表
Check历史- 事件注册表
Stashes(Sensu API提供的一个key-value形式的存储)
Check执行调度
Sensu可以通过服务端或者客户端来调度Check。服务端通过发布/订阅模型将Check请求发送给客户端,客户端会处理相应的Check,Sensu会确保在相应的系统上执行相应的Check。
监控客户端
Sensu客户端提供了以下功能:
- 动态自助注册
- 客户订阅(用于监控通过
发布/订阅模式配置的Check) - 本地
Check执行调度 - 用于监控本地系统、服务
- 可以接收来自外部服务的信息输入
事件处理器
Sensu Server是一个可伸缩的事件处理器,用于处理事件并采取行动。Sensu的事件处理功能包括:
- 注册和注销客户
- 处理检查结果
- 使用
filters,mutators,handlers处理监视事件
尽管事件处理程序由Sensu Server在本地执行,但可以运行Sensu Server的多个实例而无需任何其他配置。Sensu提供了内置的任务选择算法以避免Sensu服务器之间的调度冲突,并且Sensu可以通过循环算法将检查结果分发到不同的Sensu Server实例以进行处理,从而实现负载平衡。
RESTful API
Sensu通过RESTful HTTP JSON API提供对监控数据和核心功能的访问,包括:
Clients API- 用于访问client数据,以及添加/删除clientChecks API- 用于访问Check配置数据和发布Check请求Events API- 用于访问event数据和处理eventResults API- 用于访问Check Results数据并发布Check ResultsAggregates API- 用于访问汇总过的Check Results数据,并可以删除汇总数据Stashes API- 用于对Redis基础键值功能的读/写
生产过程中Sensu主要由服务端、客户端、RabbitMQ、Redis和API五个部分构成。如图所示,RabbitMQ用于组件之间的通信,Redis用于持久化Sensu服务器和Sensu API的数据。因为客户端都是通过文件进行配置,并且不需要在服务器端配置客户端的信息,所以可以很轻易的增加和减少客户端的数量。从图中可以看到,为了解耦服务器和客户端,通信都是通过RabbitMQ进行的,如果只有单节点的RabbitMQ,这可能会带来通信上的瓶颈问题,不过可以通过RabbitMQ官方提供的集群部署解决方案来解决这个问题。


Sensu 的安装与配置
下面介绍针对单节点的情况的安装与配置。安装环境是Centos7。
RabbitMQ 和 Redis 的安装与配置
安装 RabbitMQ
安装准备
- 安装 epel 源
1 | yum -y install epel-release |
- 安装 erlang
1 | yum -y install erlang |
过程较长。
- 测试是否安装成功
1 | [root@centos7 home]# erl |
安装 RabbitMQ
这里安装的是最新版本3.6.15,可以通过访问http://www.rabbitmq.com/releases/rabbitmq-server/获取。1
2rpm --import http://www.rabbitmq.com/rabbitmq-signing-key-public.asc
rpm -Uvh http://www.rabbitmq.com/releases/rabbitmq-server/v3.6.15/rabbitmq-server-3.6.15-1.el7.noarch.rpm
- 验证是否安装成功
1 | [root@centos7 home]# service rabbitmq-server status |
配置 RabbitMQ
1 | [root@centos7 home]# chkconfig rabbitmq-server on |
安装 Redis
1 | yum -y install redis |
Sensu 服务器和客户端的安装与配置
Sensu服务器和客户端的安装过程是一致的,都是使用sensu的yum源进行安装。
安装 sensu
配置 sensu 的 yum 源
1 | # echo '[sensu] |
配置 sensu 服务器端
- 添加
/etc/sensu/conf.d/api.json文件:
1 | { |
- 添加redis配置
/etc/sensu/conf.d/redis.json
1 | { |
- 添加rabbitmq配置
/etc/sensu/conf.d/rabbitmq.json
1 | { |
- 添加开机自启动
1 | chkconfig sensu-server on |
配置 sensu 客户端
- 添加rabbitmq配置
/etc/sensu/conf.d/rabbitmq.json
1 | { |
此外,还需添加描述客户端信息的配置文件,在客户端节点/etc/sensu/conf.d/目录下添加client.json文件:1
2
3
4
5
6
7{
"client": {
"name": "client66",
"address": "192.168.31.66",
"subscriptions": ["test"]
}
}
- 添加开机自启动
1 | chkconfig sensu-client on |
Uchiwa 的安装与配置
Uchiwa是 sensu 的用户管理界面,主要包含查看客户端和 check 相关信息的功能。下面简要介绍uchiwa的安装与配置。1
2wget http://dl.bintray.com/palourde/uchiwa/uchiwa-1.1.1-1.x86_64.rpm
rpm -Uvh uchiwa-0.10.2-1.x86_64.rpm
配置/etc/sensu/uchiwa.json 文件:1
2
3
4
5
6
7
8
9
10
11
12
13{
"sensu": [{
"name": "sensu31",
"host": "192.168.31.63", #API服务IP地址。
"port": 4567, #API服务的端口。
"timeout": 5
}],
"uchiwa": {
"host": "192.168.31.63",
"port": 3000,
"interval": 5
}
}
启动相关服务并验证是否安装成功
1 | [root@centos7 etc]# service sensu-server start |
此时,uchiwa页面也可以成功启动访问192.168.31.63:3000:

至此,sensu的简单介绍和安装就完成了,后续结合实践对check、handler和filter等概念进行详细介绍。
参考
https://www.ibm.com/developerworks/cn/cloud/library/1607-sensu-monitoring-platform/index.html