Sensu 监控入门

这个开源解决方案可以简单高效地监控您的云基础设施。
356 位读者喜欢这篇文章。
What's new in OpenStack in 2016: A look at the Newton release

Opensource.com

Sensu 是一个开源基础设施和应用程序监控解决方案,它可以监控服务器、服务和应用程序的健康状况,并通过第三方集成发送警报和通知。Sensu 使用 Ruby 编写,可以使用 RabbitMQRedis 来处理消息。它使用 Redis 存储数据。

如果您想以简单高效的方式监控您的云基础设施,Sensu 是一个不错的选择。它可以与您的组织可能已经使用的许多现代 DevOps 堆栈集成,例如 SlackHipChatIRC,甚至可以使用 PagerDuty 发送移动/寻呼机警报。

Sensu 的 模块化架构 意味着每个组件都可以安装在同一台服务器上或完全不同的机器上。

架构

Sensu 的主要通信机制是传输(Transport)。每个 Sensu 组件都必须连接到传输才能相互发送消息。传输可以使用 RabbitMQ(生产环境推荐)或 Redis。

Sensu 服务器处理事件数据并采取行动。它注册客户端并使用过滤器、变异器和处理程序处理检查结果和监控事件。服务器将检查定义发布到客户端,Sensu API 提供 RESTful API,从而可以访问监控数据和核心功能。

Sensu 客户端 执行由 Sensu 服务器调度的检查或本地检查定义。Sensu 使用数据存储 (Redis) 来保存所有持久性数据。最后,Uchiwa 是与 Sensu API 通信的 Web 界面。

sensu_system.png

安装 Sensu

先决条件

  • 一台 Linux 安装,用作服务器节点(本文我使用 CentOS 7)

  • 一台或多台 Linux 机器进行监控(客户端)

服务器端

Sensu 需要安装 Redis。要安装 Redis,请启用 EPEL 存储库

$ sudo yum install epel-release -y

然后安装 Redis

$ sudo yum install redis -y

修改 /etc/redis.conf 以禁用保护模式,监听每个接口,并设置密码

$ sudo sed -i 's/^protected-mode yes/protected-mode no/g' /etc/redis.conf
$ sudo sed -i 's/^bind 127.0.0.1/bind 0.0.0.0/g' /etc/redis.conf
$ sudo sed -i 's/^# requirepass foobared/requirepass password123/g' /etc/redis.conf

启用并启动 Redis 服务

$ sudo systemctl enable redis
$ sudo systemctl start redis

Redis 现在已安装完毕,可以供 Sensu 使用。

现在让我们安装 Sensu。

首先,配置 Sensu 存储库并安装软件包

$ sudo tee /etc/yum.repos.d/sensu.repo << EOF
[sensu]
name=sensu
baseurl=https://sensu.global.ssl.fastly.net/yum/\$releasever/\$basearch/
gpgcheck=0
enabled=1
EOF

$ sudo yum install sensu uchiwa -y

让我们为 Sensu 创建最少的配置文件

$ sudo tee /etc/sensu/conf.d/api.json << EOF
{
  "api": {
	"host": "127.0.0.1",
	"port": 4567
  }
}
EOF

接下来,配置 sensu-api 以监听 localhost,端口为 4567

$ sudo tee /etc/sensu/conf.d/redis.json << EOF
{
  "redis": {
	"host": "<IP of server>",
	"port": 6379,
	"password": "password123"
  }
}
EOF


$ sudo tee /etc/sensu/conf.d/transport.json << EOF
{
  "transport": {
	"name": "redis"
  }
}
EOF

在这两个文件中,我们将 Sensu 配置为使用 Redis 作为传输机制以及 Redis 将监听的地址。客户端需要直接连接到传输机制。每台客户端机器都需要这两个文件。

$ sudo tee /etc/sensu/uchiwa.json << EOF
{
   "sensu": [
        {
        "name": "sensu",
        "host": "127.0.0.1",
        "port": 4567
        }
   ],
   "uchiwa": {
        "host": "0.0.0.0",
        "port": 3000
   }
}
EOF

在这个文件中,我们将 Uchiwa 配置为监听每个接口 (0.0.0.0) 上的端口 3000。我们还将 Uchiwa 配置为使用 sensu-api(已配置)。

出于安全原因,请更改您刚刚创建的配置文件的所有者

$ sudo chown -R sensu:sensu /etc/sensu

启用并启动 Sensu 服务

