Zabbix监控系统

zabbix是一个基于WEB界面的提供分布式系统监控以及网络监控功能的企业级开源监控套件。

全面监控

适用于任何IT基础架构、服务、应用程序和资源的监控解决方案

image.png

一. Zabbix基础介绍

1.1 Zabbix简介

Zabbix由Alexei Vladishev创建,目前由其成立的公司:Zabbix SIA积极的持续开发更新维护,并为用户提供技术支持服务。

Zabbix是免费的。Zabbix是根据GPL通用公共许可证的第二版编写和发布的。这意味着产品源代码是免费发布的,可供公共使用。

Zabbix软件能够监控众多网络参数和服务器的健康度、完整性。Zabbix使用灵活的告警机制,允许用户为几乎任何事件配置基于邮件的告警。这样用户可以快速响应服务器问题。Zabbix基于存储的数据提供出色的报表和数据a可视化功能。这些功能使得Zabbix成为容量规划的理想选择。

1.2 Zabbix功能

Zabbix是一个高度成熟完善的网络监控解决方案,一个的软件包中包含了多种功能:

数据采集

  • 可用性和性能检查;
  • 支持SNMP(包括主动轮询和被动捕获)、IPMI、JMX、VMware监控;
  • 自定义检查;
  • 按照自定义的时间间隔采集需要的数据;
  • 通过Server/Proxy和Agents来执行数据采集;

灵活的阈值定义

可以参考后端数据库定义非常灵活的告警阈值,即触发器

高度可配置化的告警

  • 可以根据递增计划、接收者、媒介类型自定义发送告警通知;
  • 使用宏变量可以使告警通知变得更加高效有用;
  • 自动操作包含远程执行命令。

实时图形

使用内置图形功能可以将监控项实时绘制成图形。

Web监控功能

Zabbix可以追踪模拟鼠标在Web网站上的点击操作,来检查Web网站的功能和响应时间。

丰富的可视化选项

  • 可以组合多个监控项到单个视图中,创建自定义图表;
  • 网络拓扑图;
  • 以仪表盘样式展示自定义聚合图形和幻灯片演示;
  • 报表;
  • 监控资源的更高层次展示视图(业务视图)。

历史数据存储

  • 存储在数据库中的数据;
  • 历史配置;
  • 内置数据管理机制(housekeeping)。

配置简单

  • 将被监控设备添加为主机;
  • 主机一旦添加到数据库中,就会采集数据用于监控;
  • 将模板用于监控设备。

使用模板

  • 模板中分组检查;
  • 模板可以关联模板,继承已关联模板的属性。

网络发现

  • 自动发现网络设备;
  • Zabbix Agent发现设备后自动注册;
  • 自动发现文件系统、网络接口和SNMP OIDs值。

快捷的Web界面

  • 基于PHP的Web前端;
  • 可以从任何地方访问
  • 可以定制自己的操作方式;
  • 可以通过审计日志来查看你的操作。

Zabbix API

Zabbix API为Zabbix提供可编程接口,用于批量操作、第三方软件集成和其他用途。

权限管理系统

  • 安全的用户身份验证;
  • 指定的用户只能查看指定的权限范围内的视图。

功能强大且易于扩展的Zabbix Agent

  • 部署于被监控对象上;
  • 支持Linux和Windows;

二进制守护进程

  • 为了更好的性能和更少的内存占用,采用C语言编写;
  • 便于移植。

适应更复杂的环境

使用Zabbix Proxy代理,可以轻松实现分布式远程监控。

1.3 Zabbix架构

Zabbix由几个主要的功能组件组成,其功能介绍如下所示:

Server

Zabbix server是Zabbix软件的核心组件,agent向其报告可用性、系统完整性信息和统计信息。server也是存储所有配置信息、统计信息和操作信息的核心存储库。

数据库

所有配置信息以及Zabbix采集到的数据都被存储在数据库中。

Web界面

为了从任何地方和任何平台轻松访问Zabbix,提供了基于web的界面。该界面是Zabbix server的一部分,通常(但不一定)和Zabbix server运行在同一台物理机器上。

Proxy

Zabbix proxy可以代替Zabbix server采集性能和可用性数据。Zabbix proxy在Zabbix的部署是可选部分;但是proxy的部署可以很好的分担单个Zabbix server的负载。

