前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >如何在Ubuntu 16.04上使用Alerta监视Zabbix警报

如何在Ubuntu 16.04上使用Alerta监视Zabbix警报

原创
作者头像
不会飞的蝴蝶
发布2018-08-13 17:05:33
4.1K0
发布2018-08-13 17:05:33
举报
文章被收录于专栏:云计算教程系列

Alerta是一个Web应用程序,用于合并和删除来自多个监视系统的警报,并在界面上显示它们。Alerta可以与许多的监控工具集成,如Nagios,Zabbix,Sensu,InfluxData Kapacitor等等。

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

准备

要学习本教程,您需要:

如果您希望按照步骤六中的说明保护Alerta Web界面,则需要一个GitHub帐户。您可以使用腾讯云Tgit,它包含代码提交/存储/下载/复刻/分支/历史/比对/合并等功能。可一站式完成对代码及代码质量管理,项目及项目人员管理,大大提升研发效率。

第一步 - 安装Alerta的API服务器

Alerta由服务器和Web界面组成。Alerta服务器负责存储和处理警报,并通过API提供JSON。Alerta Web界面允许您在浏览器中查看警报列表,因此您不必自己解译JSON。我们将在安装了MongoDB和Nginx的服务器上安装这两个组件。在本教程中,我们将此机器称为“Alerta服务器”。以非root用户身份登录此计算机:

代码语言:javascript
复制
ssh sammy@your_alerta_server_ip

在我们安装任何Alerta组件之前,我们需要安装pip,Python包管理器和Python开发文件。我们还需要安装Git,这样我们就可以从GitHub中检索Alerta的源代码。

运行以下命令以安装这些软件包:

代码语言:javascript
复制
sudo apt-get install python-pip python-dev gcc git

安装这些软件包后,我们就可以安装Alerta了。

首先,我们将使用pip命令安装Alerta的服务器:

代码语言:javascript
复制
sudo pip install alerta-server

通过在开发模式下运行Alerta服务器来检查安装:

代码语言:javascript
复制
sudo alertad

你应该看到:

代码语言:javascript
复制
    * Running on http://0.0.0.0:8080/ (Press CTRL+C to quit)

注意: 如果您使用的是简单防火墙(UFW),请将其配置为允许连接到8080端口:

代码语言:javascript
复制
sudo ufw allow 8080/tcp  

现在,您可以在浏览器中打开http://your_alerta_server_ip:8080并查看Alerta API网页,其中将显示一些使用示例。

验证服务器运行后,按“Ctrl+C” 停止服务器。我们很快就会将其配置为服务运行。

已安装Alerta API服务器,因此我们安装Web控制台。

第二步 - 安装Alerta Web UI

Alerta有一个控制面板,可以在浏览器中显示消息。它在表格中显示警报消息,因此您可以轻松地阅读并将它们排序。您可以配置视图以满足您的需求:您可以过滤消息或按任何字段对消息进行排序。此外,您还可以查看每封邮件的详细信息。我们将在安装Alerta API服务器的同一台服务器上安装它。

首先从Github获取源代码:

代码语言:javascript
复制
git clone https://github.com/alerta/angular-alerta-webui.git

然后将应用程序文件复制到Web服务器目录中:

