原文:https://hackernoon.com/understanding-zabbix-f2a83eeb1221
监控所有服务器基础设施。
背景
在为我们的产品设置基础设施时http://bit.ly/use-highlights我正在寻找用于服务器基础设施监控的开源工具,而不是藏着一颗炸弹(译者按:不监控大概就是藏着一颗炸弹吧),并且可以随着我们改进(服务架构)帮助我们自定义化。 两个主要的竞争者是Nagios和Zabbix。 我读了几篇比较两者的帖子,但是https://www.comparitech.com/net-admin/nagios-vs-zabbix/?lphiltid=5bfd07b68e39bb080950ca0b是我最喜欢的文章,因为我觉得它非常客观和详细。 我对Nagios的一个主要优势是你可以使用现有的设置升级到Nagios ** Nagios XI **。 但是对于我们的场景,我们觉得Zabbix绰绰有余。 所以就使用Zabbix吧。
这不是详细的"HowTo"博客。 但这将是我的学习总结,链接到适用于我的相关安装指南,链接到详细的"TODO"文章和我的经验法则。
安装前的一些基础知识
Zabbix有三个主要组件。 Zabbix Server,保存...(译者按:意思为保存数据) Zabbix Agent和Zabbix Web Interface。 Zabbix Server是从您要监视的服务器收集所有相关数据的服务器。 要监视的服务器称为“Agent”。 您可以在没有Zabbix Web部件的情况下监控服务器。 但我建议使用它,因为它可以让体验变得更好。
如果您只想在安装任何内容之前了解用户界面,请访问https://zabbix.org/zabbix/index.php并“以访客身份登录”。 您将没有“配置”和“管理”选项卡,但可以查看“监视”,“清单”和“报告”部分。
安装
我将在此处跳过详细信息,因为您可以从互联网上找到“HOWTO”文章。 我们使用的是Ubuntu服务器,https://twitter.com/tecadmin的以下文章非常方便。
- 安装Zabbix Server -- https://tecadmin.net/install-zabbix-on-ubuntu/
- 安装Zabbix Agent -- https://tecadmin.net/install-zabbix-agent-on-ubuntu-and-debian
- 将主机(host)添加到 Zabbix Server中以便监控 -- https://tecadmin.net/add-host-zabbix-server-monitor
默认情况下,Zabbix Web Interface使用apache。 如果您不想在其位置使用Nginx,请在您的nginx中添加以下配置(译者按:配置内容为译者补充)。
server {
listen 80 default;
root /data/www/default;
index index.php index.html;
include /etc/nginx/conf.d/default-*.conf;
include /data/conf/nginx/conf.d/default-*.conf;
# PHP backend is not in the default-*.conf file set,
# as some vhost might not want to include it.
include /etc/nginx/conf.d/php-location.conf;
# Import configuration files for status pages for Nginx and PHP-FPM
include /etc/nginx/conf.d/stub-status.conf;
include /etc/nginx/conf.d/fpm-status.conf;
}
可参考Dockbix的Nginx配置(译者按:译者补充,monitoringartist/dockbix-xxl包含了具有启迪意义的代码,代码涉及到Dockerfile的分层思路、supervisor、inotify-util和脚本配合,从容器环境变量可选择性地启动容器的功能等,在代码结构上也层次分明,具有通用性。)
经验法则
从主机组,用户组和模板这些方面,考虑您要进行监控的所有操作。
快速词汇表
-
Zabbix Server
这是监控所有内容的主服务器。 如需安装,请点击此链接。
通常,Web Interface也仅安装在此服务器上。 我个人觉得(不太确定)最好将它与需要监控的其他服务器分开。
这样,即使实际的服务器群体停机,我们也能够至少监控停机时间以及它们可能已经停机的原因。 -
Zabbix Agent
这是一个软件,可以帮助将数据从被监控的服务器发送到Zabbix Server。 如果您还要监视Zabbix服务器,也可以在该服务器中安装Zabbix Agent。
-
Zabbix Host
Host是您需要监控的服务器。 因此,如果您需要监视三个不同的服务器,则在所有这些服务器上安装Zabbix Agent。
-
在Zabbix Server中添加Host
在各自的服务器中安装Zabbix Server和Agent后,还需要在Zabbix Server中添加主机。
-
Host Groups
主机组可以作为分类或标记。 我觉得在主机组的使用上想得自由一点比较有益。
以下是我创建的一些主机组#LearningPaths,#staging,#live,#database,#mongodb,#appserver,#search。
使用模板或“创建”操作时,这些主机组将非常方便。 -
Templates
将模板视为可应用于各种主机组的监控模板。 根据经验,我总是将模板应用于主机组。
如果想要删除主机或仅将模板应用于一个主机,这是我的指导标准,我可以重新设置主机组或添加符合当前条件的新主机组。
这为我节省了很多时间。 我在其他标准之前提到模板,因为我认为从模板和组的角度思考一切是非常重要的。 -
Template OS Linux
默认情况下安装Zabbix完就存在。 这提供了其他监视服务中通常可用的大多数参数,如CPU使用率,CPU负载,内存使用量等。
这已经配置了数据指标,对于服务器级别监控来说已经足够了。 我们更改了平均CPU负载的触发器,因为它引发了太多错误警报。
我们目前正在配置以下两个(模板)。 如果你有幸安装这两个,请发表评论。 我能够获得所有相关数据,但我无法将其推送到Zabbix服务器(指Zabbix官网·社区)。
我认为它与trap设置有关。 我还在搞清楚。- Zabbix MongoDB Template — https://github.com/omni-lchen/zabbix-mongodb
- Zabbix Elastic Search Templates — https://github.com/zarplata/zabbix-agent-extension-elasticsearch
定制化
正如我之前提到的,我发现总是在Templates和Host Groups方面进行思考是有用的。
因此,如果您计划创建任何新项目/触发器,请确保将它们添加到相关模板中,然后关联到主机组。
首先为要跟踪的每个数据点创建一个项目。 您可以按照这些步骤
https://www.zabbix.com/documentation/3.4/manual/config/items/item中的步骤操作
然后,您可以根据这些项目值创建触发器。 您可以按照
https://www.zabbix.com/documentation/3.4/manual/config/triggers/trigger
中的步骤创建触发器。
调试
虽然Web Interface挺好的,但是我觉得对于调试来说,用控制台会更好。
在监控者服务器上
-
检查您可以通过10050端口连接上Agent。
telnet <ip-of-your-agent> 10050
-
使用zabbix-get
[root@8a11e51b8ddb nginx]# zabbix_get usage: zabbix_get -s host-name-or-IP [-p port-number] [-I IP-address] -k item-key zabbix_get -s host-name-or-IP [-p port-number] [-I IP-address] --tls-connect cert --tls-ca-file CA-file [--tls-crl-file CRL-file] [--tls-agent-cert-issuer cert-issuer] [--tls-agent-cert-subject cert-subject] --tls-cert-file cert-file --tls-key-file key-file -k item-key zabbix_get -s host-name-or-IP [-p port-number] [-I IP-address] --tls-connect psk --tls-psk-identity PSK-identity --tls-psk-file PSK-file -k item-key zabbix_get -h zabbix_get -V [root@8a11e51b8ddb nginx]# zabbix_get -s 192.168.79.128 -k agent.ping 1 [root@8a11e51b8ddb nginx]# zabbix_get -s 192.168.79.128 -k agent.hostname k8s-master-01.local [root@8a11e51b8ddb nginx]#
在需要被监控的服务器/客户端上
在基本配置(Passive Agent)中,监控者服务器将询问数据。 因此,如果您的服务器可以与代理进行通信,那就足够了。
但如果使用Active Agent模式,那么您需要保证您的Agent可以连接您的监控者服务器并且可以推送数据。(编者按:监控者服务器指Zabbix Server所在的服务器)
-
检查您可以连接到服务器端的10050端口。
telnet <ip-of-your-server> 10050
-
检查是否有安装zabbix-sender,没有的话安装它。
sudo apt-get install zabbix-sender
-
当Zabbix sender安装好后您可以运行以下命令
zabbix_sender -vv -z [serverIp] -p 10051 -s [clientName] -k traptest -o "Test value"
在Active Agent配置中请注意,推送到服务器的所有数据都应该是Item类型trapper。
因此,在上面的示例中,您应该在服务器上使用密钥traptest创建了一个trapper类型的项目。
还要确保在服务器上创建项目时,您发送的数据是指定的类型。
报告
仪表板是可自定义的。 所以你可以改变它以列出的所有相关问题。 我个人喜欢的另一个功能是屏幕。 我们添加了服务器的所有心跳图,我们可以像这样跟踪它们的数据。
通知
我认为Zabbix中的通知很棒,因为它是高度可配置的。
我们使用结合sendgrid使用Zabbix。Zabbix UI中的默认通知对我们来说效果不佳。
所以我们使用了脚本路由。我们使用了库https://github.com/mkgin/sendgrid_zabbix_alert。
Zabbix通知的调试可能有点刺激。 我刚刚创建了一个草稿,当我有时间的时候会更新。