Agent

Zabbix agents部署在被监控目标上,用于主动监控本地资源和应用程序,并将收集的数据发送给Zabbix server。

数据流

整体的了解下Zabbix内部的数据流对Zabbix的使用也很重要。

  • 首先,为了创建一个采集数据的监控项,您就必须先创建主机。
  • 其次,在任务的另外一端,必须要有监控项才能创建触发器(trigger),必须要有触发器来创建动作(action)。

因此,如果您想要收到类似“X个server上CPU负载过高”这样的告警,您必须首先为Server X创建一个主机条目,其次创建一个用于监控其CPU的监控项,最后创建一个触发器,用来触发CPU负载过高这个动作,并将其发送到您的邮箱里。

虽然这些步骤看起来很繁琐,但是使用模板的话,实际操作非常简单。也正是由于这种设计,使得Zabbix的配置变得更加灵活易用。
image.png

1.4 Zabbix进程

默认情况下zabbix包含5个程序:zabbix_agentd、zabbix_get、zabbix_proxy、zabbix_sender、zabbix_server,另外一个zabbix_java_gateway是可选,这个需要另外安装。下面来分别介绍下他们各自的作用:

zabbix_agentd

客户端守护进程,此进程收集客户端数据,例如cpu负载、内存、硬盘使用情况等

zabbix_get

zabbix工具,单独使用的命令,通常在server或者proxy端执行获取远程客户端信息的命令。通常用于排错。例如在server端获取不到客户端的内存数据,我们可以使用zabbix_get获取客户端的内容的方式来做故障排查。

zabbix_sender

zabbix工具,用于发送数据给server或者proxy,通常用于耗时比较长的检查。很多检查非常耗时间,导致zabbix超时。于是我们在脚本执行完毕之后,使用sender主动提交数据。

zabbix_server

zabbix服务端守护进程。zabbix_agentd、zabbix_get、zabbix_sender、zabbix_proxy、zabbix_java_gateway的数据最终都是提交到server。数据不都是主动提交给zabbix_server,也有的是server主动去获取数据。

zabbix_proxy

zabbix代理守护进程。功能类似server,唯一不同的是它只是一个中转站,它需要把收集到的数据提交/被提交到server上。

zabbix_java_gateway

zabbix2.0之后引入的一个功能。顾名思义:Java网关,类似agentd,但是只用于Java方面。需要特别注意的是,它只能主动去获取数据,而不能被动获取数据。它的数据最终会给到server或者proxy。

二. 部署Zabbix监控系统

2.1 硬件建议

下面是官方给出的硬件参考建议:

规模 平台 CPU/内存 数据库 受监控的主机数量
小型 CentOS Virtual Appliance MySQL InnoDB 100
中型 CentOS 2 CPU cores/2GB MySQL InnoDB 500
大型 RedHat Enterprise Linux 4 CPU cores/8GB RAID10 MySQL InnoDB 或 PostgreSQL >1000
极大型 RedHat Enterprise Linux 8 CPU cores/16GB Fast RAID10 MySQL InnoDB 或 PostgreSQL >10000

2.2 LNMP环境准备

注:如果已经有LNMP环境,可以忽略这部分内容

2.2.1 安装相关YUM源

  1. # 安装阿里云源
  2. # wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
  3. # wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
  4. # sed -i -e '/mirrors.cloud.aliyuncs.com/d' -e '/mirrors.aliyuncs.com/d' /etc/yum.repos.d/CentOS-Base.repo
  5. # nginx官方源
  6. [root@zabbix-server ~]# vim /etc/yum.repos.d/nginx.repo
  7. [nginx-stable]
  8. name=nginx stable repo
  9. baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
  10. gpgcheck=1
  11. enabled=1
  12. gpgkey=https://nginx.org/keys/nginx_signing.key
  13. [nginx-mainline]
  14. name=nginx mainline repo
  15. baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/
  16. gpgcheck=1
  17. enabled=0
  18. gpgkey=https://nginx.org/keys/nginx_signing.key
  19. # MySQL官方源
  20. # wget https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm
  21. # rpm -Uvh mysql80-community-release-el7-3.noarch.rpm
  22. # 安装php72源
  23. # rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm

2.2.2 安装软件

