如何在 CentOS 7 上使用 Alerta 监控 Zabbix 警报

介绍

Alerta是一个用于将多个监控系统的警报合并和解复制并在单个屏幕上可视化的Web应用程序,Alerta可以与许多已知的监控工具集成,如Nagios,Zabbix,Sensu,InfluxData Kapacitor等。

在本教程中,您将设置Alerta并配置它以显示Zabbix监控系统的通知。

前提条件

要遵循本教程,您将需要:

*通过遵循CentOS 7初始服务器设置指南来设置出两个CentOS 7服务器,包括一个sudo非root用户和一个防火墙.

  • 在第二个 CentOS 服务器上,我们将在此教程中安装 Alerta, 安装以下组件:
  • Nginx,通过遵循教程[如何在 CentOS 7 (https://andsky.com/tech/tutorials/how-to-install-nginx-on-centos-7)安装.
  • MongoDB,通过遵循教程[如何在CentOS 7上安装MongoDB(https://andsky.com/tech/tutorials/how-to-install-mongodb-on-centos-7)来安装.

步骤 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 yum install python-pip python-devel 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)

美元(注)

注: 如果您正在使用 FirewallD,请将其配置为允许连接到 8080 端口:

1sudo firewall-cmd --zone=public --permanent --add-port=8080/tcp
2sudo firewall-cmd --reload

您可以在 如何在 CentOS 7 上使用防火墙设置防火墙中了解更多有关防火墙d 的信息。

现在,您可以在浏览器中打开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 mkdir -p /var/www/html/
2sudo cp -r angular-alerta-webui/app/* /var/www/html/

默认情况下,Alerta Web 界面配置为与开发服务器 API 进行通信,该 API 运行在端口 8080. 我们将通过在我们服务器上的 `/api' 端点提供 Alerta Server 的 API 来设置为生产使用,并从同一域提供 Web 主机的静态内容,这使我们能够避免与 CORS或 HTTPS 混合内容错误的问题。

打开 Config.js 配置文件:

1sudo vi /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 vi /var/www/wsgi.py

将下列行添加到文件中,该行告诉 uWSGI 如何调用 Alerta 应用程序:

1[label /var/www/wsgi.py]
2from alerta.app import app

接下来,我们需要配置 uWSGI 服务器本身,创建一个目录,在那里 uWSGI 可以存储其插件文件,并确保 Nginx 进程可以访问它:

1sudo mkdir /var/run/alerta
2sudo chown -R nginx.nginx /var/run/alerta/

然后创建配置文件 /etc/uwsgi.ini,并在编辑器中打开它:

1sudo vi /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 = /var/run/alerta/uwsgi.sock
13chmod-socket = 664
14uid = nginx
15gid = nginx
16vacuum = true
17
18die-on-term = true

您可以在 文档中看到 uWSGI 选项的完整参考列表。

接下来,我们将为此应用程序创建一个Systemd单元,以便我们可以使用systemctl命令来控制它。

1sudo vi /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/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: disabled)
 4       Active: active (running) since Fri 2017-04-07 12:15:21 EEST; 2min 25s ago
 5     Main PID: 15935 (uwsgi)
 6       Status: "uWSGI is ready"
 7       CGroup: /system.slice/alerta-app.service
 8               ├─15935 /usr/bin/uwsgi --ini /etc/uwsgi.ini
 9               ├─15946 /usr/bin/uwsgi --ini /etc/uwsgi.ini
10               ├─15947 /usr/bin/uwsgi --ini /etc/uwsgi.ini
11               ├─15948 /usr/bin/uwsgi --ini /etc/uwsgi.ini
12               ├─15949 /usr/bin/uwsgi --ini /etc/uwsgi.ini
13               └─15950 /usr/bin/uwsgi --ini /etc/uwsgi.ini

正如您所看到的,该服务默认禁用,这意味着它不会自动启动。

1sudo systemctl enable alerta-app

最后,我们必须将 Nginx 配置为将「your_alerta_server_ip/api」的所有请求重定向到正在运行的 uWSGI 服务器,并与 Nginx 服务 Web 前端。

而不是修改默认的 Nginx config 文件,我们将 Alerta 配置放置在自己的文件中。

1sudo vi /etc/nginx/conf.d/alerta.conf

请确保用您的 Alerta 服务器的 IP 地址代替server_name的值。

 1[label /etc/nginx/conf.d/alerta.conf]
 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:/var/run/alerta/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    error_page 500 502 503 504  /50x.html;
20    location = /50x.html {
21        root  /usr/share/nginx/html;
22    }
23}

您可以在本教程中找到有关 Nginx 服务器块的更多信息(https://andsky.com/tech/tutorials/how-to-set-up-nginx-server-blocks-on-centos-7)。

保存文件并离开编辑器。

接下来,测试 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 dashboard

如果您在公共访问的服务器上安装 Alerta,您应该将其配置为需要身份验证。

步骤 4 – 通过基本身份验证确保Alerta

默认情况下,任何知道 Alerta 服务器的地址的人都可以查看任何消息. 它适用于测试环境,但不适用于生产。

1sudo vi /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 帐户,然后导航到 新应用程序页面

填写表格,如下细节:

  1. 填写 应用程序名称警告 或适当的描述名称。
  2. 对于 ** 主页 URL**,使用 http://your_alerta_server_ip/.
  3. 填写 ** 授权回调 URL** 用 http://your_alerta_server_ip/.
  4. 点击 ** 注册应用程序** 保存设置。
  5. 复制 ** 客户 ID** 和 ** 客户秘密** 值提供在下一个屏幕上。

接下来,编辑 Alerta 配置以启用 OAuth 身份验证。

1sudo vi /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 vi /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 密钥。

1vi ~/.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]
21015fca2-eff6-441d-8c66-6abf9368b830 (indeterminate -> major)

在您的浏览器中访问http://your_alerta_server_ip,您将在仪表板上看到一个消息,它看起来像下面的图像:

Alerta displaying the test alert

您可以点击消息查看细节。

您的 Alerta 服务器正在等待新的消息. 让我们配置我们的 Zabbix 监控系统以向 Alerta 发送警报。

步骤 7 — 安装 Zabbix-Alerta 网关

在此步骤中,我们将修改我们的Zabbix监控系统,以便向Alerta发送通知消息。

登录您的 Zabbix 服务器作为您的非根用户:

1ssh sammy@your_zabbix_server_ip

默认情况下,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按钮。

行动选项卡上,将名称字段的值设置为向前通知

操作选项卡上,设置以下选项:

  • Set Default subject to {TRIGGER.STATUS}: {TRIGGER.NAME}
  • For Default message, enter the following text:
     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://x.x.x.x/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。

Alerta displaying the free space alert from Zabbix

现在你知道警报正在工作,删除你创建的临时文件,这样你就可以恢复你的磁盘空间:

1[environment second]
2rm -f /tmp/temp.img

几分钟后,Zabbix 会发送恢复消息. 警报将从主仪表板中消失,但您可以通过选择 ** 关闭** 查看所有已关闭的事件。

Alerta's closed alerts, displaying the resolved free space alert.

您可以点击事件行查看更多细节。

结论

在本教程中,您安装并配置了Alerta,并设置了Zabbix以向其发送通知. 因此,您现在有一个方便的工具来跟踪警报。

Published At
Categories with 技术
comments powered by Disqus