介绍
Alerta是一个Web应用程序,用于整合和重新生成来自多个监控系统的警报,并在单个屏幕上对其进行可视化。 Alerta可以与诸如Nagios,Zabbix,Sensu,InfluxData Kapacitor等许多知名监控工具集成。
在本教程中,您将设置Alerta并将其配置为显示Zabbix监控系统的通知。
先决条件
要遵循本教程,您将需要:
- 通过遵循Ubuntu 16.04初始服务器设置指南设置了两个Ubuntu 16.04服务器,包括sudo非root用户和防火墙。
- 在第一个Ubuntu服务器上,您将运行Zabbix,安装以下组件:
- Apache,MySQL和PHP,通过以下教程如何在Ubuntu 16.04上安装Linux,Apache,MySQL,PHP(LAMP) 。
- Zabbix服务器,通过以下教程安装如何安装和配置Zabbix以安全地监视Ubuntu 16.04上的远程服务器及其先决条件。
- 在第二个Ubuntu服务器上,我们将在本教程中安装Alerta,安装以下组件:
- Nginx,通过以下教程安装如何在Ubuntu 16.04上安装Nginx 。
- MongoDB,通过以下教程安装如何在Ubuntu 16.04上安装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 apt-get install python-pip python-dev 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)
注意:如果使用简单防火墙(UFW),请将其配置为允许连接到8080
端口:
sudo ufw allow 8080/tcp
您可以在Ubuntu 16.04中了解如何使用UFW设置防火墙的UFW 。
现在,您可以在浏览器中打开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 cp -r angular-alerta-webui/app/* /var/www/html/
默认情况下,Alerta的Web界面配置为与在8080
端口上运行的开发服务器API进行通信。 我们将通过在我们的服务器上的/api
端点上提供Alerta服务器的API,为同一个域中的Web控制台提供静态内容,从而使我们避免使用CORS或HTTPS混合内容错误。
打开config.js
配置文件:
sudo nano /var/www/html/config.js
并将endpoint
设置为/api
:
'use strict';
angular.module('config', [])
.constant('config', {
'endpoint' : "/api",
'provider' : "basic", // google, github, gitlab, keycloak or basic
...
将其他选项保留为其默认值。 当我们配置OAuth授权时,我们将在本教程后面部分更改。
现在已经安装了所有必要的Alerta组件。 我们只需要设置它们一起工作。
第3步 - 运行带有uWSGI的Alerta在Nginx后面。
我们可以使用alertad
开发服务器进行一些快速测试,但是对于生产使用来说并不好,所以我们来解决这个问题。 由于Alerta是用Python编写的,所以我们需要使用WSGI服务器来运行它。 在本教程中,我们将运行Alerta作为代理在Nginx后面的uWSGI应用程序,位于http:// your_alerta_server_ip /api
。
首先,使用Python包管理器安装uWSGI应用程序服务器:
sudo pip install uwsgi
接下来,创建应用服务器用于与我们的应用程序通信的wsgi.py文件。 在编辑器中打开文件:
sudo nano /var/www/wsgi.py
将以下行添加到文件中,该文件告诉uWSGI如何调用Alerta应用程序:
from alerta.app import app
接下来,我们需要配置uWSGI服务器本身。 创建配置文件/etc/uwsgi.ini
并在编辑器中打开它:
sudo nano /etc/uwsgi.ini
该文件指定应用程序的位置,以及与Nginx交互的套接字选项。
将以下行添加到文件中:
[uwsgi]
chdir = /var/www
mount = /api=wsgi.py
callable = app
manage-script-name = true
master = true
processes = 5
logger = syslog:alertad
socket = /tmp/uwsgi.sock
chmod-socket = 664
uid = www-data
gid = www-data
vacuum = true
die-on-term = true
您可以在文档中看到uWSGI选项的完整参考列表。
接下来,我们将为此应用程序创建一个Systemd单元,以便我们可以使用systemctl
命令来控制它。
sudo nano /etc/systemd/system/alerta-app.service
该单元文件需要一些描述单元并定义其行为的配置指令。 将以下行添加到文件中:
[Unit]
Description=uWSGI service for Alerta
After=syslog.target
[Service]
ExecStart=/usr/local/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: enabled)
Active: active (running) since Fri 2017-06-09 07:02:14 UTC; 4s ago
Main PID: 19807 (uwsgi)
Status: "uWSGI is ready"
Tasks: 8
Memory: 29.7M
CPU: 477ms
CGroup: /system.slice/alerta-app.service
├─19807 /usr/local/bin/uwsgi --ini /etc/uwsgi.ini
├─19819 /usr/local/bin/uwsgi --ini /etc/uwsgi.ini
├─19820 /usr/local/bin/uwsgi --ini /etc/uwsgi.ini
├─19821 /usr/local/bin/uwsgi --ini /etc/uwsgi.ini
├─19822 /usr/local/bin/uwsgi --ini /etc/uwsgi.ini
└─19823 /usr/local/bin/uwsgi --ini /etc/uwsgi.ini
如您所见,默认情况下该服务被禁用,这意味着它不会自动启动。 启用它:
sudo systemctl enable alerta-app
最后,我们必须配置Nginx以将your_alerta_server_ip /api
所有请求重定向到运行的uWSGI服务器,并使用Nginx为Web前端提供服务。
我们将将Alerta配置放在自己的文件中,而不是修改默认的Nginx配置文件。
sudo nanoi /etc/nginx/sites-available/alerta
将以下内容添加到文件中。 请确保使用您的Alerta服务器的IP地址替换server_name
的值。
server {
listen 80;
server_name your_alerta_server_ip;
location /api { try_files $uri @api; }
location @api {
include uwsgi_params;
uwsgi_pass unix:/tmp/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;
}
}
您可以在本教程中找到有关Nginx服务器块的更多信息。
现在,通过创建一个从此文件到启用了站点的目录的符号链接来sites-enabled
该sites-enabled
,Nginx在启动期间读取:
sudo ln -s /etc/nginx/sites-available/alerta /etc/nginx/sites-enabled/
保存文件并退出编辑器。
接下来,测试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 nano /etc/alertad.conf
将以下代码添加到文件中:
AUTH_REQUIRED = True
SECRET_KEY = 'secret_key'
将SECRET_KEY
设置为您选择的随机字符串。 保存文件,退出编辑器,然后重新启动uWSGI服务:
sudo systemctl restart alerta-app
重新加载Alerta Web UI网页。 您将看到消息“请登录以继续”。 单击创建帐户链接并创建一个新帐户。 完成此过程后,您将可以访问Alerta仪表板。
启用身份验证后,您需要一个API密钥才能访问Alerta API。 选择配置菜单并选择API密钥 。
输入需要访问API的应用程序的名称。 在本教程中,输入zabix 。 然后从下拉列表中选择读写 ,然后单击创建新API密钥按钮。 将创建新的密钥,您将看到它的详细信息。 复制此键; 你将需要它。
或者,您可以设置OAuth身份验证,并使用您的GitHub或Google凭据登录到Alerta用户界面。 如果基本认证足够,可以跳过下一步。
第5步 - 使用OAuth保护Alerta(可选)
Alerta的Web UI支持Google,GitHub,Gitlab和Keycloak的OAuth身份验证。 我们将通过GitHub帐户配置登录,因此您需要继续。
首先,使用GitHub注册一个新的应用程序。 登录您的GitHub帐户并导航到“新建应用程序”页面。 。
填写以下详细信息的表单:
- 使用Alerta或适当的描述性名称填写应用程序名称。
- 对于主页URL ,请使用
http:// your_alerta_server_ip /
。 - 使用
http:// your_alerta_server_ip /
填写授权回调网址 。 - 单击注册应用程序以保存设置。
- 复制下一个屏幕上提供的客户端ID和客户机密码值。
接下来,编辑Alerta配置以启用OAuth身份验证。 打开配置文件:
sudo nano /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 Client Secret和GitHub Organization。
警告 :如果您从命令中省略GitHub组织选项,任何GitHub用户都可以登录到您的Alerta仪表板。 创建一个GitHub组织,并将适当的用户添加到组织以限制访问。
保存文件,退出编辑器,然后重新启动uWSGI服务:
sudo systemctl restart alerta-app
然后更改Web界面的身份验证提供程序。 编辑其配置文件:
sudo nano /var/www/html/config.js
找到以下部分,并将提供者从basic
更改为github
,并输入您的GitHub客户端ID:
...
'provider' : "github",
'client_id' : "INSERT-CLIENT-ID-HERE",
...
打开http:// your_alerta_server_ip
以访问Alerta Web UI。 这次你会看到消息“请登录继续”。 点击登录按钮进行登录,系统会要求您允许应用访问您的GitHub帐户。 一旦你允许访问,你将被登录。
现在我们可以运行一个简单的测试来检查Alerta的设置和运行是否正常。
第6步 - 发送测试消息
我们将使用Alerta的统一命令行工具发送测试警报。 首先,安装命令行客户机:
sudo pip install alerta
然后创建一个配置文件,定义您之前配置的Alerta API端点,以及您希望使用的API密钥。 在编辑器中创建一个新文件:
nano ~/.alerta.conf
将以下内容粘贴到文件中:
[DEFAULT]
endpoint = http://your_alerta_server_ip/api
key = your_alerta_api_key
使用您在第4步中设置的API密钥作为key
选项。
现在我们可以发送测试警报:
alerta send --resource webserver01 --event down --environment Production --service Website01 --severity major --text "Web server 01 is down." --value ERROR
你会看到类似的输出:
Outputf12558eb-e333-4a10-9c08-7d63f8b0442c (indeterminate -> major)
访问浏览器中的http:// your_alerta_server_ip
,您将在仪表板上看到如下图所示的消息:
您可以点击信息查看详情。
您的Alerta服务器已启动并等待新消息。 我们配置我们的Zabbix监控系统向Alerta发送警报。
第7步 - 安装Zabbix-Alerta网关
在此步骤中,我们将修改我们的Zabbix监控系统,向Alerta发送通知消息。
以非root用户身份登录Zabbix服务器:
ssh sammy@your_zabbix_server_ip
Ubuntu 16.04附带了Python 3,并使用python3
作为二进制文件。 在发布时,Zabbix的Alerta脚本需要Python 2.我们还需要安装Git,以便我们可以从GitHub检索源代码。 运行以下命令安装这些软件包:
sudo apt-get install python python-setuptools git
默认情况下,Zabbix可以通过电子邮件,短信或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集成。 登录到您的Zabbix Web界面http:// your_zabbix_server_ip /zabbix/
。
在主菜单中,单击管理 ,选择媒体类型 ,然后单击右上角的创建媒体类型按钮。
填写以下详细信息的表格:
- 对于名称 ,输入
Alerta
。 - 对于类型 ,从下拉列表中选择脚本 。
- 对于脚本名称 ,输入
zabbix-alerta
。 - 对于脚本参数 ,请输入以下值:
-
{ALERT.SENDTO}
-
{ALERT.SUBJECT}
-
{ALERT.MESSAGE}
-
- 确保选中“已启用”复选框。
单击添加按钮创建新的媒体类型。
然后为您的用户帐户添加新媒体。 在主菜单中选择“管理”,然后选择“ 用户” 。 单击您的用户名,然后选择媒体选项卡。 输入以下详细信息
- 对于类型 ,选择Alerta 。
- 要发送到 ,请输入
http:// your_alerta_server_ip /api; your_api_key
http:// your_alerta_server_ip /api; your_api_key
。
使用您在第4步中创建的API密钥。
单击添加按钮保存新的媒体类型。
然后验证用户的配置,然后单击更新按钮保存设置。
现在配置一个动作来发送消息。 在主菜单中选择配置 ,然后选择操作 。 单击创建操作按钮。
在“ 操作”选项卡上,将“ 名称”字段的值设置为“ 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来说是必需的,以接收警报并正确显示警报。
接下来,通过单击操作字段中的新建来创建新操作。 在窗体中输入以下值:
- 要发送给用户 ,请输入
Your user name
。 - 要仅发送到 ,请从下拉框中选择Alerta 。
然后选择恢复操作选项卡,并将默认消息更改为以下内容:
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://your_zabbix_server_ip/zabbix/tr_events.php?triggerid={TRIGGER.ID}&eventid={EVENT.RECOVERY.ID}">Zabbix console</a>
type=zabbixAlert
dateTime={EVENT.RECOVERY.DATE}T{EVENT.RECOVERY.TIME}Z
此消息类似于上一条消息。 当问题消失时,将发送此消息。
接下来,通过单击操作字段中的新建来创建新操作。 对于操作类型 ,从下拉框中选择发送恢复信息 。
单击添加按钮完成配置。
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%以上的文件,这应该足以触发警报:
fallocate -l 16G /tmp/temp.img
在几分钟内,Zabbix将触发关于可用磁盘空间量的警报,并将运行我们配置的操作,并将通知消息发送给Alerta。 您将在Alerta仪表板中看到此新通知。
现在您知道警报正在运行,删除您创建的临时文件,以便您可以回收磁盘空间:
rm -f /tmp/temp.img
一分钟后,Zabbix将发送恢复信息。 警报将从主仪表板消失,但您可以通过选择关闭来查看所有关闭的事件。
您可以点击事件行查看更多详细信息。
结论
在本教程中,您已安装并配置了Alerta,并设置了Zabbix来向其发送通知。 因此,您现在可以方便地跟踪警报。 将来,您可以添加其他通知源,从而整合和集中来自各种监控系统的信息。