这里要安装Nginx、php-fpm、MySQL及PHP

  1. # 安装一些基本环境需求
  2. [root@zabbix-server ~]# yum install pcre libevent zlib OpenIPMI libssh2 fping libcurl libxml2 net-snmp
  3. # 安装nginx
  4. [root@zabbix-server ~]# yum install nginx -y
  5. # 安装MySQL
  6. [root@zabbix-server ~]# yum remove mariadb-libs -y
  7. [root@zabbix-server ~]# yum install mysql-community-server -y
  8. # 安装PHP
  9. [root@zabbix-server ~]# yum install php72w php72w-gd php72w-ldap php72w-odbc php72w-pear php72w-xml \
  10. > php72w-mbstring php72w-bcmath php72w-mhash php72w-mbstring php72w-ctype php72w-xmlreader \
  11. > php72w-xmlwriter php72w-session php72w-gettext php72w-mysqlnd php72w-snmp
  12. # 安装php-fpm
  13. [root@zabbix-server ~]# yum install php72w-fpm php72w-opcache -y

2.2.3 调整nginx配置,并启动服务

  1. # 调整配置文件
  2. [root@zabbix-server ~]# vim /etc/nginx/conf.d/default.conf
  3. location ~ \.php$ {
  4. root /usr/share/nginx/html;
  5. fastcgi_pass 127.0.0.1:9000;
  6. fastcgi_index index.php;
  7. # fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
  8. fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
  9. include fastcgi_params;
  10. }
  11. [root@zabbix-server ~]# vim /etc/php-fpm.d/www.conf
  12. user = nginx
  13. group = nginx
  14. # 启动服务
  15. [root@zabbix-server ~]# systemctl enable php-fpm.service
  16. [root@zabbix-server ~]# systemctl start php-fpm.service
  17. [root@zabbix-server ~]# systemctl enable nginx.service
  18. [root@zabbix-server ~]# systemctl start nginx.service
  19. # 防火墙放行
  20. [root@zabbix-server ~]# firewall-cmd --add-service=http --permanent
  21. [root@zabbix-server ~]# firewall-cmd --reload

2.2.4 测试PHP

  1. [root@zabbix-server ~]# vim /usr/share/nginx/html/test.php
  2. <?php
  3. phpinfo();
  4. ?>
  5. # 客户端使用浏览器访问http://192.168.154.101/test.php成功即可

2.2.5 配置MySQL

  1. [root@zabbix-server ~]# systemctl enable mysqld.service
  2. [root@zabbix-server ~]# systemctl start mysqld.service
  3. #MySQL启动后会生成临时密码
  4. [root@www ~]# grep 'temporary password' /var/log/mysqld.log
  5. 2019-05-25T03:30:25.989353Z 5 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: gw2yrdVKWy,g
  6. #通过使用生成的临时密码登录并为超级用户帐户设置自定义密码,尽快更改root密码:
  7. [root@www ~]# mysql -u root -pgw2yrdVKWy,g
  8. #进入数据库后更改密码
  9. mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'MyNewPass4!';
  10. #注意:MySQL的 validate_password插件默认安装。
  11. #这将要求密码包含至少一个大写字母,一个小写字母,一个数字和一个特殊字符,并且密码总长度至少为8个字符。

2.2.6 创建MySQL数据库管理员

  1. #认证机制必须是mysql_native_password;默认mysql8使用 caching_sha2_password的身份验证机制。
  2. mysql> create user 'dbadmin'@'%' identified with mysql_native_password by 'Com.123456';
  3. mysql> grant all on *.* to 'dbadmin'@'%';
  4. mysql> grant GRANT OPTION on *.* to 'dbadmin'@'%';

2.2.7 测试PHP是否可以成功连接MySQL数据库

  1. #在Nginx根目录下编辑MySQL连接测试文件
  2. [root@zabbix-server html]# vim mysql_test.php
  3. <?PHP
  4. $conn=mysqli_connect("localhost","dbadmin","your_dbpasswd");
  5. if($conn){
  6. echo"ok";
  7. }else{
  8. echo"error";
  9. }
  10. ?>
  11. #客户端使用浏览器访问mysql_test.php,如果显示“ok”即成功连接。

2.3 安装和配置 Zabbix server

