介绍
Alerta是一个用于将多个监控系统的警报合并和解复制并在单个屏幕上可视化的Web应用程序,Alerta可以与许多已知的监控工具集成,如Nagios,Zabbix,Sensu,InfluxData Kapacitor等。
在本教程中,您将设置Alerta并配置它以显示Zabbix监控系统的通知。
前提条件
要遵循本教程,您将需要:
*两个由遵循Ubuntu 16.04 初始服务器设置指南设置的Ubuntu 16.04服务器,包括一个sudo非root用户和一个防火墙.
- 在第一个运行Zabbix的Ubuntu服务器上,安装了以下组件: -Apache,MySQL,和PHP,遵循[如何在Ubuntu 16.04上安装Linux,Apache,MySQL,PHP (LAMP)堆栈(https://andsky.com/tech/tutorials/how-to-install-linux-apache-mysql-php-lamp-stack-on-ubuntu-16-04).
- Zabbix 服务器,通过遵循教程如何安装并配置Zabbix,以便在Ubuntu 16.04上安全地监测远程服务器及其先决条件而安装.
- 在第二个Ubuntu服务器上,即我们在此教程中安装Alerta的地方,安装以下组件: -Nginx,通过遵循教程如何在Ubuntu 16.04上安装Nginx而安装.
- MongoDB,通过遵循教程安装如何在Ubuntu 16.04上安装MongoDB.
- 如果您希望如第6步所解释的那样确保Alerta网络界面的安全,你将需要一个GitHub账户,这是GitHub组织的一部分. 遵循 [此教程] (https://help.github.com/articles/creating-a-new-organization-account/) 创建 GitHub 组织 。 (英语)
步骤 1 — 安装 Alerta 的 API 服务器
Alerta 由服务器和 Web 接口组成。Alerta 服务器负责存储和处理警报,并通过 API 提供 JSON。Alerta Web 接口允许您在浏览器中查看警报列表,所以您不必自己解释 JSON。我们将在我们安装 MongoDB 和 Nginx 的服务器上安装两个组件。在本教程中,我们将把这个机器称为Alerta 服务器
。登录这个机器作为您的非根用户:
1[environment local]
2ssh sammy@your_alerta_server_ip
在我们安装任何Alerta组件之前,我们需要安装pip
,Python包管理器和Python开发文件,我们还需要安装Git,以便我们可以从GitHub中获取Alerta的源代码。
运行以下命令来安装这些软件包:
1sudo apt-get install python-pip python-dev gcc git
一旦这些包安装,我们准备安装Alerta。
首先,我们将使用pip
安装Alerta的服务器:
1sudo pip install alerta-server
通过在开发模式下运行Alerta服务器来检查安装:
1sudo alertad
你应该看到这样的东西:
1[secondary_label Output]
2 * Running on http://0.0.0.0:8080/ (Press CTRL+C to quit)
美元(注)
注:
如果您正在使用不复杂的防火墙(UFW),请将其配置为允许连接到 8080
端口:
1sudo ufw allow 8080/tcp
您可以了解更多关于 UFW 的信息,请参阅 如何在 Ubuntu 16.04 上设置使用 UFW 的防火墙。
现在你可以在浏览器中打开http://your_alerta_server_ip:8080
并查看Alerta API的网页,它将向你展示一些使用示例。
一旦您确认服务器正在运行,请通过按Ctrl+C
来停止服务器运行,我们将很快将其配置为服务。
Alerta API 服务器已安装,所以让我们安装 Web 控制台。
步骤 2 – 安装 Alerta Web UI
Alerta有一个仪表板,在您的浏览器中显示消息。它在表中显示警报消息,因此您可以轻松阅读和排序它们。您可以配置视图以满足您的需求:您可以过滤消息或按任何字段排序它们。此外,您可以查看每个消息的详细信息。我们将安装在我们安装Alerta API服务器的相同服务器上。
首先从 Github 获取源代码:
1git clone https://github.com/alerta/angular-alerta-webui.git
然后将应用程序文件复制到您的 Web 服务器目录:
1sudo cp -r angular-alerta-webui/app/* /var/www/html/
默认情况下,Alerta Web 界面配置为与开发服务器 API 进行通信,该 API 运行在端口 8080
. 我们将通过在我们服务器上的 `/api' 端点提供 Alerta Server 的 API 来设置为生产使用,并从同一域提供 Web 主机的静态内容,这使我们能够避免与 CORS或 HTTPS 混合内容错误的问题。
打开 Config.js 配置文件:
1sudo nano /var/www/html/config.js
然后将终点
设置为/api
:
1[label /var/www/html/config.js]
2 'use strict';
3
4 angular.module('config', [])
5 .constant('config', {
6 'endpoint' : "/api",
7 'provider' : "basic", // google, github, gitlab, keycloak or basic
8 ...
留下其他选项以默认值,我们将在本教程中更改一些选项,当我们配置OAuth授权时。
现在已经安装了所有必要的 Alerta 组件,我们只需要设置它们来一起工作。
步骤 3 — 使用 uWSGI 在 Nginx 后面运行警报。
我們可以使用「alertad」開發伺服器進行一些快速測試,但它不適用於生產使用,所以讓我們解決這個問題. 由於Alerta是用Python寫的,我們需要使用一個WSGI伺服器來執行它。
首先,使用 Python 包管理器安装 uWSGI应用程序服务器:
1sudo pip install uwsgi
接下来,创建wsgi.py
文件,应用程序服务器使用它来与我们的应用程序进行通信。
1sudo nano /var/www/wsgi.py
将下列行添加到文件中,该行告诉 uWSGI 如何调用 Alerta 应用程序:
1[label /var/www/wsgi.py]
2from alerta.app import app
接下来,我们需要配置 uWSGI 服务器本身,创建配置文件 /etc/uwsgi.ini
,并在您的编辑器中打开它:
1sudo nano /etc/uwsgi.ini
此文件指定了应用程序的位置,以及与 Nginx 交互的插槽选项。
将以下行添加到文件中:
1[label /etc/uwsgi.ini]
2[uwsgi]
3chdir = /var/www
4mount = /api=wsgi.py
5callable = app
6manage-script-name = true
7
8master = true
9processes = 5
10logger = syslog:alertad
11
12socket = /tmp/uwsgi.sock
13chmod-socket = 664
14uid = www-data
15gid = www-data
16vacuum = true
17
18die-on-term = true
您可以在 文档中看到 uWSGI 选项的完整参考列表。
接下来,我们将为此应用程序创建一个Systemd单元,以便我们可以使用systemctl
命令来控制它。
1sudo nano /etc/systemd/system/alerta-app.service
此单元文件需要一些描述单元并定义其行为的配置指令。
1[label /etc/systemd/system/alerta-app.service]
2[Unit]
3Description=uWSGI service for Alerta
4After=syslog.target
5
6[Service]
7ExecStart=/usr/local/bin/uwsgi --ini /etc/uwsgi.ini
8RuntimeDirectory=uwsgi
9Restart=always
10KillSignal=SIGQUIT
11Type=notify
12StandardError=syslog
13NotifyAccess=all
14
15[Install]
16WantedBy=multi-user.target
您可以在 本 Systemd 教程中找到有关这些设置以及如何使用 Systemd 单元的更多信息。
现在您可以运行 uWSGI 服务:
1sudo systemctl start alerta-app
您可以通过运行来检查状态:
1systemctl status alerta-app
您将看到以下输出:
1[secondary_label Output]
2 ● alerta-app.service - uWSGI service for Alerta
3 Loaded: loaded (/etc/systemd/system/alerta-app.service; disabled; vendor preset: enabled)
4 Active: active (running) since Fri 2017-06-09 07:02:14 UTC; 4s ago
5 Main PID: 19807 (uwsgi)
6 Status: "uWSGI is ready"
7 Tasks: 8
8 Memory: 29.7M
9 CPU: 477ms
10 CGroup: /system.slice/alerta-app.service
11 ├─19807 /usr/local/bin/uwsgi --ini /etc/uwsgi.ini
12 ├─19819 /usr/local/bin/uwsgi --ini /etc/uwsgi.ini
13 ├─19820 /usr/local/bin/uwsgi --ini /etc/uwsgi.ini
14 ├─19821 /usr/local/bin/uwsgi --ini /etc/uwsgi.ini
15 ├─19822 /usr/local/bin/uwsgi --ini /etc/uwsgi.ini
16 └─19823 /usr/local/bin/uwsgi --ini /etc/uwsgi.ini
正如您所看到的,该服务默认禁用,这意味着它不会自动启动。
1sudo systemctl enable alerta-app
最后,我们必须将 Nginx 配置为将「your_alerta_server_ip/api」的所有请求重定向到正在运行的 uWSGI 服务器,并与 Nginx 服务 Web 前端。
而不是修改默认的 Nginx 配置文件,我们将 Alerta 配置放置在自己的文件中。
1sudo nano /etc/nginx/sites-available/alerta
请确保用您的 Alerta 服务器的 IP 地址代替server_name
的值。
1[label /etc/nginx/sites-available/alerta]
2server {
3 listen 80;
4 server_name your_alerta_server_ip;
5
6 location /api { try_files $uri @api; }
7 location @api {
8 include uwsgi_params;
9 uwsgi_pass unix:/tmp/uwsgi.sock;
10 proxy_set_header Host $host:$server_port;
11 proxy_set_header X-Real-IP $remote_addr;
12 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
13 }
14
15 location / {
16 root /var/www/html;
17 }
18
19}
您可以在本教程中找到有关 Nginx 服务器块的更多信息(https://andsky.com/tech/tutorials/how-to-set-up-nginx-server-blocks-virtual-hosts-on-ubuntu-16-04)。
现在,通过从此文件创建一个符号链接到网站启用
目录, Nginx 在启动过程中读取:
1sudo ln -s /etc/nginx/sites-available/alerta /etc/nginx/sites-enabled/
保存文件并离开编辑器。
接下来,测试 Nginx 配置以确保没有输入或错误配置:
1sudo nginx -t
您将看到以下输出,只要您的配置没有错误:
1[secondary_label Output]
2 nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
3 nginx: configuration file /etc/nginx/nginx.conf test is successful
如果你看到不同的东西,解决错误,并再次尝试。
现在你可以重新加载 Nginx 来应用新的设置:
1sudo nginx -s reload
在您的浏览器中打开http://your_alerta_server_ip
链接,并查看Alerta仪表板。
如果您在公共访问的服务器上安装 Alerta,您应该将其配置为需要身份验证。
步骤 4 – 通过基本身份验证确保Alerta
默认情况下,任何知道 Alerta 服务器的地址的人都可以查看任何消息. 它适用于测试环境,但不适用于生产。
1sudo nano /etc/alertad.conf
将以下代码添加到文件中:
1[label /etc/alertad.conf]
2AUTH_REQUIRED = True
3SECRET_KEY = 'secret_key'
将SECRET_KEY
设置为您选择的随机字符串. 保存文件,退出编辑器并重新启动 uWSGI 服务:
1sudo systemctl restart alerta-app
重新加载 Alerta Web UI 网页. 您将看到消息请继续登录
。 点击创建帐户
链接并创建新帐户。
启用身份验证后,您将需要一个 API 密钥来访问 Alerta API. 选择 ** Configuration ** 菜单,然后选择 ** 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 帐户,然后导航到 新应用程序页面。
填写表格,如下细节:
- 填写 应用程序名称 用 警告 或适当的描述名称。
- 对于 ** 主页 URL**,使用
http://your_alerta_server_ip/
. - 填写 ** 授权回调 URL** 用
http://your_alerta_server_ip/
. - 点击 ** 注册应用程序** 保存设置。
- 复制 ** 客户 ID** 和 ** 客户秘密** 值提供在下一个屏幕上。
接下来,编辑 Alerta 配置以启用 OAuth 身份验证。
1sudo nano /etc/alertad.conf
在文件的末尾添加以下设置:
1[label /etc/alertad.conf]
2OAUTH2_CLIENT_ID = 'your_github_client_id'
3OAUTH2_CLIENT_SECRET = 'your_github_client_secret'
4ALLOWED_GITHUB_ORGS = ['your_github_organization']
使用您的 GitHub 客户 ID、GitHub 客户秘密和 GitHub 组织分别为这些值。
<$>[警告] 警告:如果您在命令中忽略了 GitHub 组织选项,任何 GitHub 用户都可以登录您的 Alerta 仪表板。
保存文件,离开编辑器,并重新启动 uWSGI 服务:
1sudo systemctl restart alerta-app
然后更改 Web 界面的身份验证提供商. 编辑配置文件:
1sudo nano /var/www/html/config.js
查找下面的部分,从基本
更改提供商到github
,然后输入您的GitHub客户 ID:
1[label /var/www/html/config.js]
2 ...
3 'provider' : "github",
4 'client_id' : "INSERT-CLIENT-ID-HERE",
5 ...
打开http://your_alerta_server_ip
以访问Alerta Web UI. 此时您将看到请继续登录
消息。 点击登录
按钮登录,您将被要求允许该应用程序访问您的GitHub帐户。 一旦您允许访问,您将登录。
现在我们可以运行一个简单的测试来检查Alerta是否已设置并正常运作。
步骤 6 - 发送测试消息
我们将使用Alerta的统一命令行工具发送测试警报,首先安装命令行客户端:
1sudo pip install alerta
然后创建一个定义您之前配置的 Alerta API 终端的配置文件,以及您想要使用的 API 密钥。
1nano ~/.alerta.conf
将以下内容插入文件中:
1[label ~/.alerta.conf]
2[DEFAULT]
3endpoint = http://your_alerta_server_ip/api
4key = your_alerta_api_key
使用您在步骤 4 中设置的 API 密钥来选择密钥
。
现在我们可以发送测试警报:
1alerta send --resource webserver01 --event down --environment Production --service Website01 --severity major --text "Web server 01 is down." --value ERROR
你会看到类似于此的输出:
1[secondary_label Output]
2f12558eb-e333-4a10-9c08-7d63f8b0442c (indeterminate -> major)
在您的浏览器中访问http://your_alerta_server_ip
,您将在仪表板上看到一个消息,它看起来像下面的图像:
您可以点击消息查看细节。
您的 Alerta 服务器正在等待新的消息. 让我们配置我们的 Zabbix 监控系统以向 Alerta 发送警报。
步骤 7 — 安装 Zabbix-Alerta 网关
在此步骤中,我们将修改我们的Zabbix监控系统,以便向Alerta发送通知消息。
登录您的 Zabbix 服务器作为您的非根用户:
1[environment local]
2ssh sammy@your_zabbix_server_ip
Ubuntu 16.04 配有 Python 3 安装,并使用python3
作为二进制版本。在发布时,Zabbix 的 Alerta 脚本需要 Python 2。我们还需要安装 Git,以便我们可以从 GitHub 获取源代码。
1[environment second]
2sudo apt-get install python python-setuptools git
默认情况下,Zabbix 可以通过电子邮件、SMS 或Jabber 发送通知,但您可以使用脚本添加新的通知处理器。 Alerta 开发人员提供了一种已准备的通知脚本。
1[environment second]
2git clone https://github.com/alerta/zabbix-alerta.git
3cd zabbix-alerta
4sudo python setup.py install
然后在 Zabbix 存储警告脚本的目录中创建一个符号链接,您可以在 `/etc/zabbix/zabbix_server.conf’ 配置文件中找到其路径:
1[environment second]
2sudo grep -e '^AlertScriptsPath' /etc/zabbix/zabbix_server.conf
你会看到输出,看起来如下:
1[secondary_label Output]
2AlertScriptsPath=/usr/lib/zabbix/alertscripts
默认情况下,Zabbix 在/usr/lib/zabbix/alertscripts
中寻找脚本。
1[environment second]
2sudo ln -s `which zabbix-alerta` /usr/lib/zabbix/alertscripts
请在`http://your_zabbix_server_ip/zabbix/``上登录到您的 Zabbix Web 接口。
在主菜单中,单击管理
,选择媒体类型
,然后在右上角点击创建媒体类型
按钮。
请用以下细节填写表格:
对于名称
,请输入警告
。
点击添加
按钮创建新媒体类型。
然后为您的用户帐户添加新媒体,从主菜单中选择 管理,然后选择 用户。
- 对于 Type,请选择 警告。
- 对于 发送到,请输入
http://your_alerta_server_ip/api;your_api_key
。
使用您在步骤 4 中创建的 API 密钥。
保存新媒体类型,单击添加
按钮。
然后验证用户的配置并通过点击更新
按钮来保存设置。
现在配置一个操作来发送消息,从主菜单中选择 ** Configuration**,然后选择 Actions. 点击 Create Action按钮。
在行动
选项卡上,将名称
字段的值设置为向前通知
。
在操作
选项卡上,设置以下选项:
- 设置 默认主题为
{TRIGGER.STATUS}: {TRIGGER.NAME}
- 为 默认消息,输入以下文本:
1[secondary_label Default message]
2resource={HOST.NAME1}
3event={ITEM.KEY1}
4environment=Production
5severity={TRIGGER.SEVERITY}
6status={TRIGGER.STATUS}
7ack={EVENT.ACK.STATUS}
8service={TRIGGER.HOSTGROUP.NAME}
9group=Zabbix
10value={ITEM.VALUE1}
11text={TRIGGER.STATUS}: {TRIGGER.NAME}
12tags={EVENT.TAGS}
13attributes.ip={HOST.IP1}
14attributes.thresholdInfo={TRIGGER.TEMPLATE.NAME}: {TRIGGER.EXPRESSION}
15type=zabbixAlert
16dateTime={EVENT.DATE}T{EVENT.TIME}Z
Zabbix 會在發現問題時以指定格式發送訊息. 它會用相應的值取代曲折式插座中的表現。 所有這些字段都是 Alerta 所需的,以便收到警報並正確顯示。
接下来,通过在 ** 操作 ** 字段中单击 ** 新的** 来创建一个新的操作。
- 对于 发送给用户,请输入
您的用户名
。 对于 只发送到,请从下载框中选择 警告。
然后选择 恢复操作 选项卡,并将 **默认 ** 消息更改为如下:
1[secondary_label Recovery operations]
2resource={HOST.NAME1}
3event={ITEM.KEY1}
4environment=Production
5severity={TRIGGER.SEVERITY}
6status={TRIGGER.STATUS}
7ack={EVENT.ACK.STATUS}
8service={TRIGGER.HOSTGROUP.NAME}
9group=Zabbix
10value={ITEM.VALUE1}
11text={TRIGGER.STATUS}: {ITEM.NAME1}
12tags={EVENT.RECOVERY.TAGS}
13attributes.ip={HOST.IP1}
14attributes.thresholdInfo={TRIGGER.TEMPLATE.NAME}: {TRIGGER.EXPRESSION}
15attributes.moreInfo=<a href="http://your_zabbix_server_ip/zabbix/tr_events.php?triggerid={TRIGGER.ID}&eventid={EVENT.RECOVERY.ID}">Zabbix console</a>
16type=zabbixAlert
17dateTime={EVENT.RECOVERY.DATE}T{EVENT.RECOVERY.TIME}Z
此消息与之前的消息相似,此消息将在问题消失时发送。
接下来,在操作
字段中点击新
来创建一个新操作,在操作
类型中,从滚动框中选择发送恢复消息
。
完成配置,点击添加
按钮。
Zabbix 已准备好将警报发送到 Alerta. 让我们生成一个。
步骤 8 — 生成测试警报以验证 Zabbix-Alerta 集成
让我们生成一个测试警报,以确保一切都连接起来. 默认情况下,Zabbix 会跟踪您服务器上空缺的磁盘空间。
登录您的 Zabbix 服务器,如果您尚未连接。
接下来,确定你在服务器上有多少可用空间. 你可以使用df
命令来找出:
1[environment second]
2df -h
你会看到输出如下:
1[secondary_label Output]
2 Filesystem Size Used Avail Use% Mounted on
3 /dev/vda1 20G 1.5G 18G 9% /
我们对免费空间的数量感兴趣. 在这种情况下,免费空间为18GB
。
使用fallocate
命令创建一个占用可用磁盘空间的文件,这应该足以触发警报:
1[environment second]
2fallocate -l 16G /tmp/temp.img
在几分钟内,Zabbix会发出关于空白磁盘空间的警报,并将执行我们配置的操作,将通知消息发送到Alerta。
现在你知道警报正在工作,删除你创建的临时文件,这样你就可以恢复你的磁盘空间:
1[environment second]
2rm -f /tmp/temp.img
几分钟后,Zabbix 会发送恢复消息. 警报将从主仪表板中消失,但您可以通过选择 ** 关闭** 查看所有已关闭的事件。
您可以点击事件行查看更多细节。
结论
在本教程中,您安装并配置了Alerta,并设置了Zabbix以向其发送通知. 因此,您现在有一个方便的工具来跟踪警报。