如何通过聊天提醒改进您的网络监控

将 Mattermost 聊天服务器与 Zabbix 监控服务器集成的分步指南。
298 位读者喜欢这篇文章。
open source button on keyboard

Opensource.com

网络监控解决方案的意义当然是在您的网络上出现故障时通知您,但解决方案的有效性与警报的显着性和及时性直接相关。

对于我的工作而言,系统故障电子邮件可能会让人应接不暇,因此我认为聊天机器人服务会更有用。在做了一些研究之后,我发现我已经有了两个可以完成这项工作的工具:MattermostZabbix。但我如何让他们协同工作呢?

Zabbix 是一款开源分布式监控解决方案,具有各种社区开发的插件和便捷的集成工具(例如 Grafana)。我曾使用它来监控我的家庭网络设备、服务器基础设施和服务(例如 Elastic stack,以前称为 ELK stack)。 Mattermost 是一项 MIT 许可的跨平台消息服务。它是开源的,欢迎向 其 GitHub 存储库 提交拉取请求。在我的网络上,我使用 Mattermost 进行大多数通知,例如当前天气、火车时刻表等。

我决定将我现有的 Mattermost 聊天服务器与我的 Zabbix 监控服务器集成会非常简单,并且为我提供了更好地监控我的家庭网络所需的工具。我的想法是创建一个专门用于系统警报的单独频道,我可以根据需要订阅或静音。我还可以选择设置特定的通知——例如,虚拟机监控程序宕机——以通知特定用户。

这是一个关于我如何构建我的设置的分步指南;希望它能帮助您构建自己的设置。

先决条件硬件和软件

以下是我用于启动此设置的工具

  • HP ProLiant MicroServer Gen8 服务器硬件
  • VMware ESXi 虚拟机监控程序
  • 可以访问互联网的 CentOS 7.x x64 虚拟机,用于 Docker/HTTP(S) GET 出站
  • Docker 和 Docker 守护程序正在运行

设置 Mattermost 和 Zabbix

我正在使用 Docker 版本的 Mattermost,但您也可以将其作为完整应用程序安装在您的服务器上。要下载 Docker 镜像并启动它(一旦您已经运行了 Docker),您可以使用以下命令

docker run --name mattermost-preview -d --publish 8065:8065 mattermost/mattermost-preview

如果这不起作用,请查阅 Docker 设置指南 以获得更多帮助。

设置 Zabbix 以监控远程服务器通常非常轻松,但其配置可能有点棘手。值得庆幸的是,Zabbix 的文档和论坛中包含大量信息,并且 DigitalOcean 提供了一个非常好的 设置指南。当您 添加节点 以供 Zabbix 监控(而不仅仅是监控服务器)时,本指南最有用。

一旦您设置好 Zabbix 和 Mattermost,请登录每个系统并保护它们的安全(请参阅下面的“安全性如何?”)。您可以为您 Mattermost 的测试实例使用您选择的任何电子邮件地址。

设置单点登录

如果您在企业环境中进行设置,您可能需要启用单点登录 (SSO)。Mattermost 的社区版没有直接的 Active Directory (AD) 集成选项,但是如果您使用 GitLab 中包含的版本或拥有 GitLab 服务器,您可以将 Mattermost 绑定到 GitLab,并且 GitLab 可以对 AD 进行身份验证。

配置 Zabbix

编写您的警报脚本

警报脚本可以用您想要的任何语言编写。一个简单的 Bash 脚本就足以满足我的需求,您可以快速构建此 基本示例脚本,以创建一个对您更有用的警报脚本。

默认情况下,Zabbix 将在 Zabbix 提供的 CentOS 7 包的 /usr/lib/zabbix/alertscripts 目录中查找,但这可以通过修改 Zabbix 配置中的 AlertScriptsPath 来更改。确保脚本对于正确的用户是可执行的。

如果您从上面链接的 Bash 脚本示例开始,请确保更改 webhook 密钥和 IP 地址。有关设置传入 webhook 的更多信息,请参阅下面的“配置 Mattermost”或查看 Mattermost 文档

脚本到位后,就可以配置 Zabbix 以使用该脚本,将媒体类型添加到警报,并配置 Zabbix 以将警报发送给您的用户。

添加新的媒体类型

要向 Zabbix 添加新的警报机制,您需要通过将脚本添加到 Zabbix 的 管理 > 媒体类型 部分,告诉它如何使用您在上节中放置的脚本。