2.3.1 安装Zabbix源

  1. [root@zabbix-server ~]# rpm -Uvh https://repo.zabbix.com/zabbix/4.4/rhel/7/x86_64/zabbix-release-4.4-1.el7.noarch.rpm
  2. [root@zabbix-server ~]# yum clean all

2.3.2 安装 Zabbix server, frontend, agent

  1. [root@zabbix-server ~]# yum -y install zabbix-server-mysql zabbix-web-mysql zabbix-nginx-conf zabbix-agent

2.3.3 创建初始化数据库

  1. #创建zabbix数据库及zabbix用户
  2. [root@zabbix-server zabbix]# mysql -uroot -pCom.123456
  3. mysql> create database zabbix character set utf8 collate utf8_bin;
  4. Query OK, 1 row affected, 2 warnings (0.00 sec)
  5. mysql> create user 'zabbix'@'localhost' identified with mysql_native_password by 'Com.123456';
  6. Query OK, 0 rows affected (0.00 sec)
  7. mysql> grant all privileges on zabbix.* to 'zabbix'@'localhost';
  8. Query OK, 0 rows affected (0.01 sec)
  9. mysql> quit
  10. #导入数据库数据
  11. [root@zabbix-server zabbix]# zcat /usr/share/doc/zabbix-server-mysql*/create.sql.gz | mysql -uzabbix -p zabbix

2.3.5 为Zabbix server配置数据库

  1. [root@zabbix-server ~]# vim /etc/zabbix/zabbix_server.conf
  2. DBPassword=Com.123456

2.3.6 为Zabbix frontend配置PHP

  1. #调整nginx配置文件
  2. [root@zabbix-server ~]# mv /etc/nginx/conf.d/default.conf /etc/nginx/conf.d/default.conf.bak
  3. [root@zabbix-server ~]# vim /etc/nginx/conf.d/zabbix.conf
  4. listen 80;
  5. server_name example.com;
  6. #调整到正确时区
  7. [root@zabbix-server ~]# vim /etc/php-fpm.d/zabbix.conf
  8. php_value[date.timezone] = Asia/Shanghai

2.3.7 启动Zabbix server和agent服务

  1. [root@zabbix-server zabbix]# systemctl enable zabbix-server.service
  2. [root@zabbix-server zabbix]# systemctl enable zabbix-agent.service
  3. [root@zabbix-server zabbix]# systemctl start zabbix-server.service zabbix-agent.service
  4. [root@zabbix-server zabbix]# systemctl restart nginx.service php-fpm.service

2.3.8 配置Zabbix frontend

  • 使用浏览器连接到 http://server_ip_or_name
  • 跟着向导一步一步安装: Installing frontend
  • 安装成功后,登录默认用户名Admin,密码:zabbix

image.png

2.3.9 修改页面语言及登录密码

首先使用默认用户名Admin登录zabbix服务器,选中administration,再点击users,然后点击Admin用户。

Zabbix监控系统 - 图4

  • 点击”Change password”可以打开更改密码选项卡;
  • “Language”可以选择界面语言,可以选择中文;
  • “Groups”可以调整所属的组;
  • “Theme”可以调整界面主题风格;
  • 选中administration,再点击users,然后点击create user用户,可以创建新用户

2.3.10 修改zabbix中文乱码

Zabbix安装后,当显示语言为中文时,会发现中文乱码情况,这主要是字体导致的问题。如果要解决,需要下载合适的字体,并将其上传到zabbix服务器上。

Zabbix监控系统 - 图5

在windows主机的“C:\Windows\Fonts”下可以找到楷体文件,即:simkai.ttf文件,将其上传到zabbix服务器的文档根目录中,YUM安装的默认安装目录在/usr/share/zabbix中。

  1. [root@zabbix-server zabbix]# cp simkai.ttf /usr/share/zabbix/assets/fonts
  2. [root@zabbix-server zabbix]# cd /usr/share/zabbix/assets/fonts/
  3. [root@zabbix-server fonts]# ls
  4. graphfont.ttf simkai.ttf

然后修改PHP页面指定的字体文件:

  1. [root@zabbix-server zabbix]# vim /usr/share/zabbix/include/defines.inc.php
  2. define('ZBX_GRAPH_FONT_NAME', 'simkai'); // font file name
  3. define('ZBX_FONT_NAME', 'simkai');
  4. #原先的名字为:graphfont
  5. #修改完毕后,刷新界面即可