代码语言:javascript
复制
sudo cp -r angular-alerta-webui/app/* /var/www/html/

默认情况下,Alerta的Web界面配置为与在端口8080上运行的开发服务器API进行通信。我们在服务器/api端点上提供Alerta Server的API,并为来自同一域的Web控制台提供静态内容,这样我们就可以避免CORS或HTTPS混合内容错误的问题。

打开config.js配置文件:

代码语言:javascript
复制
sudo nano /var/www/html/config.js 

并设置端点/api

代码语言:javascript
复制
 'use strict';
​
    angular.module('config', [])
      .constant('config', {
        'endpoint'    : "/api",
        'provider'    : "basic", // google, github, gitlab, keycloak or basic
    ... 

将其他选项保留为默认值。现在我们已经安装了所有必需的Alerta组件。只需要将它们设置为共同工作。

第三步 - 在Nginx后面运行带有uWSGI的Alerta。

我们可以使用alertad开发服务器进行一些快速测试,但它不适合生产使用,所以让我们解决这个问题。由于Alerta是用Python编写的,我们需要使用WSGI服务器来运行它。在本教程中,我们将在http://your_alerta_server_ip/api运行Alerta作为代理Nginx后面的uWSGI应用程序。

首先,使用Python包管理器安装uWSGI应用程序服务器:

代码语言:javascript
复制
sudo pip install uwsgi

接下来,创建服务器用于与我们的应用程序通信的wsgi.py文件。在编辑器中打开文件:

代码语言:javascript
复制
sudo nano /var/www/wsgi.py

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

代码语言:javascript
复制
from alerta.app import app

接下来,我们需要配置uWSGI服务器本身。创建配置文件/etc/uwsgi.ini并在编辑器中打开它:

代码语言:javascript
复制
sudo nano /etc/uwsgi.ini

此文件指定应用程序的位置,以及用于与Nginx交互的套接字选项。

将以下行添加到文件中:

代码语言:javascript
复制
[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

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

代码语言:javascript
复制
sudo nano /etc/systemd/system/alerta-app.service

此单元文件需要一些描述单元并定义其行为的配置指令。将以下行添加到文件中:

代码语言:javascript
复制
[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

现在您可以运行uWSGI服务:

代码语言:javascript
复制
sudo systemctl start alerta-app

您可以通过运行以下命令来检查状态:

代码语言:javascript
复制
systemctl status alerta-app

您将看到以下输出:

代码语言:javascript
复制
​
    ● 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

如您所见,默认情况下禁用该服务,这意味着它不会自动启动。现在启用它:

代码语言:javascript
复制
sudo systemctl enable alerta-app

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

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

代码语言:javascript
复制
sudo nano /etc/nginx/sites-available/alerta

将以下内容添加到该文件中。请务必使用server_name替换Alerta服务器的IP地址值。

代码语言:javascript
复制
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;
    }
​
}

现在通过创建从该文件到sites-enabled目录来启用站点,Nginx在启动期间读取该目录:

代码语言:javascript
复制
sudo ln -s /etc/nginx/sites-available/alerta /etc/nginx/sites-enabled/

保存文件并退出编辑器。

接下来,测试Nginx配置以确保没有拼写错误或配置错误:

代码语言:javascript
复制
sudo nginx -t

如果配置没有错误,您将看到以下输出:

代码语言:javascript
复制
    nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
    nginx: configuration file /etc/nginx/nginx.conf test is successful

如果您看到不同的内容,请解决错误并重试。

现在您可以重新加载Nginx以应用新设置:

代码语言:javascript
复制
sudo nginx -s reload

在浏览器中打开http://your_alerta_server_ip链接,然后查看Alerta仪表板。

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

第四步 - 使用基本身份验证保护Alerta

默认情况下,任何知道Alerta服务器地址的人都可以查看消息。它适用于测试环境,但不适用于生产。要强制执行身份验证,请打开alertad.conf配置文件:

代码语言:javascript
复制
sudo nano /etc/alertad.conf

将以下代码添加到文件中:

代码语言:javascript
复制
AUTH_REQUIRED = True
SECRET_KEY = 'secret_key'

设置SECRET_KEY为您选择的随机字符串。保存文件,退出编辑器,然后重新启动uWSGI服务:

代码语言:javascript
复制
sudo systemctl restart alerta-app

重新加载Alerta Web UI网页。您将看到消息“请登录以继续”。单击“ 创建帐户”链接并创建一个新帐户。完成此过程后,您将可以访问Alerta仪表板。

启用身份验证后,您将需要一个API密钥才能访问Alerta API。选择配置菜单,然后选择API密钥

输入需要访问API的应用程序的名称。在本教程中,输入zabix。然后从下拉列表中选择读写,并单击“ 创建新API密钥”按钮。将创建新密钥,您将看到其详细信息。复制此密钥; 你以后会需要的。

或者,您可以设置OAuth身份验证并使用GitHub或Google凭据登录Alerta用户界面。如果基本身份验证足够,您可以跳过下一步。

第五步 - 使用OAuth保护Alerta(可选)

Alerta的Web UI支持Google,GitHub,Gitlab和Keycloak的OAuth身份验证。我们将通过GitHub帐户配置登录,因此您需要继续登录。

首先,使用GitHub注册一个新的应用程序。登录您的GitHub帐户并导航到“新建应用程序”页面。

填写表格并提供以下详细信息:

  1. 使用Alerta或合适的描述性名称填写应用程序名称。
  2. 对于主页URL,请使用http://your_alerta_server_ip/
  3. http://your_alerta_server_ip/填写授权回调URL
  4. 单击注册应用程序以保存设置。
  5. 复制下一个屏幕上提供的客户端ID客户端密钥值。

接下来,编辑Alerta配置以启用OAuth身份验证。打开配置文件:

代码语言:javascript
复制
sudo nano /etc/alertad.conf

在文件末尾添加以下设置:

代码语言:javascript
复制
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服务:

代码语言:javascript
复制
sudo systemctl restart alerta-app

然后更改Web界面的身份验证提供程序。编辑其配置文件:

代码语言:javascript
复制
sudo nano /var/www/html/config.js

找到以下部分并将提供者从basic更改为github,并输入您的GitHub客户端ID:

代码语言:javascript
复制
    ...
        'provider'    : "github",
        'client_id'   : "INSERT-CLIENT-ID-HERE",
    ... 

打开 http://your_alerta_server_ip 以访问Alerta Web UI。这次你会看到“请登录以继续”的消息。单击“ 登录”按钮登录,系统将要求您允许应用程序访问您的GitHub帐户。

现在我们可以运行一个简单的测试来检查Alerta是否已设置并正常运行。

第六步 - 发送测试消息

我们将使用Alerta的统一命令行工具发送测试警报。首先,安装命令行客户端:

代码语言:javascript
复制
sudo pip install alerta

然后创建一个配置文件,该文件定义您之前配置的Alerta API端点以及您要使用的API密钥。在编辑器中创建一个新文件:

代码语言:javascript
复制
nano ~/.alerta.conf

将以下内容粘贴到文件中:

代码语言:javascript
复制
[DEFAULT]
endpoint = http://your_alerta_server_ip/api
key = your_alerta_api_key

使用您在步骤四中设置的API密钥作为key选项。

现在我们可以发送测试警报:

代码语言:javascript
复制
alerta send --resource webserver01 --event down --environment Production --service Website01 --severity major --text "Web server 01 is down." --value ERROR 

您将看到类似于此的输出:

代码语言:javascript
复制
f12558eb-e333-4a10-9c08-7d63f8b0442c (indeterminate -> major)

访问http://your_alerta_server_ip,您将在仪表板上看到如下图所示的消息:

您可以单击该消息以查看详细信息。

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

第七步 - 安装Zabbix-Alerta网关

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

以非root用户身份登录Zabbix服务器计算机:

代码语言:javascript
复制
ssh sammy@your_zabbix_server_ip

运行以下命令以安装软件包:

代码语言:javascript
复制
sudo apt-get install python python-setuptools git

默认情况下,Zabbix可以通过电子邮件,SMS或Jabber消息发送通知,但您可以使用脚本添加新的通知处理程序。Alerta开发人员提供现成的通知脚本。请克隆zabbix-alerta存储库并使用安装脚本进行安装:

代码语言:javascript
复制
git clone https://github.com/alerta/zabbix-alerta.git 
cd zabbix-alerta 
sudo python setup.py install

然后为abbix-alerta在Zabbix存储警报脚本的目录创建符号链接。您可以在/etc/zabbix/zabbix_server.conf配置文件中找到它的路径:

代码语言:javascript
复制
sudo grep -e '^AlertScriptsPath' /etc/zabbix/zabbix_server.conf

您将看到如下所示的输出:

代码语言:javascript
复制
AlertScriptsPath=/usr/lib/zabbix/alertscripts

默认情况下,Zabbix会查找脚本/usr/lib/zabbix/alertscripts。执行以下命令以创建符号链接:

代码语言:javascript
复制
sudo ln -s `which zabbix-alerta` /usr/lib/zabbix/alertscripts

让我们配置Alerta集成。在 http://your_zabbix_server_ip/zabbix/登录您的Zabbix Web界面。

在主菜单中,单击“ 管理”,选择“ 介质类型”,然后单击右上角的“ 创建介质类型”按钮。

填写表格并提供以下详细信息:

· 对于姓名,请输入Alerta

· 对于Type,从下拉列表中选择Script

· 对于脚本名称,请输入zabbix-alerta

· 对于脚本参数,请输入以下值:

  • {ALERT.SENDTO}
  • {ALERT.SUBJECT}
  • {ALERT.MESSAGE}

· 确保选中Enabled复选框。

单击“ 添加”按钮以创建新的媒体类型。

然后为您的用户帐户添加新媒体。在主菜单中选择“ 管理 ”,然后选择“ 用户”。单击您的用户名,然后选择“ 媒体”选项卡。输入以下详细信息

· 对于Type,选择Alerta

· 对于发送至,请输入 。http://your_alerta_server_ip/api;your_api_key

使用您在步骤4中创建的API密钥。

单击“ 添加”按钮保存新媒体类型。

然后验证用户的配置并单击“ 更新”按钮保存设置。

现在配置一个动作来发送消息。在主菜单中选择Configuration,然后选择Actions。单击“ 创建操作”按钮。

在“ 操作”选项卡上,将“ 名称”字段的值设置为Forward to Alerta

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

· 将默认主题设置为{TRIGGER.STATUS}: {TRIGGER.NAME}

· 对于默认消息,请输入以下文本:

代码语言:javascript
复制
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 ”。

然后选择“ 恢复操作”选项卡并将“ 默认”消息更改为以下内容:

代码语言:javascript
复制
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发送警报。

步骤八 - 生成测试警报以验证Zabbix-Alerta集成

让我们生成测试警报以确保所有内容都已连接。默认情况下,Zabbix会跟踪服务器上的可用磁盘空间量。我们将创建一个足够大的临时文件来触发Zabbix的文件系统使用警报。

如果尚未连接,请登录Zabbix服务器。

接下来,确定您在服务器上有多少可用空间。您可以使用该df命令查找:

代码语言:javascript
复制
df -h

你会看到如下输出:

代码语言:javascript
复制
    Filesystem      Size  Used Avail Use% Mounted on
    /dev/vda1        20G  1.5G   18G   9% /

可用空间是18GB。您的可用空间可能不同。

使用fallocat命令创建占用可用磁盘空间80%以上的文件,该文件应足以触发警报:

代码语言:javascript
复制
fallocate -l 16G /tmp/temp.img

在几分钟内,Zabbix将触发有关可用磁盘空间量的警报,并将运行我们配置好的操作,将通知消息发送到Alerta。您会在Alerta仪表板中看到此新通知。您也可以使用腾讯云容器服务,他提供了比较完整的日志分析系统。腾讯云容器服务基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务。

确保一切正常运行后,请删除您创建的临时文件,以便回收磁盘空间:

代码语言:javascript
复制
rm -f /tmp/temp.img

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

您可以单击事件行以查看更多详细信息。

结论

在本教程中,您安装并配置了Alerta,并设置Zabbix以向其发送通知。因此,您现在可以使用便捷的工具来跟踪警报。将来,您可以添加其他通知源,从而整合和集中来自各种监控系统的信息。


参考文献:《How To Monitor Zabbix Alerts with Alerta on Ubuntu 16.04》

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 准备
  • 第一步 - 安装Alerta的API服务器
  • 第二步 - 安装Alerta Web UI
  • 第三步 - 在Nginx后面运行带有uWSGI的Alerta。
  • 第四步 - 使用基本身份验证保护Alerta
  • 第五步 - 使用OAuth保护Alerta(可选)
  • 第六步 - 发送测试消息
  • 第七步 - 安装Zabbix-Alerta网关
  • 步骤八 - 生成测试警报以验证Zabbix-Alerta集成
  • 结论
相关产品与服务
多因子身份认证
多因子身份认证(Multi-factor Authentication Service,MFAS)的目的是建立一个多层次的防御体系,通过结合两种或三种认证因子(基于记忆的/基于持有物的/基于生物特征的认证因子)验证访问者的身份,使系统或资源更加安全。攻击者即使破解单一因子(如口令、人脸),应用的安全依然可以得到保障。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档