$ sudo systemctl enable sensu-server sensu-api sensu-client
$ sudo systemctl start sensu-server sensu-api sensu-client
$ sudo systemctl enable uchiwa
$ sudo systemctl start uchiwa

尝试访问 Uchiwa 网站:http://<服务器 IP 地址>:3000

对于生产环境,建议运行 RabbitMQ 集群作为传输,而不是 Redis(生产环境也可以使用 Redis 集群),并运行多个 Sensu Server 和 API 实例以实现负载均衡和高可用性。

Sensu 现在已安装完成。现在让我们配置客户端。

客户端

要添加新客户端,您需要在客户端机器上通过创建文件 /etc/yum.repos.d/sensu.repo 来启用 Sensu 存储库。

$ sudo tee /etc/yum.repos.d/sensu.repo << EOF
[sensu]
name=sensu
baseurl=https://sensu.global.ssl.fastly.net/yum/\$releasever/\$basearch/
gpgcheck=0
enabled=1
EOF

启用存储库后,安装软件包 Sensu

$ sudo yum install sensu -y

要配置 sensu-client,请创建与服务器机器中相同的 redis.jsontransport.json,以及 client.json 配置文件

$ sudo tee /etc/sensu/conf.d/client.json << EOF
{
  "client": {
        "name": "rhel-client",
        "environment": "development",
        "subscriptions": [
        "frontend"
        ]
  }
}
EOF

在 name 字段中,指定一个名称来标识此客户端(通常是主机名)。environment 字段可以帮助您进行过滤,subscription 定义客户端将执行哪些监控检查。

最后,启用并启动服务,并在 Uchiwa 中检查,因为新客户端将自动注册

$ sudo systemctl enable sensu-client
$ sudo systemctl start sensu-client

Sensu 检查

Sensu 检查有两个组成部分:插件和定义。

Sensu 与 Nagios 检查插件规范 兼容,因此任何用于 Nagios 的检查都可以直接使用,无需修改。检查是可执行文件,由 Sensu 客户端运行。

检查定义让 Sensu 知道如何、在哪里以及何时运行插件。

客户端

让我们在客户端机器上安装一个检查插件。请记住,此插件将在客户端上执行。

启用 EPEL 并安装 nagios-plugins-http

$ sudo yum install -y epel-release 
$ sudo yum install -y nagios-plugins-http

现在让我们手动执行插件来探索它。尝试检查客户端机器上运行的 Web 服务器的状态。它应该会失败,因为我们没有运行 Web 服务器

$ /usr/lib64/nagios/plugins/check_http -I 127.0.0.1
connect to address 127.0.0.1 and port 80: Connection refused
HTTP CRITICAL - Unable to open TCP socket

正如预期的那样,它失败了。检查执行的返回代码

$ echo $?
2

Nagios 检查插件规范为插件执行定义了四个返回代码

插件返回代码

状态

0

正常 (OK)

1

警告 (WARNING)

2

严重 (CRITICAL)

3

未知 (UNKNOWN)

有了这些信息,我们现在可以在服务器上创建检查定义。

服务器端

在服务器机器上,创建文件 /etc/sensu/conf.d/check_http.json

{
  "checks": {
    "check_http": {
      "command": "/usr/lib64/nagios/plugins/check_http -I 127.0.0.1",
      "interval": 10,
      "subscribers": [
        "frontend"
      ]
    }
  }
}

在 command 字段中,使用我们之前测试过的命令。Interval 将告诉 Sensu 此检查应多久执行一次(以秒为单位)。最后,subscribers 将定义将在哪些客户端上执行检查。

重启 sensu-api 和 sensu-server,并确认 Uchiwa 中提供了新检查。

$ sudo systemctl restart sensu-api sensu-server

sensu_api_server.png

下一步是什么?

Sensu 是一个功能强大的工具,本文仅介绍了它能做的事情的冰山一角。请参阅文档以了解更多信息,并访问 Sensu 网站以了解有关 Sensu 社区的更多信息。

User profile image.
Michael Zamot 是一位开源爱好者,他的热情始于 2004 年,当时他发现了 Linux。从那时起,他一直在使用各种开源项目,包括 Linux、OpenStack、OpenShift/Kubernetes 等等,并通过教学、举办研讨会以及提供技术支持和指导来参与社区活动。

评论已关闭。

Creative Commons License本作品根据 Creative Commons Attribution-Share Alike 4.0 International License 获得许可。
© . All rights reserved.