一.Zabbix概述
zabbix是一个基于WEB界面的提供分布式系统监视以及网络监视功能的企业级的开源解决方案。zabbix能监视各种网络参数,保证服务器系统的安全运营;并提供灵活的通知机制以让系统管理员快速定位/解决存在的各种问题。
它是一个用于网络,操作系统和应用程序的开源监控软件,由拉脱维亚的Alexei Vladishev创建。它旨在监视和跟踪各种网络服务,服务器和其他网络硬件的状态。
Zabbix可以使用MySQL,MariaDB,PostgreSQL,SQLite,Oracle或IBM DB2来存储数据。它的后端用C语言编写,Web前端用PHP编写。Zabbix提供多种监控选项:
简单检查可以验证标准服务(如SMTP或HTTP)的可用性和响应性,而无需在受监视主机上安装任何软件。
还可以在UNIX和Windows主机上安装Zabbix 代理,以监视CPU负载,网络利用率,磁盘空间等统计信息。
作为在主机上安装代理的替代方法,Zabbix支持通过SNMP,TCP和ICMP检查以及IPMI,JMX,SSH,Telnet和使用自定义参数进行监控。Zabbix支持各种近实时通知机制,包括XMPP。
二.Zabbix特点
1.自动发现服务器和网络设备,支持在底层自动发现
2.分布式的监控体系和集中式的web管理
3.支持主动监控和被动监控模式
4.支持多种操作系统 Linux, Solaris, HP-UX, AIX, FreeBSD, OpenBSD, OS X
5.安全的用户认证模式以及灵活的用户权限设置。
6.支持自由的自定义事件和邮件发送。
7.高水平的业务视图监控资源并支持日志审计。
三.Zabbix的组件及进程
组件
zabbix由以下几个组件部分构成:
1.Zabbix Server:负责接收agent发送的报告信息的核心组件,所有配置,统计数据及操作数据均由其组织进行
2.Database Storage:专用于存储所有配置信息,以及由zabbix收集的数据
3.Web interface:zabbix的GUI接口,通常与Server运行在同一台主机上
4.Proxy:可选组件,常用于分布监控环境中,代理Server收集部分被监控端的监控数据并统一发往Server端
5.Agent:部署在被监控主机上,负责收集本地数据并发往Server端或Proxy端
注:zabbix node也是 zabbix server的一种 。
进程
默认情况下zabbix包含5个程序:zabbix_agentd、zabbix_get、zabbix_proxy、zabbix_sender、zabbix_server,另外一个zabbix_java_gateway是可选,这个需要另外安装。下面来分别介绍下他们各自的作用。
1.zabbix_agentd
客户端守护进程,此进程收集客户端数据,例如cpu负载、内存、硬盘使用情况等。
2.zabbix_get
zabbix工具,单独使用的命令,通常在server或者proxy端执行获取远程客户端信息的命令。通常用户排错。例如在server端获取不到客户端的内存数据,我们可以使用zabbix_get获取客户端的内容的方式来做故障排查。
3.zabbix_sender
zabbix工具,用于发送数据给server或者proxy,通常用于耗时比较长的检查。很多检查非常耗时间,导致zabbix超时。于是我们在脚本执行完毕之后,使用sender主动提交数据。
4.zabbix_server
zabbix服务端守护进程。zabbix_agentd、zabbix_get、zabbix_sender、zabbix_proxy、zabbix_java_gateway的数据最终都是提交到server
备注:当然不是数据都是主动提交给zabbix_server,也有的是server主动去取数据。
5.zabbix_proxy
zabbix代理守护进程。功能类似server,唯一不同的是它只是一个中转站,它需要把收集到的数据提交/被提交到server里。为什么要用代理?代理是做什么的?卖个关子,请继续关注运维生存时间zabbix教程系列。
6.zabbix_java_gateway
zabbix2.0之后引入的一个功能。顾名思义:Java网关,类似agentd,但是只用于Java方面。需要特别注意的是,它只能主动去获取数据,而不能被动获取数据。它的数据最终会给到server或者proxy。
四.zabbix监控环境中相关术语
1.主机(host):要监控的网络设备,可由IP或DNS名称指定;
2.主机组(host group):主机的逻辑容器,可以包含主机和模板,但同一个组织内的主机和模板不能互相链接;主机组通常在给用户或用户组指派监控权限时使用;
3.监控项(item):一个特定监控指标的相关的数据;这些数据来自于被监控对象;item是zabbix进行数据收集的核心,相对某个监控对象,每个item都由”key”标识;
4.触发器(trigger):一个表达式,用于评估某监控对象的特定item内接收到的数据是否在合理范围内,也就是阈值;接收的数据量大于阈值时,触发器状态将从”OK”转变为”Problem”,当数据再次恢复到合理范围,又转变为”OK”;
5.事件(event):触发一个值得关注的事情,比如触发器状态转变,新的agent或重新上线的agent的自动注册等;
6.动作(action):指对于特定事件事先定义的处理方法,如发送通知,何时执行操作;
7.报警升级(escalation):发送警报或者执行远程命令的自定义方案,如每隔5分钟发送一次警报,共发送5次等;
8.媒介(media):发送通知的手段或者通道,如Email、Jabber或者SMS等;
9.通知(notification):通过选定的媒介向用户发送的有关某事件的信息;
10.远程命令(remote command):预定义的命令,可在被监控主机处于某特定条件下时自动执行;
11.模板(template):用于快速定义被监控主机的预设条目集合,通常包含了item、trigger、graph、screen、application以及low-level discovery rule;模板可以直接链接至某个主机;
12.应用(application):一组item的集合;
13.web场景(web scennario):用于检测web站点可用性的一个活多个HTTP请求;
14.前端(frontend):Zabbix的web接口;
五.部署Zabbix
1.基础环境配置
节点配置主机名:
[root@localhost ~]# hostnamectl set-hostname zabbix-server
[root@localhost ~]# su
[root@zabbix-server ~]#
[root@localhost ~]# hostnamectl set-hostname zabbix-agent
[root@localhost ~]# su
[root@zabbix-agent ~]#
上传压缩包并解压
[root@zabbix-server ~]# ls
anaconda-ks.cfg zabbix zabbix.zip
[root@zabbix-server ~]# mv zabbix /opt/
[root@zabbix-server ~]# cd /opt/
[root@zabbix-server opt]# ls
centos zabbix
Yum源配置
在/etc/yum.repo.d目录下创建local.repo文件,文件内容如下:
[root@zabbix-server ~]# vim /etc/yum.repos.d/local.repo
[centos]
name=centos7
baseurl=file:///opt/centos
gpgcheck=0
enable=1
[zabbix]
name=zabbix
baseurl=file:///opt/centos
gpgcheck=0
enabled=1
[root@zabbix-server ~]# yum clean all
[root@zabbix-server ~]# yum repolist
接下来配置zabbix-agent节点的YUM源。首先在zabbix-server节点上安装vsftpd服务。
[root@zabbix-server ~]# yum install vsftpd -y
修改vsftpd服务的配置文件vsftpd.conf,在配置文件的最上面,添加一行代码,命令如下:
[root@zabbix-server ~]# vi /etc/vsftpd/vsftpd.conf
anon_root=/opt
保存修改并退出,启动vsftpd服务,命令如下:
[root@zabbix-server ~]# systemctl start vsftpd
[root@zabbix-server ~]# systemctl status vsftpd
● vsftpd.service - Vsftpd ftp daemon
Loaded: loaded (/usr/lib/systemd/system/vsftpd.service; disabled; vendor preset: disabled)
Active: active (running) since Mon 2021-10-25 21:38:21 EDT; 3s ago
Process: 1502 ExecStart=/usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf (code=exited, status=0/SUCCESS)
Main PID: 1503 (vsftpd)
CGroup: /system.slice/vsftpd.service
└─1503 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf
Oct 25 21:38:21 zabbix-server systemd[1]: Starting Vsftpd ftp daemon...
Oct 25 21:38:21 zabbix-server systemd[1]: Started Vsftpd ftp daemon.
到zabbix-agent节点上,首先将/etc/yum.repo.d目录下的所有文件移动到/media目录下,然后创建local.repo文件,文件内容如下所示:
[root@zabbix-agent ~]# vi /etc/yum.repos.d/local.repo
[centos]
name=centos
baseurl=ftp://192.168.200.40/centos
gpgcheck=0
enabled=1
[zabbix]
name=zabbix
baseurl=ftp://192.168.200.40/zabbix
gpgcheck=0
enabled=1
[root@zabbix-agent ~]# yum clean all
[root@zabbix-agent ~]# yum repolist
至此,2个节点的Yum源全部配置完毕。
安装LAMP+Zabbix服务(在zabbix-server节点执行)
安装httpd服务,命令如下:
[root@zabbix-server ~]# yum install httpd -y
安装数据库服务,命令如下:
[root@zabbix-server ~]# yum install -y mariadb-server mariadb
安装Zabbix服务,命令如下:
[root@zabbix-server ~]# yum install -y zabbix-server-mysql zabbix-web-mysql zabbix-agent mariadb-server
升级trousers服务,命令如下:
[root@zabbix-server ~]# yum install trousers -y
2.zabbix分布式监控系统部署
1.配置并启动Zabbix服务
(1)启动httpd服务
使用命令启动httpd服务,并设置开机自启,最后查看运行状态。命令如下:
[root@zabbix-server ~]# systemctl start httpd
[root@zabbix-server ~]# systemctl enable httpd
Created symlink from /etc/systemd/system/multi-user.target.wants/httpd.service to /usr/lib/systemd/system/httpd.service.
[root@zabbix-server ~]# systemctl status httpd
● httpd.service - The Apache HTTP Server
Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled; vendor preset: disabled)
Active: active (running) since Mon 2021-10-25 21:46:08 EDT; 44s ago
Docs: man:httpd(8)
man:apachectl(8)
Main PID: 1757 (httpd)
Status: "Total requests: 0; Current requests/sec: 0; Current traffic: 0 B/sec"
CGroup: /system.slice/httpd.service
├─1757 /usr/sbin/httpd -DFOREGROUND
├─1765 /usr/sbin/httpd -DFOREGROUND
├─1766 /usr/sbin/httpd -DFOREGROUND
├─1767 /usr/sbin/httpd -DFOREGROUND
├─1768 /usr/sbin/httpd -DFOREGROUND
└─1769 /usr/sbin/httpd -DFOREGROUND
Oct 25 21:45:48 zabbix-server systemd[1]: Starting The Apache HTTP Server...
Oct 25 21:45:58 zabbix-server httpd[1757]: AH00558: httpd: Could not reliably determine the server's fully qualified domain name, ...message
Oct 25 21:46:08 zabbix-server systemd[1]: Started The Apache HTTP Server.
Hint: Some lines were ellipsized, use -l to show in full.
(2)启动并配置数据库服务
启动数据库服务,并设置开机自启,命令如下:
[root@zabbix-server ~]# systemctl start mariadb
[root@zabbix-server ~]# systemctl enable mariadb
Created symlink from /etc/systemd/system/multi-user.target.wants/mariadb.service to /usr/lib/systemd/system/mariadb.service.
登录数据库,创建zabbix库(中文编码格式),命令如下:
[root@zabbix-server ~]# mysql
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 2
Server version: 5.5.56-MariaDB MariaDB Server
Copyright (c) 2000, 2017, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [(none)]> create database zabbix character set utf8 collate utf8_bin;
Query OK, 1 row affected (0.00 sec)
MariaDB [(none)]> grant all privileges on zabbix.* to zabbix@'%' identified by 'zabbix';
Query OK, 0 rows affected (0.00 sec)
MariaDB [(none)]> grant all privileges on zabbix.* to zabbix@localhost identified by 'zabbix';
Query OK, 0 rows affected (0.00 sec)
退出数据库,进入到/usr/share/doc/zabbix-server-mysql-3.4.15/目录,导入数据库文件,命令如下:
MariaDB [(none)]> quit
Bye
[root@zabbix-server ~]# cd /usr/share/doc/zabbix-server-mysql-3.4.15/
[root@zabbix-server zabbix-server-mysql-3.4.15]# ll
total 2120
-rw-r--r-- 1 root root 98 Nov 12 2018 AUTHORS
-rw-r--r-- 1 root root 866545 Nov 12 2018 ChangeLog
-rw-r--r-- 1 root root 17990 Nov 12 2018 COPYING
-rw-r--r-- 1 root root 1267039 Nov 12 2018 create.sql.gz
-rw-r--r-- 1 root root 52 Nov 12 2018 NEWS
-rw-r--r-- 1 root root 1062 Nov 12 2018 README
[root@zabbix-server zabbix-server-mysql-3.4.15]# zcat create.sql.gz |mysql -uroot zabbix
至此,数据库配置完毕。
(3)设置时区
编辑/etc/php.ini文件,设置时区,在[Date]字段下,设置date.timezone=PRC,命令如下:
[root@zabbix-server ~]# vi /etc/php.ini
[Date]
; Defines the default timezone used by the date functions
; http://php.net/date.timezone
date.timezone = PRC
编辑/etc/httpd/conf.d/zabbix.conf文件,修改时区,修改php_value date.timezone 为Asia/Shanghai,命令如下:
[root@zabbix-server ~]# vi /etc/httpd/conf.d/zabbix.conf
#
# Zabbix monitoring system php web frontend
#
Alias /zabbix /usr/share/zabbix
<Directory "/usr/share/zabbix">
Options FollowSymLinks
AllowOverride None
Require all granted
<IfModule mod_php5.c>
php_value max_execution_time 300
php_value memory_limit 128M
php_value post_max_size 16M
php_value upload_max_filesize 2M
php_value max_input_time 300
php_value max_input_vars 10000
php_value always_populate_raw_post_data -1
# php_value date.timezone Europe/Riga
php_value date.timezone Asia/Shanghai
</IfModule>
修改完配置文件后重启httpd服务,命令如下:
[root@zabbix-server ~]# systemctl restart httpd
(4)修改Zabbix配置文件并启动
修改/etc/zabbix/zabbix_server.conf配置文件,修改完的配置文件如下所示:
[root@zabbix-server ~]# vi /etc/zabbix/zabbix_server.conf
[root@zabbix-server ~]# grep -n '^'[a-Z] /etc/zabbix/zabbix_server.conf
38:LogFile=/var/log/zabbix/zabbix_server.log
49:LogFileSize=0
72:PidFile=/var/run/zabbix/zabbix_server.pid
82:SocketDir=/var/run/zabbix
91:DBHost=localhost
100:DBName=zabbix
116:DBUser=zabbix
124:DBPassword=zabbix
132:DBSocket=/var/lib/mysql/mysql.sock
330:SNMPTrapperFile=/var/log/snmptrap/snmptrap.log
447:Timeout=4
489:AlertScriptsPath=/usr/lib/zabbix/alertscripts
499:ExternalScripts=/usr/lib/zabbix/externalscripts
535:LogSlowQueries=3000
3.启动Zabbix服务
[root@zabbix-server ~]# systemctl start zabbix-server
查看端口号,验证zabbix-server的服务端口10051是否存在,命令如下:
[root@zabbix-server ~]# netstat -ntpl
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:10051 0.0.0.0:* LISTEN 2485/zabbix_server
tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN 2214/mysqld
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 912/sshd
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 1328/master
tcp6 0 0 :::10051 :::* LISTEN 2485/zabbix_server
tcp6 0 0 :::80 :::* LISTEN 2466/httpd
tcp6 0 0 :::22 :::* LISTEN 912/sshd
tcp6 0 0 ::1:25 :::* LISTEN 1328/master
至此,Zabbix监控服务的server端配置完毕,接下来需要在Web界面操作。
4.使用Zabbix服务
(1)登录界面
在浏览器访问192.168.20.10/zabbix,进入Zabbix安装向导,单击右下角“Next step”按钮,进入下一步操作,如图4-6-1所示:
图1-3-1 Zabbix安装向导
显示PHP版本信息等内容,然后单击右下角“Next step”按钮,进入下一步操作,如图4-6-2所示:
图1-3-2 显示PHP版本信息
填写连接数据库的必要信息,Password为zabbix,填写内容如图4-6-3所示,填写完毕后单击右下角“Next step”按钮,进行下一步操作。
图1-3-3 填写连接数据库的信息
填写Zabbix服务端的详细信息,内容如图4-6-4所示,Name字段可以随意填写,是给监控平台起个名字。然后单击右下角“Next step”按钮,进行下一步操作。
图1-3-4填写Zabbix服务端的详细信息
平台配置概况如图4-6-5所示,确认后单击右下角“Next step”按钮。
图1-3-5 平台配置概况
安装Zabbix,安装成功后,单击右下角“Finish”按钮,结束安装,如图4-6-6所示。
图1-3-6 结束配置
单击“Finish”按钮后,进入登录界面,使用默认的用户名和密码Admin/zabbix登录,如图4-6-7所示。
图1-3-7 登录Zabbix平台
进入Zabbix主页,如图1-3-8所示。
图1-3-8 Zabbix主页
(2)中文界面
单击右上角的头像按钮,进入设置界面,如图4-6-9所示。
图1-3-9 用户界面
将“Language”一栏修改为“Chinexe(zh CN)”,然后单击下方“Update”按钮,如图4-6-10所示。
图1-3-10 修改界面配置
中文界面的Zabbix监控界面已配置完成,如图4-6-11所示。
图1-3-11 配置完成
(3)添加被监控机器
回到zabbix-agent节点,安装zabbix-agent服务,命令如下:
[root@zabbix-agent ~]# yum install -y zabbix-agent
修改/etc/zabbix/zabbix_agentd.conf配置文件,配置zabbix-agent,修改如下:
[root@zabbix-agent ~]# vi /etc/zabbix/zabbix_agentd.conf
[root@zabbix-agent ~]# grep -n '^'[a-Z] /etc/zabbix/zabbix_agentd.conf
13:PidFile=/var/run/zabbix/zabbix_agentd.pid
32:LogFile=/var/log/zabbix/zabbix_agentd.log
43:LogFileSize=0
97:Server=192.168.20.10
138:ServerActive=192.168.20.10
149:Hostname=Zabbix-agent
267:Include=/etc/zabbix/zabbix_agentd.d/*.conf
启动zabbix-agent服务,并查看10050端口是否存在,命令如下:
[root@zabbix-agent ~]# systemctl start zabbix-agent
[root@zabbix-agent ~]# netstat -ntpl
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:10050 0.0.0.0:* LISTEN 11754/zabbix_agentd
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 921/sshd
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 1128/master
tcp6 0 0 :::10050 :::* LISTEN 11754/zabbix_agentd
tcp6 0 0 :::21 :::* LISTEN 11643/vsftpd
tcp6 0 0 :::22 :::* LISTEN 921/sshd
tcp6 0 0 ::1:25 :::* LISTEN 1128/master
回到Web界面,选择菜单栏“配置”→“主机”→“创建主机”命令,会跳转到如图4-6-12所示的配置主机的页面。
图1-3-12 创建主机
填写信息,将zabbix-agent节点添加到被监控机器,填写信息如图4-6-13所示。然后单击下方“添加”按钮。
图1-3-13 添加被监控机器
添加完毕后如图4-6-14所示。
图1-3-14 添加结果
添加监控项,单击“zabbix-agent”名称,然后单击“模板”标签,进行添加模板操作界面,如图4-6-15所示。
图1-3-15 添加监控模板
单击图4-6-15中的“选择”按钮,进行监控模板添加,在跳转界面勾选用户想要监控的复选框,然后单击下方“选择”按钮,如图4-6-16所示。
图1-3-16 选择监控模板
选择完模板后,如图1-3-17所示。
图1-3-17 模板选择完毕
单击“添加”按钮,显示链接的模板,然后单击“更新”按钮,如图4-6-18所示。
图1-3-18 更新模板
单击“更新”按钮后,zabbix-agent节点被添加到监控中,如图4-6-19所示。
图1-3-19 更新结果
(4)监控机器
在最上面的选择菜单栏中“监测中”→“图形”命令,群组选择Linux server,主机选择zabbix-agent,图形选择需要显示的监控项,此处选择为CPU jumps,如图4-6-20所示。
图1-3-20 显示的监控项
需要被监控的主机,首先安装zabbix-agent服务,然后修改配置文件并启动服务。登录Zabbix的Web界面,添加主机,并添加监控模板。成功添加后,就可以通过Zabbix界面进行主机的监控。
六.Zabbix邮件报警
1、Zabbix监控端配置
//安装mailx
[root@zabbix-server ~]# yum -y install mailx
[root@zabbix-server ~]# vim /etc/mail.rc
//末尾添加
set from=QQ邮箱
set smtp=smtp.qq.com
set smtp-auth-user= QQ邮箱
set smtp-auth-password=邮箱授权码
set smtp-auth=login
设置QQ授权码:https://jingyan.baidu.com/article/ac6a9a5eb439f36b653eacc0.html
//测试下邮件是否可以发送
[root@zabbix-server ~]# echo "hello" | mail -s "test" 邮箱@qq.com
//编写邮件脚本
[root@zabbix-server ~]# cd /usr/lib/zabbix/alertscripts/
[root@zabbix-server alertscripts]# vim mail.sh
#!/bin/bash
#send mail
messages=`echo $3 | tr '\r\n' '\n'`
subject=`echo $2 | tr '\r\n' '\n'`
echo "${messages}" | mail -s "${subject}" $1 >>/tmp/mail.log 2>&1
//创建日志文件并修改权限并测试
[root@zabbix-server ~]# cd /usr/lib/zabbix/alertscripts/
[root@zabbix-server alertscripts]# touch /tmp/mail.log
[root@zabbix-server alertscripts]# chown -R zabbix.zabbix /tmp/mail.log
[root@zabbix-server alertscripts]# chmod +x mail.sh
[root@zabbix-server alertscripts]# chown -R zabbix.zabbix /usr/lib/zabbix/
[root@zabbix-server alertscripts]# sh mail.sh 邮箱@qq.com zabbix "this is test"
2、Web网页配置
添加报警媒介
管理>报警媒介类型>创建媒体类型
进去之后创建
名称自定义
类型选择脚本
脚本名称是之前编辑的脚本名称
脚本的三个参数:
{ALERT.SENDTO}
{ALERT.SUBJECT}
{ALERT.MESSAGE}
添加用户
管理>用户>点击Admin>报警媒介>添加
类型选择之前自定义的名称
收件人填自己邮箱
点击添加
点击更新
创建动作
配置>动作>删除默认的动作>创建动作>删除默认>创建动作
先不要选择添加,添加操作与恢复操作
默认标题: 消息内容:
告警主机:{HOST.NAME}
告警 IP:{HOST.IP}
告警时间:{EVENT.DATE}-{EVENT.TIME}
告警等级:{TRIGGER.SEVERITY}
告警信息:{TRIGGER.NAME}:{ITEM.VALUE}
事件 ID:{EVENT.ID}
恢复操作
除了消息内容,其他都一样
默认标题:{TRIGGER.STATUS}:{TRIGGER.NAME}
消息内容:
告警主机:{HOST.NAME}
恢复主机:{HOST.NAME}
恢复 IP:{HOST.IP}
恢复时间:{EVENT.DATE}-{EVENT.TIME}
恢复等级:{TRIGGER.SEVERITY}
恢复信息:{TRIGGER.NAME}:{ITEM.VALUE}
恢复 ID:{EVENT.ID}
最后点击添加
最后再确认一下操作是不是都添加完成了,如果没完成是不会发送邮件的!!
测试
被管理端停掉httpd服务
[root@zabbix-agent ~]# systemctl stop httpd
[root@zabbix-agent ~]# systemctl start httpd