如何在Ubuntu14.04上配置Sensu监控、RabbitMQ和Redis

来自菜鸟教程
跳转至:导航、​搜索

介绍

Sensu 是一个用 Ruby 编写的监控工具,它使用 RabbitMQ 作为消息代理,使用 Redis 存储数据。 它非常适合监控云环境。

Sensu 将“检查”脚本的输出与“处理程序”脚本连接起来,以创建强大的监控和警报系统。 检查脚本可以在多个节点上运行,并报告是否满足某个条件,例如 Apache 正在运行。 处理程序脚本可以采取诸如发送警报电子邮件之类的操作。

“检查”脚本和“处理程序”脚本都运行在 Sensu 主服务器上,负责协调 Sensu 客户端服务器之间的检查执行和处理检查结果。 如果检查触发了事件,则将其传递给处理程序,该处理程序将采取指定的操作。

这方面的一个示例是监控 Apache Web 服务器状态的检查。 检查将在 Sensu 客户端上运行。 如果检查报告服务器停机,Sensu 服务器会将事件传递给处理程序,该处理程序可以触发发送电子邮件或收集停机时间指标等操作。

在本教程中,我们将安装和配置一台 Sensu 主服务器和一台 Sensu 客户端服务器。

先决条件

为了设置 Sensu,您需要:

  • 一个运行 Ubuntu 14.04 的主节点 Droplet。 这是您将用来查看所有监控数据的节点。
  • 至少要监控一个额外的节点,运行 Ubuntu 14.04

在每个 Droplet 上创建一个 sudo 用户。 首先,使用 adduser 命令创建用户,将用户名替换为您要使用的名称。

adduser username

这将创建用户和适当的主目录和组。 系统将提示您为新用户设置密码并确认密码。 您还将被提示输入用户信息。 确认用户信息以创建用户。

接下来,使用 visudo 命令授予用户 sudo 权限。

visudo

这将打开 /etc/sudoers 文件。 在 User privilege specification 部分为创建的用户添加另一行,使其看起来像这样(使用您选择的用户名而不是 username):

# 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 已经在运行,您将收到错误消息:“Starting redis-server: failed。”)

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 实例。 userpass 应该是您为 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

添加以下行。 其中包括用于访问 Sensu API 的 Uchiwa 仪表板的连接信息。 您可以选择在 uchiwa 块中创建用户名和密码以进行仪表板身份验证。 如果您希望仪表板可公开访问,请保持原样。

{
    "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 客户端的 name 值。 这是您将在 Uchiwa 仪表板中看到的服务器的名称。 名称不能有空格或特殊字符。

您可以将 address 值保留为 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://ip-address:3000 访问 Sensu。

第三步——在客户端安装

您需要在每台要监控的客户端计算机上安装 Sensu。

在 Sensu 主服务器 上仍然 时,使用 SCP 将 SSL 证书复制到客户端服务器的 /tmp 文件夹。 将下面的 userIP 替换为客户端服务器的 sudo 用户和 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

安装森苏。

sudo apt-get update && sudo apt-get -y install sensu

您需要向客户端提供到 RabbitMQ 的连接信息。 为 Sensu 创建一个 SSL 目录并复制从 Sensu 主服务器复制的 /tmp 文件夹中的证书。

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

添加以下行。 编辑 host 值以使用 RabbitMQ 服务器的 IP 地址; 即Sensu主服务器的IP地址。 userpassword 值应该是您在 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

添加以下行。 您应该将 name 值编辑为您希望在 Uchiwa 仪表板中调用此服务器的名称。 名称不能有空格或特殊字符。

您可以将 address 值设置为 localhost,因为我们正在监视此 Sensu 客户端服务器。

{
  "client": {
    "name": "client1",
    "address": "localhost",
    "subscriptions": [ "ALL" ]
  }
}

启用并启动客户端。

sudo update-rc.d sensu-client defaults
 
sudo service sensu-client start

您现在应该在 Sensu Dashboard 的 Clients 选项卡上看到该客户端。

第四步——设置支票

现在 Sensu 正在运行,我们需要在两台服务器上添加检查。 我们将创建一个 Ruby 脚本来检查 Apache 是否正在运行。

如果您没有安装 Apache,现在将它安装在 Sensu 主服务器和 Sensu 客户端服务器上。

sudo apt-get install -y apache2

默认情况下,Apache 应该在两台服务器上运行。

在安装 sensu-plugin gem 之前,请确保您拥有所有必需的库。 在 Sensu 主服务器和 Sensu 客户端服务器上安装 Ruby 库和 build-essential 库。

sudo apt-get install -y ruby ruby-dev build-essential

在 Sensu 主服务器和 Sensu 客户端服务器上安装 sensu-plugin gem。

sudo gem install sensu-plugin

在 Sensu plugins 文件夹中创建一个 check-apache.rb 文件,修改 Sensu 主服务器和 Sensu 客户端服务器的文件权限。

sudo touch /etc/sensu/plugins/check-apache.rb && sudo chmod 755 /etc/sensu/plugins/check-apache.rb

编辑 Sensu 主服务器和 Sensu 客户端服务器上的 check-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 仪表板的“检查”选项卡上。

停止任一服务器上的 Apache 服务以测试脚本是否正常工作。

sudo service apache2 stop

几分钟后,Events 仪表板上应该会显示一条警报。 单击警报以查看更多信息并采取措施,例如静音或解决它。

在此图像中,Apache 已在客户端服务器上停止。 这是 Clients 页面。

启动 Apache 服务以停止警告。

sudo service apache2 start

第五步——设置处理程序

处理程序可以根据事件发送通知电子邮件或将数据发送到 Graphite 等其他应用程序。 在这里,我们将创建一个在 Apache 检查失败时发送电子邮件的处理程序。 请注意,您的服务器需要配置为发送电子邮件。 你可以使用这个Postfix Tutorial来搭建一个简单的邮件服务器。 (您可能希望将邮件发送给 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 块中添加新的 handlers 行和 email 处理程序。

{
  "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 是一个多功能的监控工具,它的插件和你可以为它编写的自定义脚本。 您还可以创建处理程序来对数据执行几乎任何操作。 继续探索,让它适合您。