Sensu简介和安装

本文主要介绍运维监控软件Sensu,主要包括Sensu的组成,事件处理流程,以及Sensu的安装过程。

Sensu 简介

Sensu是由 Sonian 公司开发的一种监控框架,主要用于基础设施和应用的监控和检测。Sensu可以为基础设施、服务、应用运行状况以及业务的监控提供一个框架。Sensu专门设计用于解决现代基础设施平台在规模(即公共,私有和混合云)中混合使用静态,动态和短暂基础设施所带来的监控挑战。

Sensu的优势

  • 可以监控服务器、服务、应用运行状态
  • 可以发送告警和通知
  • 支持客户端的动态注册
  • 基于分布式的设计,能够轻松的动态伸缩规模
  • 支持通过插件的形式自定义检查的内容,拥有丰富的插件库
  • 内置的集成工具,可用于和其它系统集成,如 GraphiteEmail
  • 提供丰富的API接口,支持通过API调用访问事件和客户端信息,触发检测等

Sensu 的组成部分

数据传输部分

Sensu使用消息总线(如RabbitMQ)来互信通信,Sensu的这种消息总线通信已被抽象为Sensu Transport。Sensu服务需要通过访问Sensu Transport实例(例如RabbitMQ群集)才能运行。Sensu检查请求和Check Results会作为消息发布到Sensu Transport,相应的Sensu服务可以通过订阅的方式来接收这些消息。

数据存储

Sensu体系中,只有Sensu ServerAPIdashboard才需要访问数据存储。通过将数据存储在Redis中,Sensu服务本身可以保持无状态。主要存储以下数据:

  • 客户端注册表
  • Check历史
  • 事件注册表
  • StashesSensu API提供的一个key-value形式的存储)

Check执行调度

Sensu可以通过服务端或者客户端来调度Check。服务端通过发布/订阅模型Check请求发送给客户端,客户端会处理相应的CheckSensu会确保在相应的系统上执行相应的Check

监控客户端

Sensu客户端提供了以下功能:

  • 动态自助注册
  • 客户订阅(用于监控通过发布/订阅模式配置的Check
  • 本地Check执行调度
  • 用于监控本地系统、服务
  • 可以接收来自外部服务的信息输入

事件处理器

Sensu Server是一个可伸缩的事件处理器,用于处理事件并采取行动。Sensu的事件处理功能包括:

  • 注册和注销客户
  • 处理检查结果
  • 使用filtersmutatorshandlers处理监视事件

尽管事件处理程序由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主要由服务端、客户端、RabbitMQRedisAPI五个部分构成。如图所示,RabbitMQ用于组件之间的通信,Redis用于持久化Sensu服务器和Sensu API的数据。因为客户端都是通过文件进行配置,并且不需要在服务器端配置客户端的信息,所以可以很轻易的增加和减少客户端的数量。从图中可以看到,为了解耦服务器和客户端,通信都是通过RabbitMQ进行的,如果只有单节点的RabbitMQ,这可能会带来通信上的瓶颈问题,不过可以通过RabbitMQ官方提供的集群部署解决方案来解决这个问题。

Sensu 的组成部分

Sensu 组件交互

Sensu 的安装与配置

下面介绍针对单节点的情况的安装与配置。安装环境是Centos7

RabbitMQ 和 Redis 的安装与配置

安装 RabbitMQ

安装准备

  • 安装 epel 源
1
yum -y install epel-release
  • 安装 erlang
1
yum -y install erlang

过程较长。

  • 测试是否安装成功
1
2
3
4
5
6
[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/获取。

1
2
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

  • 验证是否安装成功
1
2
3
4
5
[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

1
2
3
4
5
6
7
8
9
10
11
[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

1
2
3
yum -y install redis
/sbin/chkconfig redis on
service redis start

Sensu 服务器和客户端的安装与配置

Sensu服务器和客户端的安装过程是一致的,都是使用sensu的yum源进行安装。

安装 sensu

配置 sensu 的 yum 源

1
2
3
4
5
6
7
# 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文件:
1
2
3
4
5
6
{
"api": {
"host": "localhost",
"port": 4567
}
}
  • 添加redis配置/etc/sensu/conf.d/redis.json
1
2
3
4
5
6
{
"redis": {
"host": "192.168.31.63",
"port": 6379
}
}
  • 添加rabbitmq配置/etc/sensu/conf.d/rabbitmq.json
1
2
3
4
5
6
7
8
9
{
"rabbitmq": {
"host": "192.168.31.63",
"port": 5672,
"vhost": "/sensu",
"user": "sensu",
"password": "secret"
}
}
  • 添加开机自启动
1
2
chkconfig sensu-server on
chkconfig sensu-api on

配置 sensu 客户端

  • 添加rabbitmq配置/etc/sensu/conf.d/rabbitmq.json
1
2
3
4
5
6
7
8
9
{
"rabbitmq": {
"host": "192.168.31.63",
"port": 5672,
"vhost": "/sensu",
"user": "sensu",
"password": "secret"
}
}

此外,还需添加描述客户端信息的配置文件,在客户端节点/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
2
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 文件:

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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[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

uchiwa页面

至此,sensu的简单介绍和安装就完成了,后续结合实践对checkhandlerfilter等概念进行详细介绍。


参考
https://www.ibm.com/developerworks/cn/cloud/library/1607-sensu-monitoring-platform/index.html

hoxis wechat
一个脱离了高级趣味的程序员,关注回复1024有惊喜~
赞赏一杯咖啡
  • 本文作者: hoxis | 微信公众号【不正经程序员】
  • 本文链接: https://hoxis.github.io/Sensu简介和安装.html
  • 版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 3.0 许可协议。转载请注明出处!
  • 并保留本声明和上方二维码。感谢您的阅读和支持!
0%