Zabbix media types

opensource.com

在“名称”字段中,输入您为新媒体类型选择的任何名称。在“类型”下拉列表中选择“脚本”,并在“脚本名称”字段中输入您在上节中编写的脚本的名称(例如,mattermost.sh)。“脚本参数”部分定义了将直接传递给脚本的内容(例如,在 Bash 引用中为 $1 和 $2)。

为了让 Zabbix 使用新脚本向用户发送警报,必须在用户的媒体设置(即 管理 > 用户 > 媒体)中配置它。在这里,您可以添加媒体类型并设置其活动时间(例如,所有类型的警报均为 24x7 等)。您可以在 Zabbix 文档 中找到有关配置主机的更多信息。

Configuring a user media type in Zabbix

opensource.com

现在 Zabbix 已全部设置完毕,可以开始使用了。

配置 Mattermost

一旦您启动 Mattermost 并配置了一个帐户,您应该为警报创建一个新频道。

Zabbix alerts channel in Mattermost

opensource.com

您需要启用传入 webhook,然后才能为单个频道/用户配置它们。这可以在 Mattermost 系统控制台中的 集成 > 自定义集成 > 启用传入 Webhook 中完成。

Enabling incoming webhooks in Mattermost

opensource.com

启用 webhook 后,您需要使用类似于下图中的 URL 配置传入 webhook。

Add incoming webhooks in Mattermost

opensource.com

测试警报

您可以使用多种方法使 Zabbix 触发警报,但最简单的方法是监控主机并重新启动它(等待 Zabbix 警报涌入),或设置一个简单的服务监控器,例如 HTTPD 监控,并使用 netcat 监听端口 80,一旦 Zabbix 探测到 netcat,会话将结束,Zabbix 将在几分钟后发出警报,说明服务已恢复/关闭。

设置移动警报

如果您想在手机上查看警报,您可以下载适用于 iPhone 和 Android 的 Mattermost 应用程序。该应用程序可以轻松配置为指向 Mattermost 实例的 URL,让您可以轻松地从智能手机监控警报和频道。

Mobile alerts

opensource.com

安全性如何?

为了安全地访问我的虚拟机并远程监控它们,我在我的手机上设置了一个 VPN 端点,该端点连接到我的网络的 VPN 端点。当我的手机连接到互联网和 VPN 时,我也可以在内部访问它们。(诚然,我不太关心我的虚拟机和软件的安全性,因为它们都在我隔离的家庭测试网络上运行。)

如果您正在寻求更深层次的安全性,以下是安全强化的基本最佳实践的非详尽列表

  • 启用 SSL 并使用来自您的内部证书颁发机构、付费的受信任证书提供商或免费证书(例如,Let's Encrypt)的适当 SSL 证书。
  • 使用与最佳实践一致的密码策略和帐户命名约定(例如,不要使用访客帐户,并确保将访客帐户添加到禁用组)。
  • 更改默认的 Zabbix 密码,并确保它仅监听端口 443。
  • 验证所有服务仅在所需的接口上监听。
  • 保护您的 webhook,不要将其暴露给不受信任的网络/设备。
  • 总的来说,如果不需要,请勿将任何服务暴露给互联网或不受信任的网络。
  • 理想情况下,在单独的节点或单独的容器中运行这些服务。
  • 使用本地防火墙或过滤服务保护您的主机。

更进一步

如果有更多时间,构建一个聊天机器人来管理通知将非常有用,这样我就不必进入 Zabbix 并处理警报。这将允许我静音磁盘抖动消耗警告等的警报。向警报添加更多上下文也可能很有帮助,Zabbix 支持的 提供了扩展基本警报的选项。最后,在实践中,最好跨多个站点分布监控,这样您就有更大的机会知道数据中心何时离线。

您对使此监控和警报系统更有用有什么想法?请在评论中分享您的想法。

标签
Conor
我是一名系统管理员,现在专注于系统安全和架构,我对 Linux、安全和一般的黑客技术非常感兴趣(当时间允许时 :])。这就是为什么我决定写一些文章,并分享我使用一些开源软件和主要廉价组件所做的事情。

2 条评论

很棒的文章。感谢您的分享。

Creative Commons License本作品根据 Creative Commons Attribution-Share Alike 4.0 International License 获得许可。
© . All rights reserved.