如何在CentOS7上使用Alerta监控Zabbix警报
介绍
Alerta 是一个 Web 应用程序,用于整合和删除来自多个监控系统的警报并在单个屏幕上可视化它们。 Alerta 可以与许多知名的监控工具集成,如 Nagios、Zabbix、Sensu、InfluxData Kapacitor 等。
在本教程中,您将设置 Alerta 并将其配置为显示来自 Zabbix 监控系统的通知。
先决条件
要遵循本教程,您将需要:
- 按照CentOS 7初始服务器设置指南设置两台CentOS 7服务器,包括一个sudo非root用户和一个防火墙。
- 在您将运行 Zabbix 的第一台 CentOS 服务器上,安装以下组件: Apache、MySQL 和 PHP,按照教程如何在 CentOS 7 上安装 Linux、Apache、MySQL、PHP (LAMP) 堆栈。 Zabbix 服务器,按照教程如何安装和配置 Zabbix 以安全地监控 CentOS 7 上的远程服务器及其配置它的先决条件进行安装。
- 在第二个 CentOS 服务器上,我们将在本教程中安装 Alerta,安装以下组件: Nginx,按照教程 How To Install Nginx on CentOS 7 安装。 MongoDB,按照教程如何在 CentOS 7 上安装 MongoDB 进行安装。
- 如果您希望按照步骤 6 中的说明保护 Alerta Web 界面,您需要一个属于 GitHub 组织的 GitHub 帐户。 按照本教程创建一个GitHub组织。
第 1 步 — 安装 Alerta 的 API 服务器
Alerta 由服务器和 Web 界面组成。 Alerta 服务器负责存储和处理警报,并通过 API 提供 JSON。 Alerta Web 界面允许您在浏览器中查看警报列表,因此您不必自己解释 JSON。 我们将在安装了 MongoDB 和 Nginx 的服务器上安装这两个组件。 在本教程中,我们将这台机器称为 Alerta 服务器。 以非 root 用户身份登录到这台机器:
ssh sammy@your_alerta_server_ip
在我们安装任何 Alerta 组件之前,我们需要安装 pip
、Python 包管理器和 Python 开发文件。 我们还需要安装 Git,以便我们可以从 GitHub 检索 Alerta 的源代码。
运行以下命令来安装这些软件包:
sudo yum install python-pip python-devel gcc git
安装这些软件包后,我们就可以安装 Alerta。
首先,我们将使用 pip
安装 Alerta 的服务器:
sudo pip install alerta-server
通过在开发模式下运行 Alerta 服务器来检查安装:
sudo alertad
您应该会看到如下内容:
Output * Running on http://0.0.0.0:8080/ (Press CTRL+C to quit)
注意:如果您使用FirewallD,请将其配置为允许连接到8080
端口:
sudo firewall-cmd --zone=public --permanent --add-port=8080/tcp sudo firewall-cmd --reload
您可以在 如何在 CentOS 7 上使用 FirewallD 设置防火墙中了解有关 Firewalld 的更多信息。
现在您可以在浏览器中打开 http://your_alerta_server_ip:8080
并查看 Alerta API 网页,该网页将向您展示一些使用示例。
确认服务器正在运行后,按 CTRL+C
停止服务器。 我们将很快将其配置为服务。
安装了 Alerta API 服务器,让我们安装 Web 控制台。
第 2 步 — 安装 Alerta Web UI
Alerta 有一个仪表板,可在您的浏览器中显示消息。 它在表格中显示警报消息,因此您可以轻松阅读和排序它们。 您可以配置视图以满足您的需求:您可以过滤消息或按任何字段对其进行排序。 此外,您可以查看每条消息的详细信息。 我们将把它安装在我们安装 Alerta API 服务器的同一台服务器上。
首先从 Github 获取源代码:
git clone https://github.com/alerta/angular-alerta-webui.git
然后将应用程序文件复制到您的 Web 服务器目录中:
sudo mkdir -p /var/www/html/ sudo cp -r angular-alerta-webui/app/* /var/www/html/
默认情况下,Alerta 的 Web 界面配置为与在端口 8080
上运行的开发服务器 API 进行通信。 我们将通过在我们服务器上的 /api
端点上提供 Alerta Server 的 API 来将其设置为生产使用,并提供来自同一域的 Web 控制台静态内容,这让我们避免了 的问题CORS 或 HTTPS 混合内容错误。
打开【X9X】【X13X】配置文件:
sudo vi /var/www/html/config.js
并将 endpoint
设置为 /api
:
/var/www/html/config.js
'use strict'; angular.module('config', []) .constant('config', { 'endpoint' : "/api", 'provider' : "basic", // google, github, gitlab, keycloak or basic ...
将其他选项保留为默认值。 我们将在本教程稍后配置 OAuth 授权时更改其中的一些。
现在所有必要的 Alerta 组件都已安装。 我们只需要设置它们一起工作。
第 3 步 — 在 Nginx 后面使用 uWSGI 运行 Alerta。
我们可以使用 alertad
开发服务器进行一些快速测试,但它不适合生产使用,所以让我们修复它。 由于 Alerta 是用 Python 编写的,因此我们需要使用 WSGI 服务器来运行它。 在本教程中,我们将在 http://your_alerta_server_ip/api
上将 Alerta 作为代理在 Nginx 后面的 uWSGI 应用程序运行。
首先,使用 Python 包管理器安装 uWSGI 应用服务器:
sudo pip install uwsgi
接下来,创建 wsgi.py
文件,应用程序服务器使用该文件与我们的应用程序进行通信。 在编辑器中打开文件:
sudo vi /var/www/wsgi.py
将以下行添加到文件中,它告诉 uWSGI 如何调用 Alerta 应用程序:
/var/www/wsgi.py
from alerta.app import app
接下来,我们需要自己配置 uWSGI 服务器。 创建一个 uWSGI 可以存储其套接字文件的目录,并确保 Nginx 进程可以访问它:
sudo mkdir /var/run/alerta sudo chown -R nginx.nginx /var/run/alerta/
然后创建配置文件 /etc/uwsgi.ini
并在编辑器中打开它:
sudo vi /etc/uwsgi.ini
该文件指定应用程序的位置,以及与 Nginx 交互的套接字选项。
将以下行添加到文件中:
/etc/uwsgi.ini
[uwsgi] chdir = /var/www mount = /api=wsgi.py callable = app manage-script-name = true master = true processes = 5 logger = syslog:alertad socket = /var/run/alerta/uwsgi.sock chmod-socket = 664 uid = nginx gid = nginx vacuum = true die-on-term = true
您可以在 文档 中查看 uWSGI 选项的完整参考列表。
接下来,我们将为这个应用程序创建一个 Systemd 单元,以便我们可以使用 systemctl
命令控制它。
sudo vi /etc/systemd/system/alerta-app.service
该单元文件需要一些描述单元并定义其行为的配置指令。 将以下行添加到文件中:
/etc/systemd/system/alerta-app.service
[Unit] Description=uWSGI service for Alerta After=syslog.target [Service] ExecStart=/usr/bin/uwsgi --ini /etc/uwsgi.ini RuntimeDirectory=uwsgi Restart=always KillSignal=SIGQUIT Type=notify StandardError=syslog NotifyAccess=all [Install] WantedBy=multi-user.target
您可以在 这个 Systemd 教程 中找到有关这些设置以及如何使用 Systemd 单元的更多信息。
现在您可以运行 uWSGI 服务:
sudo systemctl start alerta-app
您可以通过运行检查状态:
systemctl status alerta-app
您将看到以下输出:
Output ● alerta-app.service - uWSGI service for Alerta Loaded: loaded (/etc/systemd/system/alerta-app.service; disabled; vendor preset: disabled) Active: active (running) since Fri 2017-04-07 12:15:21 EEST; 2min 25s ago Main PID: 15935 (uwsgi) Status: "uWSGI is ready" CGroup: /system.slice/alerta-app.service ├─15935 /usr/bin/uwsgi --ini /etc/uwsgi.ini ├─15946 /usr/bin/uwsgi --ini /etc/uwsgi.ini ├─15947 /usr/bin/uwsgi --ini /etc/uwsgi.ini ├─15948 /usr/bin/uwsgi --ini /etc/uwsgi.ini ├─15949 /usr/bin/uwsgi --ini /etc/uwsgi.ini └─15950 /usr/bin/uwsgi --ini /etc/uwsgi.ini
如您所见,该服务默认是禁用的,这意味着它不会自动启动。 启用它:
sudo systemctl enable alerta-app
最后,我们必须配置 Nginx 以将所有对 your_alerta_server_ip/api
的请求重定向到正在运行的 uWSGI 服务器,并使用 Nginx 为 Web 前端提供服务。
我们不会修改默认的 Nginx 配置文件,而是将 Alerta 配置放在它自己的文件中。
sudo vi /etc/nginx/conf.d/alerta.conf
将以下内容添加到文件中。 请务必将 server_name
的值替换为您的 Alerta 服务器的 IP 地址。
/etc/nginx/conf.d/alerta.conf
server { listen 80; server_name your_alerta_server_ip; location /api { try_files $uri @api; } location @api { include uwsgi_params; uwsgi_pass unix:/var/run/alerta/uwsgi.sock; proxy_set_header Host $host:$server_port; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } location / { root /var/www/html; } error_page 500 502 503 504 /50x.html; location = /50x.html { root /usr/share/nginx/html; } }
你可以在这个 tutorial 中找到更多关于 Nginx 服务器块的信息。
保存文件并退出编辑器。
接下来,测试 Nginx 配置以确保没有拼写错误或错误配置:
sudo nginx -t
如果您的配置没有错误,您将看到以下输出:
Output nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful
如果您看到不同的内容,请解决错误并重试。
现在您可以重新加载 Nginx 以应用新设置:
sudo nginx -s reload
在浏览器中打开 http://your_alerta_server_ip
链接并查看 Alerta 仪表板。
如果您在可公开访问的服务器上安装 Alerta,则应将其配置为需要身份验证。 让我们看一些方法来做到这一点。
第 4 步 — 使用基本身份验证保护 Alerta
默认情况下,任何知道 Alerta 服务器地址的人都可以查看任何消息。 这对于测试环境是可以接受的,但对于生产环境是不可接受的。 要强制验证,请打开 alertad.conf
配置文件:
sudo vi /etc/alertad.conf
将以下代码添加到文件中:
/etc/alertad.conf
AUTH_REQUIRED = True SECRET_KEY = 'secret_key'
将 SECRET_KEY
设置为您选择的随机字符串。 保存文件,退出编辑器,重启uWSGI服务:
sudo systemctl restart alerta-app
重新加载 Alerta Web UI 网页并在菜单中选择 Login 链接。 您将看到消息“请登录以继续”。 单击创建帐户链接并创建一个新帐户。 完成该过程后,您将可以访问 Alerta 仪表板。
启用身份验证后,您将需要一个 API 密钥来访问 Alerta API。 选择配置菜单并选择API密钥。
输入需要访问 API 的应用程序的名称。 对于本教程,输入 zabix。 然后从下拉列表中选择 read-write,然后单击 Create new API Key 按钮。 将创建新密钥,您将看到其详细信息。 复制此密钥; 你稍后会需要它。
或者,您可以设置 OAuth 身份验证并使用您的 GitHub 或 Google 凭据登录到 Alerta 用户界面。 如果基本认证够用,可以跳过下一步。
第 5 步 — 使用 OAuth 保护 Alerta(可选)
Alerta 的 Web UI 支持 Google、GitHub、Gitlab 和 Keycloak 的 OAuth 身份验证。 我们将配置通过 GitHub 帐户登录,因此您需要一个帐户才能继续。
首先,在 GitHub 上注册一个新应用程序。 登录到您的 GitHub 帐户并导航到 新应用程序页面。。
使用以下详细信息填写表格:
- 使用 Alerta 或合适的描述性名称填写 Application name。
- 对于 主页 URL,请使用
http://your_alerta_server_ip/
。 - 用
http://your_alerta_server_ip/
填写授权回调URL。 - 点击【X6X】注册应用【X30X】保存设置。
- 复制下一个屏幕上提供的 Client ID 和 Client Secret 值。
接下来,编辑 Alerta 配置以启用 OAuth 身份验证。 打开配置文件:
sudo vi /etc/alertad.conf
在文件末尾添加以下设置:
/etc/alertad.conf
OAUTH2_CLIENT_ID = 'your_github_client_id' OAUTH2_CLIENT_SECRET = 'your_github_client_secret' ALLOWED_GITHUB_ORGS = ['your_github_organization']
将您的 GitHub 客户端 ID、GitHub 客户端密码和 GitHub 组织分别用于这些值。
警告:如果您在命令中省略 GitHub 组织选项,任何 GitHub 用户都将能够登录到您的 Alerta 仪表板。 创建 GitHub 组织并将适当的用户添加到组织以限制访问。
保存文件,退出编辑器,重启uWSGI服务:
sudo systemctl restart alerta-app
然后更改 Web 界面的身份验证提供程序。 编辑其配置文件:
sudo vi /var/www/html/config.js
找到以下部分并将提供程序从 basic
更改为 github
,然后输入您的 GitHub 客户端 ID:
/var/www/html/config.js
... 'provider' : "github", 'client_id' : "INSERT-CLIENT-ID-HERE", ...
打开 http://your_alerta_server_ip
以访问 Alerta Web UI。 这次您将看到“请登录以继续”消息。 单击 Login 按钮登录,系统会要求您允许应用程序访问您的 GitHub 帐户。 允许访问后,您将登录。
现在我们可以运行一个简单的测试来检查 Alerta 是否设置并正常运行。
第 6 步 — 发送测试消息
我们将使用 Alerta 的统一命令行工具来发送测试警报。 首先,安装命令行客户端:
sudo pip install alerta
然后创建一个配置文件,定义您之前配置的 Alerta API 端点,以及您希望使用的 API 密钥。 在编辑器中创建一个新文件:
vi ~/.alerta.conf
将以下内容粘贴到文件中:
~/.alerta.conf
[DEFAULT] endpoint = http://your_alerta_server_ip/api key=your_alerta_api_key
使用您在步骤 4 中为 key
选项设置的 API 密钥。
现在我们可以发送一个测试警报:
alerta send --resource webserver01 --event down --environment Production --service Website01 --severity major --text "Web server 01 is down." --value ERROR
您将看到与此类似的输出:
Output1015fca2-eff6-441d-8c66-6abf9368b830 (indeterminate -> major)
在浏览器中访问 http://your_alerta_server_ip
,您将在仪表板上看到一条消息,如下图所示:
您可以单击消息以查看详细信息。
您的 Alerta 服务器已启动并等待新消息。 让我们配置我们的 Zabbix 监控系统以向 Alerta 发送警报。
第 7 步 — 安装 Zabbix-Alerta 网关
在这一步中,我们将修改我们的 Zabbix 监控系统以向 Alerta 发送通知消息。
以非 root 用户身份登录到您的 Zabbix 服务器机器:
ssh sammy@your_zabbix_server_ip
默认情况下,Zabbix 可以通过电子邮件、SMS 或 Jabber 消息发送通知,但您可以使用脚本添加新的通知处理程序。 Alerta 开发人员提供了一个现成的通知脚本。 要安装它,请克隆 zabbix-alerta 存储库并使用安装脚本安装它:
git clone https://github.com/alerta/zabbix-alerta.git cd zabbix-alerta sudo python setup.py install
然后在 Zabbix 存储警报脚本的目录中为 zabbix-alerta
脚本创建一个符号链接。 你可以在/etc/zabbix/zabbix_server.conf
配置文件中找到它的路径:
sudo grep -e '^AlertScriptsPath' /etc/zabbix/zabbix_server.conf
您将看到如下所示的输出:
OutputAlertScriptsPath=/usr/lib/zabbix/alertscripts
默认情况下,Zabbix 在 /usr/lib/zabbix/alertscripts
中查找脚本。 执行以下命令来创建符号链接:
sudo ln -s `which zabbix-alerta` /usr/lib/zabbix/alertscripts
让我们配置 Alerta 集成。 在 http://your_zabbix_server_ip/zabbix/
登录到您的 Zabbix Web 界面。
在主菜单中点击【X24X】管理【X42X】,选择【X56X】媒体类型【X71X】,点击右上角【X92X】创建媒体类型【X113X】按钮。
使用以下详细信息填写表格:
- 对于 名称,输入
Alerta
。 - 对于 Type,从下拉列表中选择 Script。
- 对于 脚本名称 ,输入
zabbix-alerta
。 - 对于 脚本参数 ,输入以下值:
- 确保选中 Enabled 复选框。
单击 Add 按钮以创建新的媒体类型。
然后为您的用户帐户添加新媒体。 在主菜单中选择Administration,然后选择Users。 单击您的用户名并选择 Media 选项卡。 输入以下详细信息
- 对于 Type,选择 Alerta。
- 对于 发送到 ,输入
http://your_alerta_server_ip/api;your_api_key
。
使用您在第 4 步中创建的 API 密钥。
单击 Update 按钮保存配置。
现在配置一个动作来发送消息。 在主菜单中选择Configuration,然后选择Actions。 单击创建动作按钮。
在 Action 选项卡上,将 Name 字段的值设置为 Forward to Alerta
。
在 操作选项卡 上,设置以下选项:
将默认主题设置为
{TRIGGER.STATUS}: {TRIGGER.NAME}
对于 默认消息 ,输入以下文本:
Default messageresource={HOST.NAME1} event={ITEM.KEY1} environment=Production severity={TRIGGER.SEVERITY} status={TRIGGER.STATUS} ack={EVENT.ACK.STATUS} service={TRIGGER.HOSTGROUP.NAME} group=Zabbix value={ITEM.VALUE1} text={TRIGGER.STATUS}: {TRIGGER.NAME} tags={EVENT.TAGS} attributes.ip={HOST.IP1} attributes.thresholdInfo={TRIGGER.TEMPLATE.NAME}: {TRIGGER.EXPRESSION} type=zabbixAlert dateTime={EVENT.DATE}T{EVENT.TIME}Z
Zabbix 在检测到问题时会以指定格式发送消息。 它将用相应的值替换大括号中的表达式。 所有这些字段都是 Alerta 接收警报并正确显示它所必需的。
接下来,通过单击 Operations 字段中的 New 创建一个新操作。 将以下值输入到表格中:
- 对于 发送给用户 ,输入
Your user name
。 - 对于 Send only to ,从下拉框中选择 Alerta。
然后选择 Recovery operations 选项卡并将 Default 消息更改为以下内容:
Recovery operationsresource={HOST.NAME1} event={ITEM.KEY1} environment=Production severity={TRIGGER.SEVERITY} status={TRIGGER.STATUS} ack={EVENT.ACK.STATUS} service={TRIGGER.HOSTGROUP.NAME} group=Zabbix value={ITEM.VALUE1} text={TRIGGER.STATUS}: {ITEM.NAME1} tags={EVENT.RECOVERY.TAGS} attributes.ip={HOST.IP1} attributes.thresholdInfo={TRIGGER.TEMPLATE.NAME}: {TRIGGER.EXPRESSION} attributes.moreInfo=<a href="http://x.x.x.x/tr_events.php?triggerid={TRIGGER.ID}&eventid={EVENT.RECOVERY.ID}">Zabbix console</a> type=zabbixAlert dateTime={EVENT.RECOVERY.DATE}T{EVENT.RECOVERY.TIME}Z
此消息与上一条消息类似。 问题消失后将发送此消息。
点击Add按钮完成配置。
Zabbix 已准备好向 Alerta 发送警报。 让我们生成一个。
第 8 步 — 生成测试警报以验证 Zabbix-Alerta 集成
让我们生成一个测试警报以确保一切都已连接。 默认情况下,Zabbix 会跟踪服务器上的可用磁盘空间量。 我们将创建一个足够大的临时文件来触发 Zabbix 的文件系统使用警报。
如果您尚未连接,请登录到您的 Zabbix 服务器。
接下来,确定服务器上有多少可用空间。 您可以使用 df
命令找出:
df -h
您将看到如下输出:
Output Filesystem Size Used Avail Use% Mounted on /dev/vda1 20G 1.5G 18G 9% /
我们对可用空间的数量感兴趣。 在这种情况下,可用空间为 18GB
。 您的可用空间可能会有所不同。
使用 fallocate
命令创建一个占用超过 80% of 可用磁盘空间的文件,这应该足以触发警报:
fallocate -l 16G /tmp/temp.img
在几分钟内,Zabbix 将触发关于可用磁盘空间量的警报,并将运行我们配置的操作,将通知消息发送到 Alerta。 您将在 Alerta 仪表板中看到此新通知。
既然您知道警报正在工作,请删除您创建的临时文件,以便您可以回收磁盘空间:
rm -f /tmp/temp.img
一分钟后,Zabbix 将发送恢复消息。 警报将从主仪表板中消失,但您可以通过选择 Closed 查看所有已关闭的事件。
您可以单击事件行以查看更多详细信息。
结论
在本教程中,您安装并配置了 Alerta,并设置 Zabbix 向其中发送通知。 因此,您现在有了一个方便的工具来跟踪警报。 将来,您可以添加其他通知源,从而整合和集中来自各种监控系统的信息。