如何在 Ubuntu 14.04 上配置 Sensu Monitoring、RabbitMQ 和 Redis

介绍

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

Sensu将检查脚本的输出连接到处理脚本,以创建一个强大的监控和警报系统。检查脚本可以运行在许多节点上,并报告是否满足某些条件,例如Apache正在运行。

检查脚本和处理脚本都运行在Sensu主服务器上,该服务器负责在Sensu客户端服务器之间进行检查执行并处理检查结果。

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

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

前提条件

为了设置 Sensu,您将需要:

  • 一个主节点 Droplet 运行 ** Ubuntu 14.04 . 这是您将使用的节点来查看所有监控数据。

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

1adduser username

这将创建用户和相应的家庭目录和组。您将被要求为新用户设置密码并确认密码。您还将被要求输入用户信息。

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

1visudo

在):

1# User privilege specification
2root ALL=(ALL:ALL) ALL
3username ALL=(ALL:ALL) ALL

保存文件并切换到新用户。

1su - username

更新系统包并升级它们。

1sudo apt-get update && sudo apt-get -y upgrade

第一步 - 安装在主机上

首先,我们将设置Sensu主服务器,这需要RabbitMQ、Redis、Sensu本身以及Uchiwa仪表板,以及一些支持的软件。

将 RabbitMQ 源添加到 APT 源列表中。

1echo "deb http://www.rabbitmq.com/debian/ testing main" | sudo tee -a /etc/apt/sources.list.d/rabbitmq.list

下载并添加 RabbitMQ 的签名密钥。

1curl -L -o ~/rabbitmq-signing-key-public.asc http://www.rabbitmq.com/rabbitmq-signing-key-public.asc
2
3sudo apt-key add ~/rabbitmq-signing-key-public.asc

安装RabbitMQ和Erlang。

1sudo apt-get update && sudo apt-get install -y rabbitmq-server erlang-nox

RabbitMQ 服务应该自动启动,如果没有,请使用以下命令启动。

1sudo service rabbitmq-server start

Sensu 使用 SSL 来确保其组件与 RabbitMQ 之间的安全通信。尽管可以使用 Sensu 而无需 SSL,但它很不受欢迎。 要生成证书,请下载 Sensu 的证书生成器到 /tmp 目录并生成 SSL 证书。

1cd /tmp && wget http://sensuapp.org/docs/0.13/tools/ssl_certs.tar && tar -xvf ssl_certs.tar
2
3cd ssl_certs && ./ssl_certs.sh generate

创建一个RabbitMQ SSL目录并复制证书。

1sudo 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 文件。

1sudo vi /etc/rabbitmq/rabbitmq.config

将下列行添加到文件中. 此操作将 RabbitMQ SSL 倾听器配置为在端口 5671 上聆听并使用生成的证书权限和服务器证书。

 1[
 2    {rabbit, [
 3    {ssl_listeners, [5671]},
 4    {ssl_options, [{cacertfile,"/etc/rabbitmq/ssl/cacert.pem"},
 5                   {certfile,"/etc/rabbitmq/ssl/cert.pem"},
 6                   {keyfile,"/etc/rabbitmq/ssl/key.pem"},
 7                   {verify,verify_peer},
 8                   {fail_if_no_peer_cert,true}]}
 9  ]}
10].

重新启动 RabbitMQ。

1sudo service rabbitmq-server restart

创建一个RabbitMQ虚拟主机和用户为Sensu。更改密码(pass)。当您配置Sensu服务器和客户端进行监控时,您将需要此密码。

1sudo rabbitmqctl add_vhost /sensu
2sudo rabbitmqctl add_user sensu pass
3sudo rabbitmqctl set_permissions -p /sensu sensu ".*" ".*" ".*"

安装Redis。

1sudo apt-get -y install redis-server

Redis 服务应该自动启动,如果没有,请使用以下命令启动(请注意,如果 Redis 已经运行,您将收到错误信号:)。

1sudo service redis-server start

添加源和键来安装 Sensu。

1wget -q http://repos.sensuapp.org/apt/pubkey.gpg -O- | sudo apt-key add -
2
3echo "deb http://repos.sensuapp.org/apt sensu main" | sudo tee -a /etc/apt/sources.list.d/sensu.list

安装Sensu和Uchiwa(Uchiwa是监控仪表板)。

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

Sensu需要安全的连接信息到RabbitMQ. 创建一个SSL目录为Sensu,并复制生成的证件。

1sudo 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 文件夹中创建单个配置文件,以便更容易阅读和管理。除非您已在单独的机器上配置了配置文件中提到的服务和组件,否则您可以将下面的大多数样本值保持不变。

创建和编辑 rabbitmq.json 文件。

1sudo vi /etc/sensu/conf.d/rabbitmq.json

