介绍
Sensu是一个用Ruby编写的监视工具,它使用RabbitMQ作为消息代理,Redis用于存储数据。它非常适合于监控云环境。 Sensu将“检查”脚本的输出与“处理程序”脚本连接,以创建强大的监视和警报系统。检查脚本可以在许多节点上运行,并报告是否满足某个条件,例如Apache正在运行。处理程序脚本可以执行发送警报电子邮件的操作。 “检查”脚本和“处理程序”脚本都在Sensu主服务器上运行,该服务器负责协调Sensu客户端服务器之间的检查执行并处理检查结果。如果检查触发事件,它将被传递给处理程序,这将采取指定的操作。 一个示例是检查Apache Web服务器的状态。检查将在Sensu客户端上运行。如果检查报告服务器已关闭,则Sensu服务器将事件传递给处理程序,该处理程序可以触发发送电子邮件或收集停机时间指标等操作。 在本教程中,我们将安装和配置一个Sensu主服务器和一个Sensu客户端服务器。
先决条件
为了设置Sensu,您将需要:
- 一个主节点Droplet运行Ubuntu 14.04。这是将用于查看所有监视数据的节点。
- 要监视至少一个额外的节点,运行Ubuntu 14.04。
在每个Droplet上创建一个sudo用户。首先,创建与
adduser命令的用户,您要使用的名称代替用户名。
adduser username
这将创建用户和相应的主目录和组。系统将提示您为新用户设置密码并确认密码。还将提示您输入用户的信息。确认用户信息以创建用户。 接下来,授与用户的权限Sudo
visudo
命令。
visudo
这将打开
/ etc / sudoers文件。 在
User privilege specification
部分中添加另一条线路为创建的用户,所以它看起来像这样(与您所选择的用户名,而不是
用户名 ):
# User privilege specification
root ALL=(ALL:ALL) ALL
username ALL=(ALL:ALL) ALL
保存文件并切换到新用户。
su - username
更新系统软件包并升级它们。
sudo apt-get update && sudo apt-get -y upgrade
第一步 - 在主机上安装
首先,我们将设置Sensu主服务器。这需要RabbitMQ,Redis,Sensu本身和Uchiwa仪表板,以及一些支持软件。 将RabbitMQ源添加到APT源列表。
echo "deb http://www.rabbitmq.com/debian/ testing main" | sudo tee -a /etc/apt/sources.list.d/rabbitmq.list
下载并添加RabbitMQ的签名密钥。
curl -L -o ~/rabbitmq-signing-key-public.asc http://www.rabbitmq.com/rabbitmq-signing-key-public.asc
sudo apt-key add ~/rabbitmq-signing-key-public.asc
安装RabbitMQ和Erlang。
sudo apt-get update && sudo apt-get install -y rabbitmq-server erlang-nox
RabbitMQ服务应该自动启动。如果没有,请使用以下命令启动它。
sudo service rabbitmq-server start
Sensu使用SSL实现其组件和RabbitMQ之间的安全通信。虽然可以使用没有SSL的Sensu,但是高度不鼓励。要生成证书,下载Sensu的证书发生器到
/ tmp目录,并生成SSL证书。
cd /tmp && wget http://sensuapp.org/docs/0.13/tools/ssl_certs.tar && tar -xvf ssl_certs.tar
cd ssl_certs && ./ssl_certs.sh generate
创建一个RabbitMQ SSL目录并复制证书。
sudo mkdir -p /etc/rabbitmq/ssl && sudo cp /tmp/ssl_certs/sensu_ca/cacert.pem /tmp/ssl_certs/server/cert.pem /tmp/ssl_certs/server/key.pem /etc/rabbitmq/ssl
创建和编辑
/etc/rabbitmq/rabbitmq.config文件。
sudo vi /etc/rabbitmq/rabbitmq.config
将以下行添加到文件。这将配置RabbitMQ SSL侦听器侦听端口5671并使用生成的证书颁发机构和服务器证书。它还将验证连接,并且如果没有证书则失败。
[
{rabbit, [
{ssl_listeners, [5671]},
{ssl_options, [{cacertfile,"/etc/rabbitmq/ssl/cacert.pem"},
{certfile,"/etc/rabbitmq/ssl/cert.pem"},
{keyfile,"/etc/rabbitmq/ssl/key.pem"},
{verify,verify_peer},
{fail_if_no_peer_cert,true}]}
]}
].
重新启动RabbitMQ。
sudo service rabbitmq-server restart
为Sensu创建一个RabbitMQ虚拟主机和用户。更改密码
(PASS)。稍后在配置Sensu服务器和要监视的客户端时,需要使用此密码。
sudo rabbitmqctl add_vhost /sensu
sudo rabbitmqctl add_user sensu pass
sudo rabbitmqctl set_permissions -p /sensu sensu ".*" ".*" ".*"
安装Redis。
sudo apt-get -y install redis-server
Redis服务应该自动启动。如果没有,请使用以下命令启动它。 (请注意,如果Redis已经运行,您将收到错误:“启动redis-server:失败。”)
sudo service redis-server start
添加源和键以安装Sensu。
wget -q http://repos.sensuapp.org/apt/pubkey.gpg -O- | sudo apt-key add -
echo "deb http://repos.sensuapp.org/apt sensu main" | sudo tee -a /etc/apt/sources.list.d/sensu.list
安装Sensu和Uchiwa(Uchiwa是监控仪表板)。
sudo apt-get update && sudo apt-get install -y sensu uchiwa
Sensu需要到RabbitMQ的安全连接信息。为Sensu创建一个SSL目录,并复制所生成的证书。
sudo mkdir -p /etc/sensu/ssl && sudo cp /tmp/ssl_certs/client/cert.pem /tmp/ssl_certs/client/key.pem /etc/sensu/ssl
现在安装了Sensu监控的所有组件。
第二步 - 在主机上配置
现在我们需要配置Sensu。我们会更容易可读性和管理建立在
/etc/sensu/conf.d文件夹单独的配置文件。除非您在单独的机器上配置了配置文件中提到的服务和组件,否则可以保持下面显示的大多数示例值不变。或者,/etc/sensu/config.json.example <^>是您可以复制并用于配置Sensu的另一个示例配置文件。 创建和编辑
rabbitmq.json文件。
sudo vi /etc/sensu/conf.d/rabbitmq.json
添加以下行,这将允许Redis使用您的SSL证书安全地连接到RabbitMQ实例。
用户和
过程应该是你的RabbitMQ的虚拟主机设置的。
{
"rabbitmq": {
"ssl": {
"cert_chain_file": "/etc/sensu/ssl/cert.pem",
"private_key_file": "/etc/sensu/ssl/key.pem"
},
"host": "localhost",
"port": 5671,
"vhost": "/sensu",
"user": "sensu",
"password": "pass"
}
}
创建和编辑
redis.json文件。
sudo vi /etc/sensu/conf.d/redis.json
添加以下行,其中包括Sensu访问Redis实例的连接信息。
{
"redis": {
"host": "localhost",
"port": 6379
}
}
创建和编辑
api.json文件。
sudo vi /etc/sensu/conf.d/api.json
添加以下行,其中包括Sensu访问API服务的连接信息。
{
"api": {
"host": "localhost",
"port": 4567
}
}
创建和编辑
uchiwa.json文件。
sudo vi /etc/sensu/conf.d/uchiwa.json
添加以下行。这些信息包括Uchiwa仪表板的用于访问Sensu API的连接信息。您可以选择在创建仪表盘认证
团扇块一个用户名和密码。如果您希望信息中心可公开访问,请保留原样。
{
"sensu": [
{
"name": "Sensu",
"host": "localhost",
"ssl": false,
"port": 4567,
"path": "",
"timeout": 5000
}
],
"uchiwa": {
"port": 3000,
"stats": 10,
"refresh": 10000
}
}
在这个例子中,我们将Sensu主服务器监视器本身作为客户端。因此,创建和编辑
client.json文件。
sudo vi /etc/sensu/conf.d/client.json
添加以下行并编辑Sensu客户端
名称值。 这是你会看到在团扇仪表板。
这个名字不能有空格或特殊字符的服务器的名称
。 因为我们正在监视该服务器可以保留
地址值为
localhost。我们将稍后为要监视的每个客户端主机再次创建一个类似的文件。
{
"client": {
"name": "server",
"address": "localhost",
"subscriptions": [ "ALL" ]
}
}
启用Sensu服务自动启动。
sudo update-rc.d sensu-server defaults
sudo update-rc.d sensu-client defaults
sudo update-rc.d sensu-api defaults
sudo update-rc.d uchiwa defaults
启动Sensu服务。
sudo service sensu-server start
sudo service sensu-client start
sudo service sensu-api start
sudo service uchiwa start
在这一点上,你可以在HTTP访问Sensu://
IP地址 :3000。
第三步 - 在客户端上安装
您将需要在每个要监视的客户端计算机上安装Sensu。 虽然仍
是Sensu主服务器上的SSL证书复制到客户端服务器的
/tmp
使用SCP文件夹。 下面的客户机服务器的用户Sudo和IP地址替换
用户和
IP。
scp /tmp/ssl_certs/client/cert.pem /tmp/ssl_certs/client/key.pem user@ip:/tmp
上要监视
的客户端中,添加Sensu键和来源。
wget -q http://repos.sensuapp.org/apt/pubkey.gpg -O- | sudo apt-key add -
echo "deb http://repos.sensuapp.org/apt sensu main" | sudo tee -a /etc/apt/sources.list.d/sensu.list
安装Sensu。
sudo apt-get update && sudo apt-get -y install sensu
您需要向客户端提供与RabbitMQ的连接信息。作出Sensu的SSL目录和复制证书
/tmp
从Sensu主服务器中复制该文件夹。
sudo mkdir -p /etc/sensu/ssl && sudo cp /tmp/cert.pem /tmp/key.pem /etc/sensu/ssl
创建和编辑
rabbitmq.json文件。
sudo vi /etc/sensu/conf.d/rabbitmq.json
添加以下行。编辑
主机值可使用的RabbitMQ服务器的IP地址; 即Sensu主服务器的IP地址。
用户和
口令值应该是你的Sensu主服务器上的RabbitMQ虚拟主机设置的。
{
"rabbitmq": {
"ssl": {
"cert_chain_file": "/etc/sensu/ssl/cert.pem",
"private_key_file": "/etc/sensu/ssl/key.pem"
},
"host": "1.1.1.1",
"port": 5671,
"vhost": "/sensu",
"user": "sensu",
"password": "pass"
}
}
通过创建和编辑
client.json文件提供此Sensu服务器配置信息。
sudo vi /etc/sensu/conf.d/client.json
添加以下行。你应该编辑
名称值你想要什么该服务器在仪表盘团扇被称为
该名不能有空格或特殊字符。 你可以离开设置为
localhost
地址值,因为我们正在监视这个Sensu的客户端服务器。
{
"client": {
"name": "client1",
"address": "localhost",
"subscriptions": [ "ALL" ]
}
}
启用并启动客户端。
sudo update-rc.d sensu-client defaults
sudo service sensu-client start
您现在应该在Sensu Dashboard的“客户端”选项卡上看到客户端。
第四步 - 设置检查
现在Sensu正在运行,我们需要在两个服务器上添加一个检查。我们将创建一个Ruby脚本来检查Apache是否正在运行。 如果您没有安装Apache,请立即将其安装在Sensu主服务器和Sensu客户端服务器上。
sudo apt-get install -y apache2
默认情况下,Apache应该在两台服务器上运行。 在安装sensu-plugin gem之前,请确保您具有所有必需的库。在Sensu主服务器和Sensu客户端服务器上安装Ruby库和构建必需库。
sudo apt-get install -y ruby ruby-dev build-essential
在Sensu主服务器和Sensu客户端服务器上安装sensu-plugin gem。
sudo gem install sensu-plugin
创建于Sensu插件文件夹
签apache.rb文件并修改Sensu主服务器和客户端Sensu服务器上文件的权限。
sudo touch /etc/sensu/plugins/check-apache.rb && sudo chmod 755 /etc/sensu/plugins/check-apache.rb
同时编辑Sensu主服务器和客户端Sensu服务器上
检查apache.rb文件。
sudo vi /etc/sensu/plugins/check-apache.rb
添加以下行,脚本检查Apache的过程。
#!/usr/bin/env ruby
procs = `ps aux`
running = false
procs.each_line do |proc|
running = true if proc.include?('apache2')
end
if running
puts 'OK - Apache daemon is running'
exit 0
else
puts 'WARNING - Apache daemon is NOT running'
exit 1
end
创建和编辑只有Sensu主服务器上的
check_apache.json文件。
sudo vi /etc/sensu/conf.d/check_apache.json
添加以下行将运行脚本以每60秒检查一次Apache。
{
"checks": {
"apache_check": {
"command": "/etc/sensu/plugins/check-apache.rb",
"interval": 60,
"subscribers": [ "ALL" ]
}
}
}
在Sensu主服务器上重新启动Sensu服务器和API。
sudo service sensu-server restart && sudo service sensu-api restart
在Sensu客户端服务器上重新启动Sensu客户端。
sudo service sensu-client restart
几分钟后,您应该会看到检查显示在Sensu Dashboard的“检查”选项卡上。 停止任一服务器上的Apache服务,以测试脚本是否正常工作。
sudo service apache2 stop
警报应该在几分钟后出现在
事件仪表板。单击警报以查看更多信息,并采取措施,如静音或解决它。 在此映像中,Apache已在客户端服务器上停止。这是
客户端页面。
启动Apache服务以停止警告。
sudo service apache2 start
第五步 - 设置处理程序
处理程序可以根据事件发送通知电子邮件或发送数据到其他应用程序,如Graphite。这里,我们将创建一个处理程序,如果Apache检查失败,则发送电子邮件。请注意,您的服务器需要配置为发送电子邮件。你可以使用这个
Stapling教程建立一个简单的邮件服务器。 (您可能希望在Sensu主服务器上向用户发送邮件,以便进行最简单的配置。) 在Sensu主服务器,创建和编辑
handler_email.json文件。
sudo vi /etc/sensu/conf.d/handler_email.json
添加以下行,替换
email@address.com与您要收到通知的电子邮件地址。根据您的邮件服务器设置,将此设置为Sensu主服务器上用户的别名可能最为简单。此处理程序称为“电子邮件”,将使用邮件实用程序向指定的电子邮件地址发送包含主题“sensu event”的警报电子邮件。
{
"handlers": {
"email": {
"type": "pipe",
"command": "mail -s 'sensu event' email@address.com"
}
}
}
编辑
check_apache.json。
sudo vi /etc/sensu/conf.d/check_apache.json
与在
apache_check块中的
电子邮件处理程序中添加新的
处理程序行。
{
"checks": {
"apache_check": {
"command": "/etc/sensu/plugins/check-apache.rb",
"interval": 60,
"handlers": ["default", "email"],
"subscribers": [ "ALL" ]
}
}
}
重新启动sensu-api和sensu-server。
sudo service sensu-api restart && sudo service sensu-server restart
再次停止Apache服务以测试电子邮件警报。你应该每60秒得到一个。
sudo service apache2 stop
您的电子邮件应类似于以下内容:
Return-Path: <sensu@sensu-master>
...
Subject: sensu event
To: <alerts@sensu-master.com>
...
From: sensu@sensu-master (Sensu Monitoring Framework)
{"id":"481c85c4-485d-4f25-b835-cea5aef02c69","client":{"name":"Sensu-Master-Server","address":"localhost","subscriptions":["ALL"],"version":"0.13.1","timestamp":1411681990},"check":{"command":"/etc/sensu/plugins/check-apache.rb","interval":60,"handlers":["default","email"],"subscribers":["ALL"],"name":"apache_check","issued":1411682001,"executed":1411682001,"duration":0.023,"output":"WARNING - Apache daemon is NOT running\n","status":1,"history":["0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","1"]},"occurrences":1,"action":"create"}
再次启动Apache服务以停止接收电子邮件警报。
sudo service apache2 start
结论
Sensu是一个多功能的监视工具,它的插件和您可以为其编写的自定义脚本。你也可以创建处理程序几乎做任何事情与数据。继续探索,让它适合你。