本文主要介绍运维监控软件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
数据,以及添加/删除client
-
Checks API
- 用于访问Check
配置数据和发布Check
请求 -
Events API
- 用于访问event
数据和处理event
-
Results API
- 用于访问Check Results
数据并发布Check Results
-
Aggregates API
- 用于访问汇总过的Check Results
数据,并可以删除汇总数据 -
Stashes API
- 用于对Redis
基础键值功能的读/写
生产过程中Sensu
主要由服务端、客户端、RabbitMQ
、Redis
和API
五个部分构成。如图所示,RabbitMQ
用于组件之间的通信,Redis
用于持久化Sensu
服务器和Sensu API
的数据。因为客户端都是通过文件进行配置,并且不需要在服务器端配置客户端的信息,所以可以很轻易的增加和减少客户端的数量。从图中可以看到,为了解耦服务器和客户端,通信都是通过RabbitMQ
进行的,如果只有单节点的RabbitMQ
,这可能会带来通信上的瓶颈问题,不过可以通过RabbitMQ
官方提供的集群部署解决方案来解决这个问题。
Sensu 的安装与配置
下面介绍针对单节点的情况的安装与配置。安装环境是Centos7
。
RabbitMQ 和 Redis 的安装与配置
安装 RabbitMQ
安装准备
- 安装 epel 源
yum -y install epel-release
- 安装 erlang
yum -y install erlang
过程较长。
- 测试是否安装成功
[root@centos7 home]# erl
Erlang R16B03-1 (erts-5.10.4) [source] [64-bit] [async-threads:10] [hipe] [kernel-poll:false]
Eshell V5.10.4 (abort with ^G)
1> 1+2.
3
安装 RabbitMQ
这里安装的是最新版本3.6.15
,可以通过访问http://www.rabbitmq.com/releases/rabbitmq-server/获取。
rpm --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
- 验证是否安装成功
[root@centos7 home]# service rabbitmq-server status
Redirecting to /bin/systemctl status rabbitmq-server.service
● rabbitmq-server.service - RabbitMQ broker
Loaded: loaded (/usr/lib/systemd/system/rabbitmq-server.service; disabled; vendor preset: disabled)
Active: inactive (dead)
配置 RabbitMQ
[root@centos7 home]# chkconfig rabbitmq-server on
[root@centos7 home]# service rabbitmq-server start
[root@centos7 home]# rabbitmqctl add_vhost /sensu
Creating vhost "/sensu"
[root@centos7 home]# rabbitmqctl add_user sensu secret
Creating user "sensu"
[root@centos7 home]# rabbitmqctl set_permissions -p /sensu sensu ".*" ".*" ".*"
Setting permissions for user "sensu" in vhost "/sensu"
安装 Redis
yum -y install redis
/sbin/chkconfig redis on
service redis start
Sensu 服务器和客户端的安装与配置
Sensu服务器和客户端的安装过程是一致的,都是使用sensu的yum源进行安装。
安装 sensu
配置 sensu 的 yum 源
# echo '[sensu]
name=sensu
baseurl=https://sensu.global.ssl.fastly.net/yum/$releasever/$basearch/
gpgcheck=0
enabled=1' | sudo tee /etc/yum.repos.d/sensu.repo
# yum -y install sensu
配置 sensu 服务器端
- 添加
/etc/sensu/conf.d/api.json
文件:
{
"api": {
"host": "localhost",
"port": 4567
}
}
- 添加redis配置
/etc/sensu/conf.d/redis.json
{
"redis": {
"host": "192.168.31.63",
"port": 6379
}
}
- 添加rabbitmq配置
/etc/sensu/conf.d/rabbitmq.json
{
"rabbitmq": {
"host": "192.168.31.63",
"port": 5672,
"vhost": "/sensu",
"user": "sensu",
"password": "secret"
}
}
- 添加开机自启动
chkconfig sensu-server on
chkconfig sensu-api on
配置 sensu 客户端
- 添加rabbitmq配置
/etc/sensu/conf.d/rabbitmq.json
{
"rabbitmq": {
"host": "192.168.31.63",
"port": 5672,
"vhost": "/sensu",
"user": "sensu",
"password": "secret"
}
}
此外,还需添加描述客户端信息的配置文件,在客户端节点/etc/sensu/conf.d/
目录下添加client.json
文件:
{
"client": {
"name": "client66",
"address": "192.168.31.66",
"subscriptions": ["test"]
}
}
- 添加开机自启动
chkconfig sensu-client on
Uchiwa 的安装与配置
Uchiwa
是 sensu 的用户管理界面,主要包含查看客户端和 check 相关信息的功能。下面简要介绍uchiwa
的安装与配置。
wget 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 文件:
{
"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
}
}
启动相关服务并验证是否安装成功
[root@centos7 etc]# service sensu-server start
Redirecting to /bin/systemctl start sensu-server.service
[root@centos7 etc]# service sensu-server status
Redirecting to /bin/systemctl status sensu-server.service
● sensu-server.service - sensu server
Loaded: loaded (/usr/lib/systemd/system/sensu-server.service; enabled; vendor preset: disabled)
Active: active (running) since 五 2018-01-26 13:59:13 CST; 4s ago
Main PID: 15189 (sensu-server)
[root@centos7 sensu]# service uchiwa start
uchiwa started.
[root@centos7 sensu]# service uchiwa status
uchiwa is running
此时,uchiwa
页面也可以成功启动访问192.168.31.63:3000
:
至此,sensu的简单介绍和安装就完成了,后续结合实践对check
、handler
和filter
等概念进行详细介绍。
如果觉得有用,欢迎关注我的微信,有问题可以直接交流:
参考
https://www.ibm.com/developerworks/cn/cloud/library/1607-sensu-monitoring-platform/index.html