添加以下行,这将允许 Redis 使用您的 SSL 证书安全地连接到 RabbitMQ 实例。

 1{
 2  "rabbitmq": {
 3    "ssl": {
 4      "cert_chain_file": "/etc/sensu/ssl/cert.pem",
 5      "private_key_file": "/etc/sensu/ssl/key.pem"
 6    },
 7    "host": "localhost",
 8    "port": 5671,
 9    "vhost": "/sensu",
10    "user": "sensu",
11    "password": "pass"
12  }
13}

创建和编辑 redis.json 文件。

1sudo vi /etc/sensu/conf.d/redis.json

添加以下行,其中包括 Sensu 访问 Redis 实例的连接信息。

1{
2  "redis": {
3    "host": "localhost",
4    "port": 6379
5  }
6}

创建和编辑 api.json 文件。

1sudo vi /etc/sensu/conf.d/api.json

添加以下行,其中包括 Sensu 访问 API 服务的连接信息。

1{
2  "api": {
3    "host": "localhost",
4    "port": 4567
5  }
6}

创建和编辑 uchiwa.json 文件。

1sudo vi /etc/sensu/conf.d/uchiwa.json

添加以下行. 这些包括访问 Sensu API 的 Uchiwa 仪表板的连接信息. 您可以选择在 uchiwa 区块中创建用户名和密码以进行仪表板身份验证。

 1{
 2    "sensu": [
 3        {
 4            "name": "Sensu",
 5            "host": "localhost",
 6            "ssl": false,
 7            "port": 4567,
 8            "path": "",
 9            "timeout": 5000
10        }
11    ],
12    "uchiwa": {
13        "port": 3000,
14        "stats": 10,
15        "refresh": 10000
16    }
17}

在本示例中,我们将将Sensu主服务器监视器作为客户端,因此,创建和编辑 client.json 文件。

1sudo vi /etc/sensu/conf.d/client.json

添加以下行并编辑 Sensu 客户端的名称值. 这是您将在 Uchiwa 仪表板中看到的服务器名称。

您可以将地址值留为 localhost,因为我们正在监控这个服务器. 我们将在以后再次创建类似的文件,以便每个客户端主机进行监控。

1{
2  "client": {
3    "name": "server",
4    "address": "localhost",
5    "subscriptions": [ "ALL" ]
6  }
7}

允许 Sensu 服务自动启动。

1sudo update-rc.d sensu-server defaults
2sudo update-rc.d sensu-client defaults
3sudo update-rc.d sensu-api defaults
4sudo update-rc.d uchiwa defaults

开始使用 Sensu 服务。

1sudo service sensu-server start
2sudo service sensu-client start
3sudo service sensu-api start
4sudo service uchiwa start

在此时,您可以访问Sensu在 http://ip-address:3000。

Sensu default dashboard

步骤三:安装在客户端

您将需要在每个客户端机器上安装Sensu,以便监控。