2.4 Zabbix监控服务器

2.4.1 在被监控服务器上安装agent

如果希望监控linux服务器,可以使用agent的方式,即在linux服务器上安装zabbix的agent。

  1. [root@web001 ~]# rpm -ivh zabbix-agent-4.4.5-2.el7.x86_64.rpm

修改agent的配置文件/etc/zabbix/zabbix_agentd.conf,主要设置3项内容:

  1. [root@web001 ~]# vim /etc/zabbix/zabbix_agentd.conf
  2. #允许server来agent主动取数据
  3. Server=192.168.154.101
  4. #允许agent主动提交数据给server
  5. ServerActive=192.168.154.101
  6. #这个名字将要被添加到server的主机列表里
  7. Hostname=web001

启动agent服务并设置开启启动,默认端口为10050,需要在防火墙中放行(如果开启)

  1. [root@web001 ~]# systemctl enable zabbix-agent.service
  2. [root@web001 ~]# systemctl start zabbix-agent.service
  3. [root@web001 ~]# firewall-cmd --add-service=zabbix-agent --permanent
  4. [root@web001 ~]# firewall-cmd --reload

2.4.2 在zabbix服务器上去添加主机

选择“配置”->“主机”->“创建主机”

主机名称添加:web001,需要和agent配置文件中hostname配置一致,添加到默认的linux servers群组中,在agent代理程序接口处添加web001的IP地址。
Zabbix监控系统 - 图6

选择“模板”界面,将链接的模板选择为”Template OS Linux”,点击添加,添加主机

Zabbix监控系统 - 图7

稍微过一段时间,可以看到下图情况,可用性处“ZBX”为绿色,则表示添加成功。

Zabbix监控系统 - 图8

也可以去查看监控中的图形情况,选择监控项即可查看

Zabbix监控系统 - 图9

2.4.3 监控其它网络设备和服务器

  • Windows服务器:添加过程和Linux服务器相似,安装Windows版的agent程序,配置后添加即可
  • 路由器等网络设备:可以采用SNMP方式进行监控添加。
    • 网络设备一般都是支持SNMP协议来做监控,所以首先要在交换机上配置IP地址,并开启SNMP,主要是设置共同体的值。 ```

      cisco设备配置

      switch(config)#snmp-server community redhat RO 设置被服务器轮询的只读共同体 switch(config)#snmp-server enable traps tty switch(config)#snmp-server host 192.168.10.158 redhat 设置发送trap消息的共同体

华为设备配置

snmp-agent snmp-agent community write redhat snmp-agent sys-info version all snmp-agent trap enable

  1. - zabbix server也需要开启snmp服务,并在防火墙中放行

[root@zabbix-server zabbix]# systemctl start snmpd.service [root@zabbix-server zabbix]# systemctl start snmptrapd.service

[root@zabbix-server zabbix]# firewall-cmd —add-service=snmp [root@zabbix-server zabbix]# firewall-cmd —add-service=snmptrap ```

  • 然后登陆到zabbix web界面,选择“配置”,选择“主机群组”,点击“创建主机群组”;创建群组“网络设备”;
  • 选择“主机”,点击“创建主机”;移除默认的“agent代理程序的接口”,添加“SNMP接口”,并在地址栏中添加交换机的管理IP地址;

Zabbix监控系统 - 图10

  • 在“模板”中,选择“Template Net Network Generic Device SNMPv2”模板,点击“添加”,添加到“链接的模板”中;

Zabbix监控系统 - 图11

  • 选择“宏”面板,切换到“继承以及主机宏”,将宏{$SNMP_COMMUNITY}的可用值修改成同交换机上配置的相同,为“redhat”,然后点击“添加”,添加主机。

Zabbix监控系统 - 图12

  • 如果配置成功,选择“主机”,可以看到“switch001”主机,且可用性中“SNMP”为绿色

Zabbix监控系统 - 图13

  • 查看图形报表,可以选择“监测”,然后选择“图形”,选择“switch001”主机,然后再选择具体的监控内容,进行查看。如果希望可以看到接口的流量情况,需要让交换机的接口上通过流量。

Zabbix监控系统 - 图14

2.4.4 可以编辑dashboard组件

可将自己监控的特别关注的信息添加到“仪表盘”。

Zabbix监控系统 - 图15