仍在 Sensu 主服务器上**,将 SSL 证书复制到客户端服务器的 `/tmp 文件夹中使用 SCP. 以客户端服务器的 sudo 用户和 IP 地址替换下面的用户和 IP。

1scp /tmp/ssl_certs/client/cert.pem /tmp/ssl_certs/client/key.pem user@ip:/tmp

**在要监控的客户端上,添加 Sensu 密钥和源。

1wget -q http://repos.sensuapp.org/apt/pubkey.gpg -O- | sudo apt-key add -
2echo "deb http://repos.sensuapp.org/apt sensu main" | sudo tee -a /etc/apt/sources.list.d/sensu.list

安装感知。

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

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

1sudo mkdir -p /etc/sensu/ssl && sudo cp /tmp/cert.pem /tmp/key.pem /etc/sensu/ssl

创建和编辑 rabbitmq.json 文件。

1sudo vi /etc/sensu/conf.d/rabbitmq.json

添加以下行: 编辑主机值以使用RabbitMQ服务器的IP地址,即Sensu主服务器的IP地址. 用户和密码值应该是您在Sensu主服务器上的RabbitMQ虚拟主机设置的值。

 1{
 2  "rabbitmq": {
 3    "ssl": {
 4      "cert_chain_file": "/etc/sensu/ssl/cert.pem",
 5      "private_key_file": "/etc/sensu/ssl/key.pem"
 6    },
 7    "host": "1.1.1.1",
 8    "port": 5671,
 9    "vhost": "/sensu",
10    "user": "sensu",
11    "password": "pass"
12  }
13}

通过创建和编辑 client.json 文件,为此 Sensu 服务器提供配置信息。

1sudo vi /etc/sensu/conf.d/client.json

您应该将名称值编辑为您希望这个服务器在Uchiwa仪表板中被称为什么。

您可以将地址值设置为 localhost,因为我们正在监控这个 Sensu 客户端服务器。

1{
2  "client": {
3    "name": "client1",
4    "address": "localhost",
5    "subscriptions": [ "ALL" ]
6  }
7}

启用并启动客户端。

1sudo update-rc.d sensu-client defaults
2
3sudo service sensu-client start

您现在应该在 Sensu 仪表板上的客户端选项卡上看到客户端。

步骤四:设置检查

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

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

1sudo apt-get install -y apache2

Apache 应该在两个服务器上默认运行。

在安装 sensu 插件宝石之前,请确保您有所有所需的库。安装 Ruby 库和构建必备库在 Sensu 主服务器和 Sensu 客户端服务器上。

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

在 Sensu 主服务器和 Sensu 客户端服务器上安装 sensu 插件宝石。

1sudo gem install sensu-plugin

在 Sensu 插件文件夹中创建 check-apache.rb 文件,并在 Sensu 主服务器和 Sensu 客户端服务器上修改文件权限。

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

在 Sensu 主服务器和 Sensu 客户端服务器上编辑 check-apache.rb 文件。

1sudo vi /etc/sensu/plugins/check-apache.rb

添加以下行,脚本检查Apache的过程。

 1#!/usr/bin/env ruby
 2
 3procs = `ps aux`
 4running = false
 5procs.each_line do |proc|
 6  running = true if proc.include?('apache2')
 7end
 8if running
 9  puts 'OK - Apache daemon is running'
10  exit 0
11else
12  puts 'WARNING - Apache daemon is NOT running'
13  exit 1
14end

仅在 Sensu 主服务器上创建和编辑 check_apache.json 文件。

1sudo vi /etc/sensu/conf.d/check_apache.json

添加以下行,以运行脚本,以每60秒检查Apache。

1{
2  "checks": {
3    "apache_check": {
4      "command": "/etc/sensu/plugins/check-apache.rb",
5      "interval": 60,
6      "subscribers": [ "ALL" ]
7    }
8  }
9}

在 Sensu 主服务器上重新启动 Sensu 服务器和 API。

1sudo service sensu-server restart && sudo service sensu-api restart

在 Sensu 客户端服务器上重新启动 Sensu 客户端。

1sudo service sensu-client restart

几分钟后,你应该看到检查在Sensu仪表板的检查选项卡上出现。

在任何一个服务器上停止Apache服务,以测试脚本是否工作。

1sudo service apache2 stop

在几分钟后,应在 事件 仪表板上显示警报。 点击警报以查看更多信息,并采取行动,如停止或解决它。

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

Sensu dashboard clients

启动 Apache 服务以停止警告。

1sudo service apache2 start

步骤五 - 设置一个处理器

Handlers可以根据事件发送通知电子邮件或发送数据给Graphite等其它应用程序. 在这里, 我们将创建一个处理器, 如果 Apache 检查失败, 发送电子邮件 。 请注意, 您的服务器需要配置才能发送电子邮件 。 您可以使用此 [Postfix tutorial] (https://andsky.com/tech/tutorials/how-to-install-and-setup-postfix-on-ubuntu-14-04] 来设置简单的邮件服务器 。 (您可能想要在 Sensu 主服务器上发送邮件给用户, 以便进行最简单的配置 。)

在 Sensu 主服务器上,创建和编辑 handler_email.json 文件。

1sudo vi /etc/sensu/conf.d/handler_email.json

添加以下行,取代 [email protected] 以您想要接收通知的电子邮件地址。 取决于您的邮件服务器设置,最容易将此设置为 Sensu 主服务器上的用户名称。 此处理器称为电子邮件,并将使用邮件实用程序向指定电子邮件地址发送sensu 事件主题的警告电子邮件。

1{
2  "handlers": {
3    "email": {
4      "type": "pipe",
5      "command": "mail -s 'sensu event' [email protected]"
6    }
7  }
8}

编辑 check_apache.json。

1sudo vi /etc/sensu/conf.d/check_apache.json

将新的处理器行添加到 apache_check 块中的电子邮件处理器中。

 1{
 2  "checks": {
 3    "apache_check": {
 4      "command": "/etc/sensu/plugins/check-apache.rb",
 5      "interval": 60,
 6      "handlers": ["default", "email"],
 7      "subscribers": [ "ALL" ]
 8    }
 9  }
10}

重新启动 sensu-api 和 sensu-server。

1sudo service sensu-api restart && sudo service sensu-server restart

停止 Apache 服务再次测试电子邮件警报. 您应该每 60 秒收到一次。

1sudo service apache2 stop

您的电子邮件应该看起来有点如下:

1Return-Path: <sensu@sensu-master>
2...
3Subject: sensu event
4To: <[email protected]>
5...
6From: sensu@sensu-master (Sensu Monitoring Framework)
7
8{"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 服务以停止接收电子邮件通知。

1sudo service apache2 start

结论

Sensu是一个多功能的监控工具,其插件和自定义脚本,你可以为它写。

Published At
Categories with 技术
comments powered by Disqus