Zabbix分布式监控

Zabbix分布式监控
一、简介
开源监控软件:Zabbix、Cacti、Nagios、Ganglia等
Zabbix是一个基于Web界面的提供公布式系统监控的企业级开源解决方案,Zabbix能监视各种网络参数,保证服务器系统安全稳定地运行,并提供灵活的通知机制以让SA快速定位并解决存在的各种问题,Zabbix分布式监控的优点如下:
1、支持自动发现服务器和网络设备;
2、支持底层自动发现;
3、分布式的监控体系和集中式的Web管理;
4、支持主动监控和被动监控模式;
5、服务器端支持多种操作系统:Linux,Solaris,HP-UX,AIX,FreeBSD,OpenBSD,MAC等;
6、agent客户端支持多种操作系统:Linux,Solaris,HP-UX,AIX,FreeBSD,Windows等;
7、基于SNMP、IPMI接口、ZabbixAgent方式监控客户端;
8、安全的用户认证及权限认证;
9、基于Web和管理方法,支持自由的自定义事件和邮件发送;
10、高水平的业务视图监控资源,支持日志审计、资产管理等功能;
11、支持高水平API二次开发、脚本监控、自key定义、自动化运维整合调用。
 
二、Zabbix监控组件及流程
Zabbix监控组件主要包括:ZabbixServer端、Zabbix Proxy、Zabbix Agent;其中Zabbix Server包括:WEB GUI、Database、ZabbixServer。
每个模块工作职责:
ZabbixServer:负责接收agent发送的报告信息的核心组件,所有配置,统计数据及操作数据均由其组织进行;
DatabaseStorage:用户存储所有配置信息,以及存储由Zabbix Server收集到的数据;
WebInterface:Zabbix的GUI接口,通常与Server运行在同一台主机上;
ZabbixProxy:常用于分布监控环境中,代理Server收集部分被监控的监控数据并统一发往Server端;(通常大于500台主机需要使用)
ZabbixAgent:部署在被监控主机上,负责收集本地数据发往Server端或Proxy端;
 
三、Zabbix监控原理
Agentd安装在被监控的主机上,Agent负责定期收集客户端本地各项数据,并发送至ZabbixServer端,Zabbix Server收到数据,将数据存储到数据库中,用户基于ZabbixWEB可以看到数据在前端展现图像。当Zabbix监控某个具体的项目,改项目会设置一个触发器阈值,当被监控的指标超过该触发器设定的阈值,会进行一些必要的动作,动作包括:发送信息(邮件、微信、短信)、发送命令(SHELL命令、Reboot、Restart、Install等)。
Zabbix监控部署在系统中,包含常见的五个程序:zabbix_server、zabbix_agentd、zabbix_proxy、zabbix_get、zabbix_sender等。
五个程序的功能如下:
zabbixserver:zabbix服务端守护进程,其中zabbix_agentd、zabbix_get、zabbix_sender、zabbix_proxy的数据最终都提交给zabbixserver;
zabbixagentd:客户端守护进程,负责收集客户端数据,例如:收集cpu负载、内存、硬盘使用情况等;
zabbixproxy:zabbix分布式代理守护进程,通过大于500台主机,需要进行分布式监控架构部署;
zabbixget:zabbix数据接收工具,单独使用的命令,通常在server或者proxy端执行获取远程客户端信息的命令;
zabbixsender:zabbix数据发送工具,用户发送数据给server或proxy端,通常用户耗时比较长的检查,导致zabbix超时,于是需要在脚本执行完毕之后,使用sender主动提交数据。
 
四、Zabbix监控方式
Zabbix分布式监控系统监控客户端的方式常见有三种:Agent、SNMP、IPMI。
Agent:Zabbix可以基于自身zabbix_agent客户端插件监控OS的状态,例如CPU、内存、硬盘、网卡、文件等。
SNMP:Zabbix通过简单网络管理协议(SimpleNetwork ManagementProtocol)监控网络设备或windows主机等。通过设定SNMP的参数将相关监控数据传送至服务端,交换机、防火墙等网络设备一般都支持SNMP协议。
IPMI:智能平台管理接口(IntelligentPlatform ManagementInterface,IPMI)即主要应用于设备的物理特性,包括:温度、电压、电扇工作状态,电源供应以及机箱入侵等。IPMI最大的优势在于无论OS的开机还是关机状态下,只要接通电源就可以实现对服务器的监控。
Zabbix监控客户端分为主动监控与被动监控,主被动模式以客户端为参照,Zabbix监控客户端默认为被动模式,可以修改为主动模式,只需要在客户端配置文件中添加StartAgents=0。主被动监控模式如下:
Zabbix主动模式:Agent主动请求server获取主动的监控项列表,并主动将监控项内需要检测的数据提交给server/proxy,zabbixagent首先向ServerActive配置的IP请求获取active items,获取并提交active items数据至server/proxy。
Zabbix被动模式:Server向agent请求获取监控项的数据,agent返回数据,server打开一个TCP连接,Server发送请求agent.ping,Agent接收到请求并且响应,Server处理接收到的数据。
 
五、Zabbix监控概念
Zabbix监控系统包括很多监控概念,如下:
主机(host):                           被监控的网络设备,可以写IP或者DNS;
主机组(host group):             主机组用于管理主机,可以批量设置权限;
监控项(item):                      具体监控项,items值由独立的keys进行识别;
触发器(trigger):                为某个items设置触发器,达到触发器会执行action动作;
事件(event):                     例如达到某个触发器,称之为一个事件;
动作(action):                      对于特定事件事先定义的处理方法,默认可以发送信息及发送命令;
报警升级(escalation):            发送警报或执行远程命令的自定义方案,如隔5分钟发送一次警报,共发送5次等。
媒介(media):                        发送通知的方式,可以支持Mail、SMS、Scripts等;
通知(notification):                通过设置的媒介向用户发送的有关某事件的信息;
远程命令(remotecommand):         达到触发器,可以在被监控端执行命令;
模板(template):                     可以快速监控被监控端,模块包含:item、trigger、graph、screen、application;
web场景(webscennario)         用于检测web站点可用性,监控HTTP关键词;
web前端(frontend):              Zabbix的web接口;
图形(graph):                            监控图像;
屏幕(screens):                          屏幕显示;
幻灯(slide show):                     幻灯显示
 
六、Zabbix监控平台部署
从Zabbix官方的源码库安装
安装源码库配置部署包。这个部署包包含了yum配置文件。
rpm -ivh https://repo.zabbix.com/zabbix/4.0/rhel/7/x86_64/zabbix-release-4.0-1.el7.noarch.rpm
安装Zabbix部署包。以下是使用Mysql数据库安装Zabbixserver、WEB前端的示例。
# yuminstall zabbix-server-mysql zabbix-web-mysql  zabbix-agent
只安装Zabbix Agent的示例.
# yum installzabbix-agent
创建初始数据库
# mysql -uroot -p
password
mysql> createdatabase zabbix character set utf8 collate utf8_bin;
mysql> grant allprivileges on zabbix.* to zabbix@localhost identified by 'password';
导入初始架构和数据。系统将提示您输入新创建的密码。
# zcat/usr/share/doc/zabbix-server-mysql*/create.sql.gz | mysql -uzabbix -p zabbix
编辑文件/etc/zabbix/zabbix_server.conf
DBPassword=password
编辑文件/etc/httpd/conf.d/zabbix.conf,取消注释并为您设置正确的时区。
#php_value date.timezone = Asia/Shanghai
启动Zabbix服务器和代理进程并使其在系统引导时启动:
# systemctl restartzabbix-server zabbix-agent httpd
# systemctl enablezabbix-server zabbix-agent httpd
 
源码包安装:
Zabbix监控平台部署,至少需要安装4个组件:ZabbixServer、Zabbix Web、databases、Zabbix Agent。
1、系统环境
server端:192.169.9.3
agent端:192.168.9.4
2、获取Zabbix软件安装包:
wget  https://nchc.dl.sourceforge.net/project/zabbix/ZABBIX%20Latest%20Stable/4.0.0/zabbix-4.0.0.tar.gz
3、Zabbix Server端和ZabbixAgent执行如下代码安装依赖包:
yum -y  install wget curl curl-devel net-snmp net-snmp-devel perl-DBI libeventlibevent-devel pcre pcre-devel libxml2-devel mariadb-devel
4、创建Zabbix用户与组:
groupadd  zabbix ; useradd -g zabbix -s /sbin/nologinzabbix
5、创建Zabbix端数据库配置:
create database zabbixcharset=utf8;
grant all on zabbix. *to zabbix@localhost identified by '123456';
flush privileges;
6、解压Zabbix软件包并将Zabbix基础SQL文件导入数据至Zabbix数据库:
tar zxvfzabbix-4.0.0.tar.gz;
cd zabbix-4.0.0;
mysql -uzabbix -p123456zabbix < database/mysql/schema.sql;
mysql -uzabbix -p123456zabbix < database/mysql/images.sql;
mysql -uzabbix -p123456zabbix < database/mysql/data.sql;
7、编译安装Zabbix:
切换至Zabbix解压目录,执行如下代码,安装zabbixserver
./configure--enable-server --enable-agent --with-mysql --enable-ipv6 --with-net-snmp--with-libcurl--with-libxml2              默认安装目录
make install
./configure--prefix=/usr/local/zabbix --enable-server --enable-agent --with-mysql--enable-ipv6 --with-net-snmp --with-libcurl --with-libxml2                          指定安装目录
make install
ln -s/usr/local/zabbix/sbin/zabbix_* /usr/local/sbin/
8、配置:
cd/usr/local/zabbix/etc
cp zabbix_server.confzabbix_server.conf.bak
在zabbix_server.conf配置文件中做如下配置:
LogFile=/tmp/zabbix_server.log
DBHost=localhost
DBName=zabbix
DBUser=zabbix
DBPassword=zabbix
同时cpzabbix_server启动脚本至/etc/init.d/目录,启动zabbix_server,Zabbix Server默认监听端口为10051。
cd zabbix-4.0.0
cp/misc/init.d/tru64/zabbix_server /etc/init.d/zabbix_server
chmod o+x/etc/init.d/zabbix_server
9、将zabbixWeb页面发布至Apache默认发布目录
\cp -azabbix-4.0.0/frontends/php/* /var/www/html/
sed -i's/\;date.timezone.*/date.timezone\= PRC/g' /etc/php.ini
10、重新启动ZabbixServer、HTTP、MYSQL服务
/etc/init.d/zabbix_serverrestart
systemctl restarthttpd.service mariadb.service
或者 /etc/init.d/httpdrestart     /etc/init.d/mysqld restart
 
七、Zabbix WEB GUI安装配置
1、通过浏览器访问http://192.168.9.3。
2、单击下一步,出现依赖选项失败错误提示,需要把错误依赖解决完,方可进行下一步操作。
yum  install gd gd-devel  php-bcmathphp-mbstring  php-ldap  php-gd -y
sed  -i'/post_max_size/s/8/16/g;/max_execution_time/s/30/300/g;/max_input_time/s/60/300/g;s/\;date.timezone.*/date.timezone\=PRC/g;s/\;always_populate_raw_post_data/always_populate_raw_post_data/g'  /etc/php.ini
systemctl restarthttpd.service
3、单击下一步,配置数据库连接,输入数据库名、用户名、密码,单击Testconnection,显示OK,单击下一步即可。
4、单击下一步,填写ZabbixTitle显示,可以为空,也可以输入自定义名称。
5、单击下一步,需修改、创建zabbix.conf.php文件,执行如下命令,或者单击“Downloadthe configurationfile”下载zabbix.conf.php文件,并上传至apache发布目录/usr/local/apache/htdocs/conf,并设置可写权限,刷新WEB页面,最后单击Finish。
6、登录ZabbixWEB界面,默认用户名和密码为:admin/zabbix。
 
八、安装Zabbix_agent
1、获取Zabbix软件安装包:
wget  https://nchc.dl.sourceforge.net/project/zabbix/ZABBIX%20Latest%20Stable/4.0.0/zabbix-4.0.0.tar.gz
2、Zabbix Server端和ZabbixAgent执行如下代码安装依赖包:
yum -y  install wget curl curl-devel net-snmp net-snmp-devel perl-DBI libeventlibevent-devel pcre pcre-devel libxml2-devel mariadb-devel
3、创建Zabbix用户与组:
groupadd  zabbix ; useradd -g zabbix -s /sbin/nologinzabbix
4、解压源码文件,切至解压目录,编译安装
tar zxvfzabbix-4.0.0.tar.gz;
cd zabbix-4.0.0;
./configure  --enable-agent
make
make install
5、修改zabbix_agentd.conf配置文件
LogFile=/tmp/zabbix_agentd.log
Server=192.168.9.3指定Server IP地址
ServerActive=192.168.9.3Zabbix主动监控server的ip地址
Hostname=Zabbix agent客户端主机名
6、拷贝zabbix_agentd启动脚本至/etc/init.d/目录,启动zabbix_agentd服务即可,默认监听端口10050
cd zabbix-4.0.0;
cp/misc/init.d/tru64/zabbix_agentd /etc/init.d/ 
chmod o+x/etc/init.d/zabbix_agentd
7、启动zabbix_agentd
/etc/init.d/zabbix_agentdstart
 
九、Zabbix监控客户端
Zabbix服务端和客户端安装完成后,可通过ZabbixServer添加客户端监控:
Zabbix-WEB ->configuration -> hosts -> Create host -> Host name和Agentinterfaces,同时选择添加templates模板 ->选择Add -> 勾选Template OS Linux-选择Add提交;
注*此处Hostname名称与zabbix_agentd.conf配置文件中Hostname保持一致,否则会报错。
将客户端主机连接至“Template OSLinux”,启用模板完成主机默认监控,单击Add,继续单击Update即可
单击Zabbix WEB ->Monitoring -> Graphs -> Group -> Host -> Graph。
PS:如果无法监控到客户端,可在ZabbixServer端,执行命令获取Agent的items Key值是否有返回,例如:system.hostname为返回客户端的hostname信息,检测命令如下:
zabbix_get -s192.168.9.4 -k system.hostname
执行结果:
[root@tang etc]#zabbix_get -s 192.168.9.4 -k system.hostname
tang.tang.com
 
十、Zabbix配置文件详解
在zabbix服务(server)端、客户(agent)端、代理(proxy)端分别对应着一个配置文件,即:zabbix_server.conf,zabbix_agentd.conf,zabbix_proxy.conf,它们的详细解释如下:
1、/etc/zabbix/zabbix_server.conf详解
ListenPort=10051#zabbix server的端口,默认是10051,可以自行修改,范围是1024-32767 ,一般默认即可
SourceIP=#连接的源ip地址,默认为空,默认即可
LogFile=/var/log/zabbix/zabbix_server.log#日志文件的存放位置
LogFileSize=1#说明:日志达到多少M里就轮转;若此参数值为0时,则不轮转,日志将不断变大,建议设置成轮转。
DebugLevel=3#指定调试级别,默认即可
PidFile=/var/run/zabbix/zabbix_server.pid  #pid文件的存放位置
DBHost=localhost#数据库主机名,当设置为localhost时,连接mysql通过sock
SocketDir=/var/run/zabbix  #用于存储内部Zabbix服务使用的IPC套接字的目录
DBName=zabbix#指定存放zabbix数据数据库的名字
DBUser=zabbix#指定连接数据库的用户名
DBPassword=123456#用户连接数据库需要的密码
DBSocket=/var/lib/mysql/mysql.sock#前面DBhost主机设置为localhost,用户连接数据库所用的sock位置,
DBPort=3306#数据库的端口号,当用sock连接时,无关紧要,当通过网络连接时需设置
StartPollers=5#说明;初始化时,启动子进程数量,数量越多,则服务端吞吐能力越强,对系统资源消耗越大。
StartIPMIPollers=0#说明:主要用于IPmi技术用于获取硬件状态场景。若无相关监控项,建议设置为0
StartTrappers=5#用于设置诸如SNMP STRAPPER场景提交来的数据的接收进程数,若客户机SNMP TRAPPER技术较多,建议加大此参数值
StartPingers=1#用于设置启用icmp协议PING主机方式启动线程数量,若单台代理所管理机器超过500台,建议加大此数值
StartDiscoverers=1#用于设置自动发现主机的线程数量,若单台代理所管理机器超过500台,可以考虑加大此数值(仅适用于直接AGENT场景)
StartHTTPPollers=1#说明:用于设置WEB拨测监控线程数,可视具体情况增加或减少此数值。
JavaGateway=127.0.0.1#JavaGateway的ip地址或主机名
JavaGatewayPort=10052  #JavaGateway的端口号
StartJavaPollers=5  #开启连接javagatey的进程数
SNMPTrapperFile=/tmp/zabbix_traps.tmp  用于将数据从SNMP限制守护进程传递到服务器的临时文件。
StartSNMPTrapper=0  #如果设置为1,snmp trapper进程就会开启
ListenIP=0.0.0.0  #监听来自trapper的ip地址
ListenIP=127.0.0.1
HousekeepingFrequency=1#说明:多少小时清理一次代理端数据库的history, alert, and alarms,以保持代理端数据库轻便,建议保持默认
MaxHousekeeperDelete=500#每次轮询housekeeper这个任务的时候,超过这个阀值的行都会被清理。
SenderFrequency=30#说明:多少秒后重试发送失败的报警信息
CacheSize=8M#说明:zabbix初始化时占用多少系统共享内存用于存储配置信息,HOST,ITEM,TRIGGER数据,视监控主机数量和监控项调整,建议调整到32M或者更大
CacheUpdateFrequency=60#说明:zabbix更新操作系统CACHE配置,若管理页面操作不频繁,可以考虑加大参数值
StartDBSyncers=4#将采集数据从CACHE同步到数据库线程数量,视数据库服务器I/O繁忙情况,和数据库写能力调整。数值越大,写能力越强。对数据库服务器I/O压力越大。
HistoryCacheSize=8M#说明:用于设置划分多少系统共享内存用于存储采集的历史数据,此数值越大,数据库读压力越小
TrendCacheSize=4M#说明:用于设置划分多少系统共享内存用于存储计算出来的趋势数据,此参数值从一定程度上可影响数据库读压力
HistoryTextCacheSize=16M#说明:指定划出多少系统共享内存用于存储 character, text or loghistory数据,若二级代理内存足够,建议可适当扩大此数值,可很大程度上解决系统I/O压力,和数据库读压力
ValueCacheSize=8M#说明:划出系统多少共享内存用于已请求的存储监控项信息,若监控项较多,建议加大此数值
NodeNoEvents=0#说明:若节点为子结点,是否允许本地事件(events表)发送到主节点,1为不发送,但不影响此节点以下的节点的传播能力,视ZABBIX分布式系统架构设计开启或关闭。在不明架构前提下,建议保持默认
Timeout=3#说明:与AGNET\SNMP设备和其它外部设备通信超时设置,单位为秒;若采集数据不完整或网络繁忙,或从管理页面发现客户端状态变化频繁,可以考虑加大此数值。注意若此数值加大,应该考虑参数StartPollers 是否有相应加大的必要。
TrapperTimeout=300#说明:启用 trapper功能,用于进程等待超时设置。根据需要调整
UnreachablePeriod=45#说明:当AGNET端处于不可用状态下,间隔多少秒后,尝试重新连接。建议根据具体情况设置。注意,若此数值过小,右agent端业务系统繁忙时,有可能造成报警信息误报
UnavailableDelay=60#说明:当AGENT端处于可用状态下,间隔多少秒后,进行状态检查。若出现可正常采集数据,但管理页面AGENT状态不正常;若在网络,端口等均通畅情况下,AGENT状态仍不正常,可以考虑加大此数值
UnreachableDelay=15#说明:当agent端处于不可达状态下,延迟多少秒后,进行重新尝试,建议保持默认,在AGENT接入调试阶段,可考虑减少此数值
AlertScriptsPath=/usr/lib/zabbix/alertscripts#监控报警脚本的存放路径
FpingLocation=/usr/sbin/fping#说明:IPv4 FPING命令路径,仅ROOT可用。注意使用此命令时,应该确认此命令是否存在
SSHKeyLocation=#说明:在服务端需要SSH到AGENT端且采用用KEY验证方式时使用。
LogSlowQueries=0#说明:用于服务端数据库慢查询功能,单位是毫秒;1毫秒=0.001秒,若有服务端数据库监控慢查询的需求,可以视具体情况调整此数。
TmpDir=/tmp
Include=/usr/local/etc/zabbix_server.general.conf
Include=/usr/local/etc/zabbix_server.conf.d/#子配置文件路径
StartProxyPollers=1#在zabbix proxy被动模式下用此参数
ProxyConfigFrequency=3600#同上
ProxyDataFrequency=1
2、/etc/zabbix/zabbix_agentd.conf详解
PidFile=/var/run/zabbix/zabbix_agentd.pid   #pid文件的存放位置
LogFile=/var/log/zabbix/zabbix_agentd.log   #日志文件的位置
LogFileSize=1#当日志文件达到多大时进行轮询操作
DebugLevel=3 #日志信息级别
SourceIP=#连接的源ip地址,默认为空,即可
EnableRemoteCommands=0#是否允许zabbix server端的远程指令, 0表示不允许, 1表示允许
LogRemoteCommands=0#是否开启日志记录shell命令作为警告 0表示不允许,1表示允许
Server=127.0.0.1#zabbix server的ip地址或主机名,可同时列出多个,需要用逗号隔开
ListenPort=10050#zabbix agent监听的端口
ListenIP=0.0.0.0#zabbix agent监听的ip地址
StartAgents=3 #zabbixagent开启进程数
ServerActive=127.0.0.1#开启主动检查
Hostname=Zabbixserver#在zabbix server前端配置时指定的主机名要相同,最重要的配置
RefreshActiveChecks=120#主动检查刷新的时间,单位为秒数
BufferSend=5 #数据缓冲的时间
BufferSize=100 #zabbixagent数据缓冲区的大小,当达到该值便会发送所有的数据到zabbix server
MaxLinesPerSecond=100#zabbix agent发送给zabbix server最大的数据行
AllowRoot=0 #是否允许zabbixagent 以root用户运行
Timeout=3 #设定处理超时的时间
Include=/etc/zabbix/zabbix_agentd.d/*.conf     #包含子配置文件的路径
UnsafeUserParameters=0#是否允许所有字符参数的传递
UserParameter=#指定用户自定义参数
3、/etc/zabbix/zabbix_proxy.conf详解
Server=192.168.70.133#指定zabbix server的ip地址或主机名
Hostname=zabbix-proxy-1.35#定义监控代理的主机名,需和zabbix server前端配置时指定的节点名相同
LogFile=/var/log/zabbix/zabbix_proxy.log#指定日志文件的位置
PidFile=/var/run/zabbix/zabbix_proxy.pid#pid文件的位置
DBName=zabbix_proxy#数据库名
DBUser=zabbix #连接数据库的用户
DBPassword=123456#连接数据库用户的密码
ConfigFrequency=60#zabbix proxy从zabbix server取得配置数据的频率
DataSenderFrequency=60#zabbix proxy发送监控到的数据给zabbix server的频率
3、/etc/zabbix/zabbix_proxy.conf详解
Server=192.168.70.133#指定zabbix server的ip地址或主机名
Hostname=zabbix-proxy-1.35#定义监控代理的主机名,需和zabbix server前端配置时指定的节点名相同
LogFile=/var/log/zabbix/zabbix_proxy.log#指定日志文件的位置
PidFile=/var/run/zabbix/zabbix_proxy.pid#pid文件的位置
DBName=zabbix_proxy#数据库名
DBUser=zabbix #连接数据库的用户
DBPassword=123456#连接数据库用户的密码
ConfigFrequency=60#zabbix proxy从zabbix server取得配置数据的频率
DataSenderFrequency=60#zabbix proxy发送监控到的数据给zabbix server的频率
 
十一、Zabbix自动发现及注册
Zabbix可以批量自动发现主机并监控,利用发现(discovery)模块,实现自动发现主机、自动将主机添加到主机组、自动加载模板、自动创建项目(items)、自动创建监控图像。zabbix的Action里有两项功能,自动发现与自动注册,运用这两个功能中任意一个都可以实现自动添加机器,但添加的主机名是IP地址。
自动发现:添加discovery规则后,zabbixsever端基于IP范围对agent机器进行扫描,并把扫描到的机器添加到web端。zabbix server端的操作,会使其压力很大。
自动注册:zabbixagent端会自动发送信息到server端,然后agent主机会被添加到web端。zabbix agent端的操作。
建议使用自动注册功能,当在zabbixweb端配置完discovery规则后,以后公司新增机器,就算不在一个网段,只要能够与server机器通信,修改一下agent配置文件,就可以自动添加主机。当把服务安装做成标准化,基本就很省心。
主动模式与被动模式
主动:agent请求server获取主动的监控项列表,并主动将监控项内需要检测的数据提交给server/proxy;
被动:server向agent请求获取监控项的数据,agent返回数据;
zabbix主动模式配置:
[root@tang etc]# egrep-Ev '^$|^#' zabbix/zabbix_agentd.conf
LogFile=/var/log/zabbix/zabbix_agentd.log
StartAgents=0
#Server=192.168.9.3      #如果设置为纯被动模式,则应该注释掉这一条指令
ServerActive=192.168.9.3
Hostname=Zabbix agent
RefreshActiveChecks=120
注:
1.客户端agent模式,设置为0表示关闭被动模式,被监控端的zabbix_agentd 不监听本地端口,所以无法在 netstat -tunpl 中查看到zabbix_agentd进程
2.Hostname=host-47-106-141-17,重要:客户端的hostname,可自己配置,如果不配置则使用主机名
3.RefreshActiveChecks=120,被监控端到服务器获取监控项的周期,默认120s即可
4.纯主动模式下的zabbixagent,只能支持Zabbix Agent (Active)类型的监控项
zabbix被动模式配置:
[root@tang ~]# egrep-Ev "^$|^#" zabbix/etc/zabbix_agentd.conf
LogFile=/var/log/zabbix/zabbix_agentd.log
Server=192.168.9.3             (被动模式下的 Zabbix Server 地址)
Hostname=Zabbixagent     (zabbix-agentd端主机名)
注:zabbix默认的是被动监控
 
A、Zabbix 自动发现(Discovery)功能使用
Zabbix 创建发现规则:
zabbix-server登陆web界面进行设置,创建发现规则Configuration---- discovery ---- Create discovery rule
配置基本信息  配置Checks 添加完checks之后 点击最下面的add添加保存即可
注:多个主机IP地址之间用逗号隔开
主机自动加入主机组并关联模板:
为discovery(发现)创建action(动作)Configuration---- Actions ---- Event source(选择Discovery) ---- Create action
输入 Action 名字;
添加触发Action的条件:这里添加了三个条件分别是 “ip地址范围”、“服务类型” 和 “Discovery 状态” ;
创建操作(Operations)“Addhost ”添加主机
“Add to host group”将主机添加到主机组、选择要添加到的主机组  “Link to template”链接到模板、选择相应的模板  这里我定义了 发现主机就 “添加主机(Addhost)”并 “添加到主机组(Add to host groups)”、“链接到相应的模板(Link to template)” 
点击“Add” 添加添加完成之后效果如下  Ok 至此发现主机、添加主机并将主机添加到主机组 链接模板全部完毕看看效果吧Monitoring ---- Discovery ----选择 自定义的发现规则下面是我定义的一个发现规则的效果如图是发现的主机  查看主机以及主机相关的图像。
 
B、zabbix-agent主动注册服务端的
当主机分布在不同的城市,比如不同的云环境中时,使用主动发现就不好处理了,使用自动注册的方式非常适合在云环境中的部署。
1.配置客户端:
vim/etc/zabbix/zabbix_agentd.conf
配置以下三项:
# 主动模式下的zabbix服务端
ServerActive=wuyutang.top
#主机名(这个会自动加入到zabbix-server断的主机显示中)
Hostname=Zabbix agent
# 作为server端的判断条件入口
HostMetadataItem=system.uname
重启生效:servicezabbix-agent restart
2.配置服务端
Configuration -->Action --> Auto registion --> Create action
 
十二、Zabbix邮件报警
Zabbix监控服务器设置邮件报警,当被监控主机宕机或达到触发器预设值进,会自动发送报警邮件到指定的邮箱。
1、什么是MTA?什么是MUA?
通俗的说MUA就是用户使用的客户端,而MTA则是真正发送邮件的发送进程,MUA编写的邮件最终也交由MTA发送至目标端。
mailx即为负责查看、编写邮件和向MTA发送邮件的MUA。
Sendmail和postfix即为负责邮件在网络上传输的MTA,将邮件从一个MTA传送至另一个MTA。
注:使用zabbox服服务端本地邮箱账号发送邮件,需要安装两个软件达到报警邮件转发至指定邮箱。Sendmail或postfix(两个软件各选择一个,但不能同时运行)和mailx邮件客户端。如果直接使用外部邮箱发送邮件可以不需要配置sendmail或postfix,直接把这两个软件关掉,配置mail即可实现)
2、安装邮箱客户端mailx:
yum install mailx -y
3、配置mailx:
vim /etc/mail.rc  末尾加入如下代码:
set bsdcompat
setfrom=ytwu@*****.com                                #邮箱地址,用于zabbi服务端转发邮件到指定邮箱
setsmtp=smtp.exmail.qq.com                                #发送邮箱服务器地址smtp
setsmtp-auth-user=ytwu@*****.com                        #登录的邮箱账号
setsmtp-auth-password=**********                        #登录的邮箱密码
setsmtp-auth=login                                        #登录
4、测试邮件能否发送:
echo "test"|mail -s 'test ' ytwu@*****.com
5、编写邮件发送脚本postfix.sh:
cd/usr/lib/zabbix/alertscripts        #进入zabbix默认存放脚本路径
vim postfix.sh
#!/bin/bash
messages=`echo $3 | tr'\r\n' '\n'`
subject=`echo $2 | tr'\r\n' '\n'`
echo"${messages}" | mail -s "${subject}" $1>>/tmp/postfix.log 2>&1
chown zabbix.zabbixpostfix.sh                        #postfix.sh脚本修改所属用户和用户组
chmod 755postfix.sh                                #postfix.sh脚本赋予执行权限
vim/etc/zabbix/zabbix_server.conf                #配置zabbix_server.conf配置文件
AlertScriptsPath=/usr/lib/zabbix/alertscripts        #修改脚本存放路径
-----在服务器WEB上配置----
1、管理-》报警媒体类型-》创建媒体类型-》
名称:Email-tang
类型:脚本
脚本名称:Email-tang
脚本参数:       //新增以下三个参数
{ALERT.SENDTO}
{ALERT.SUBJECT}
{ALERT.MESSAGE}
2、管理-用户-点击Admin-报警媒介:
类型:Email-tang   //调用上面的脚本
收件人:ytwu@*****.com
其它默认-保存
3、配置-》动作-》创建动作-》删除默认标签,修改触发条件
名称:Mailx
条件 A 主机群组=Linux servers
名称:Email-tang
类型:脚本
脚本名称:postfix.sh
脚本参数:       //新增以下三个参数
{ALERT.SENDTO}
{ALERT.SUBJECT}
{ALERT.MESSAGE}
4、管理-用户-点击Admin-报警媒介:
类型:Mail-Test //调用上面的脚本
收件人:ytwu@*****.com
其它默认-保存
5、配置-》动作-》创建动作-》删除默认标签,修改触发条件
A、名称:Mailx
条件 A 主机群组=Linux servers
B、操作-》如下配置
默认操作步骤持续时间 60
默认接收人 :故障{TRIGGER.STATUS},服务器:{HOSTNAME1}发生: {TRIGGER.NAME}故障!
默认信息:
告警主机:{HOSTNAME1}
告警 IP  :{HOST.IP}
告警时间:{EVENT.DATE}{EVENT.TIME}
告警等级:{TRIGGER.SEVERITY}
告警信息: {TRIGGER.NAME}
告警项目:{TRIGGER.KEY1}
问题详情:{ITEM.NAME}:{ITEM.VALUE}
当前状态:{TRIGGER.STATUS}:{ITEM.VALUE1}
事件ID   :{EVENT.ID}
操作细节:-》
操作类型:发送消息
发送到用户:Admin (ZabbixAdministrator)
仅送到:Email-tang    //一定要配置否则邮件发送不成功
C、恢复操作:恢复{TRIGGER.STATUS},服务器:{HOSTNAME1}: {TRIGGER.NAME}已恢复!
恢复信息:
恢复主机:{HOST.NAME}
恢复  IP:{HOST.IP}
恢复时间:{EVENT.DATE}-{EVENT.TIME}
恢复等级:{TRIGGER.SEVERITY}
恢复信息:{TRIGGER.NAME}:{ITEM.VALUE}
恢复详情:{ITEM.NAME}:{ITEM.VALUE}
当前状态:{TRIGGER.STATUS}:{ITEM.VALUE}
恢复  ID:{EVENT.ID}
操作细节:-》
操作类型:发送消息
发送到用户:Admin (ZabbixAdministrator)
仅送到:Email-tang     //一定要配置否则邮件发送不成功
systemctl restartzabbix-server
systemctl restartzabbix-agent.service
在被监控主机上关闭 测试报警邮件接收:
systemctl stopzabbix-agent.service
 
十三、Zabbix 监控MySQL主从复制
Zabbix监控除了可以使用agent监控客户端服务器状态、CPU、内存、硬盘、网卡流量等运行情况,同时还可以监控MySQL主从复制、LAMP、NginxWeb服务器等,监控MySQL主从复制步骤如下:
1、在Zabbixagent端创建/data/sh/目录,并在此目录下创建脚本文件mysql_slave_db.sh,写入如下代码:
#!/bin/bash
/usr/bin/mysql -uzabbix -e 'show slave status\G' |grep -E "Slave_IO_Running|Slave_SQL_Running"|awk '{print $2}'|grep -c Yes
chmod +xmysql_slave_db.sh
执行 mysql_slave_db.sh脚本输出结果为:2
如果结果不为2则表示主从同步异常,则报警!!
2、在客户端zabbix_agentd.conf配置文件中加入如下代码:
UserParameter=mysql.replication,sh/data/sh/mysql_slave_db.sh
3、Zabbix服务器端获取监控数据,如果返回值为2,则证明从库I/O、SQL线程均为Yes,表示主从同步成功,代码如下:
zabbix_get -s"agent服务器所在IP" -k mysql.replication
然后将该监控项在web平台测加入items,设置好报警通知即可。
4、访问zabbix
---找到“配置”--》“所监控的主机”--》"监控项"--创建监控项
填写:名称 mysql-主从监控
键值:mysql.replication
---触发器---创建触发器
当返回的值小于2时,说明只存在1个YES或0个YES,这时候说明MYSQL主从同步出现异常,即产生报警;
填写:名称 mysql-主从复制故障
表达式:last()-Last(mostrecent) T value
结果:不等于 2
 
十四、Zabbix 触发命令及脚本
Zabbix在对服务或者设备进行监控的时候,如果被监控客户端服务异常,满足触发器,可以发送邮件报警、短信报警及微信报警。Zabbix还可以远程执行命令或者脚本,对部分故障实现自动修复。具体可执行任务如下:
重启应用程序如:Apache、Nginx、MySQL、Tomcat服务等;
通过IPMI接口重启服务器;
删除服务器磁盘空间及数据;
执行脚本及资源高度管理;
同时支持多个远程命令;
Zabbix 代理不支持远程命令;
远程命令最大长度为255个字符;
1、使用Zabbix远程执行命令,需要在Zabbix 客户端配置文件开启对远程命令的支持,在zabbix.agentd.conf行尾加入如下代码,并重启服务。
EnableRemoteCommands=1
2、在Zabbix客户端sudoer配置文件中添加Zabbix 用户拥有执行权限且无须密码登录:
Defaults:zabbix !requiretty
zabbix ALL=(ALL)NOPASSWD:ALL
3、创建一个实例脚本:自动清理磁盘日志文件:auto_clean_disk.sh脚本代码如下:
#!/bin/bash
#auto clean disk space
rm -rf /boot/test.img
find /boot/ -name"*.log" -size +100M -exec rm -rf {} \;
4、将agent服务器/boot目录临时写满,然后满足触发器,实现远程命令执行。
如果命令没有执行成功,重启HTTP服务,可在SERVER端执行:
zabbix_get -s"agent服务器IP" -k "system.run[sudo systemctl restart httpd]"
4、创建动作:依次选择---配置-》动作-》触发器-》创建动作
动作:填写触发器名称及条件
操作:时间60s  操作细节:步骤1-3 时间:60s  操作类型:远程命令   类型:自定义脚本
命令:sudo /bin/bash/data/sh/auto_clean_disk.sh
 
十五、Zabbix 分布式配置
Zabbix是一个分布式监控系统,可以以一个中心点、多个分节点的模式运行,使用proxy能大大地降低Zabbix server的压力,Zabbixproxy可以运行在独立的服务器上。
1、安装并配置zabbix proxy:
yum install -yzabbix-proxy-mysql           #安装zabbix-proxy
yum install -ymariadb-server               #安装数据库
systemctl startmariadb.service                #启动数据库
systemctl enablemariadb.service               #开机启动
mysql                            #登录数据库
MariaDB [(none)]>create database zabbix_proxy character set utf8 collate utf8_bin;    #创建zabbix_proxy数据库
MariaDB [(none)]>grant all privileges on zabbix_proxy.* to zabbix@localhost identified by'123456';    #授权
cd/usr/share/doc/zabbix-proxy-mysql-3.0.18/                               #导入数据库
zcat schema.sql.gz |mysql -uzabbix -p123456 zabbix_proxy                   #导入数据库
vim/etc/zabbix/zabbix_proxy.conf               #修改zabbix-proxy的配置文件
Server=x.x.x.x    #zabbix-server的地址
Hostname=zabbix-proxy               #主机名
DBHost=localhost                   #数据库主机
DBName=zabbix_proxy               #数据库名称
DBUser=zabbix                           #数据库用户名
DBPassword=123456               #数据库密码
DataSenderFrequency=30        #数据的发送时间间隔(默认是1秒)
LogSlowQueries=3000                #用于服务端数据库慢查询功能,单位是毫秒
HistoryCacheSIze=128MB        #用于设置划分多少系统共享内存用于存储采集的历史数据,此数值越大,数据库读压力越小
CacheSize=128MB                #zabbix初始化时占用多少系统共享内存用于存储配置信息
 
配置文件中以下内容有需要可以配置:
# ProxyLocalBuffer=0                        #数据保留的时间(小时为单位)
# ProxyOfflineBuffer=1                        #连不上Server,数据要保留多久(小时为单位,默认1小时)
# StartPollers=5                        #启动的线程数
# StartIPMIPollers=0                        #启动IPMI的线程数
systemctl startzabbix-proxy.service                #启动zabbix-proxy
systemctl enablezabbix-proxy.service             #开机启动
2、server端的web界面添加zabbixproxy
--管理-》agent代理程序--》创建代理--
agent代理程序名称和proxy代理的主机名相同:zabbix-proxy   主动式
proxy代理添加后,等待发现代理,如果不能及时发现代理,可以通过查看server和proxy的日志进行检查
tail -f/var/log/zabbix/zabbix_server.log
systemctl restartzabbix-server.service               #重启server端服务
systemctl restartzabbix-proxy.service               #再重启proxy端服务
Web界面进行检查,查看代理是否成功添加 。
3、安装配置zabbix-agent
yum installzabbix-agent -y                          #安装zabbix-agent
vim/etc/zabbix/zabbix_agentd.conf                   #修改配置文件
Server=x.x.x.x                                           #服务端即proxy的ip地址,内网地址
147 Hostname=Zabbixagent                       #填写主机名称,或填写为ip地址便于区分
systemctl startzabbix-agent.service                    #启动zabbix-agent
systemctl enablezabbix-agent.service                   #开机启动
4、server端的web界面添加主机
--配置-》主机-》创建主机--
主机名称和agent端配置文件中相同,选择代理,为主机链接模板 。
等待添加的主机变绿,变绿之后查看最新数据
若不能及时变绿,则需要重启服务或使用命令zabbix_server-R config_cache_reload刷新配置缓存。
 
十六、Zabbix 微信报警
Zabbix 微信报警设置方法:
1、微信企业号注册:
企业号注册地址为https://qy.weixin.qq.com/,填写企业注册信息,等待审核。
2、通讯录添加运维部门及人员,以便于后面企业号推送消息给企业成员。
3、在企业公众号中创建应用
除了对个人添加微信报警之外,还可以添加不同管理组,接受同一个应用推送的消息,成员账号,组织部门ID,应用agentID,corp ID和secret,调用API接口需要用到这些信息。
4、获取企业corpID,单击企业公众号首页中“我的企业”即可看到。
5、微信接口调试,调用微信接口需要一个调用接口的任证,AccessToken通过corp ID和secret 可以获得AccessToken,微信企业号接口调试地址为http://qydev.weixin.qq.com/debug。
6、zabbix server端配置
微信报警脚本
默认将脚本放到/usr/lib/zabbix/alertscripts即可。
下载python微信脚本
#安装simplejson
wget https://pypi.python.org/packages/f0/07/26b519e6ebb03c2a74989f7571e6ae6b82e9d7d81b8de6fcdbfc643c7b58/simplejson-3.8.2.tar.gz
tar zxvfsimplejson-3.8.2.tar.gz && cd simplejson-3.8.2
python setup.py build
python setup.py install
#下载wechat.py脚本
git clone https://github.com/X-Mars/Zabbix-Alert-WeChat.git
cpZabbix-Alert-WeChat/wechat.py /usr/lib/zabbix/alertscripts
chmod +x wechat.py&& chown zabbix:zabbix wechat.py
#脚本测试
./wechat.py 接收账号 testtest
{"errcode":0,"errmsg":"ok","invaliduser":""}
脚本说明:
corpid、appsecret、agentid就是我们需要从企业号和应用中获取到的信息,其中.corpid、appsecret用于获取accesstoken,agentid用于往应用发送消息。
由于zabbix会往脚本中传入3个参数,分别为sendto(收件人)、subject(报警主题)、message(报警信息)。这3个参数需要在zabbix中配置。
此脚本中没有接受subject参数,而是直接使用sendto及message参数。
6、zabbix配置 
报警媒介类型
名称:weixin报警        类型:脚本        脚本名称:wechat.py        脚本参数:{ALERT.SENDTO}  {ALERT.SUBJECT}  {ALERT.MESSAGE}
添加动作
事件源选择“触发器”,然后“创建动作”  名称:weixin动作        计算方式:与/或                条件:维护状态非在维护   模板=交换机自动发现模板 模板=Template Percona MySQL server   
操作:
Defaultsubject:{TRIGGER.STATUS}: {TRIGGER.NAME}
 
Trigger host:{HOSTNAME}
Trigger ip:{HOST.IP}
Triggertime:{EVENT.DATE}:{EVENT.TIME}
Trigger: {TRIGGER.NAME}
Trigger status:{TRIGGER.STATUS}
Trigger severity:{TRIGGER.SEVERITY}
Trigger URL:{TRIGGER.URL}
 
Item values:
{ITEM.NAME1}({HOST.NAME1}:{ITEM.KEY1}): {ITEM.VALUE1}
{ITEM.NAME2}({HOST.NAME2}:{ITEM.KEY2}): {ITEM.VALUE2}
 
Original event ID:{EVENT.ID}
“默认信息”就是发送到wechat.py脚本的message,“操作”可以定义此动作发送的接收人或接受组。
恢复操作 :
Defaultsubject:{TRIGGER.STATUS}: {TRIGGER.NAME}
Trigger host:{HOSTNAME}
Trigger ip:{HOST.IP}
Triggertime:{EVENT.DATE}:{EVENT.TIME}
Trigger: {TRIGGER.NAME}
Trigger status:{TRIGGER.STATUS}
Trigger severity:{TRIGGER.SEVERITY}
Trigger URL:{TRIGGER.URL}
 
Item values:
{ITEM.NAME1}({HOST.NAME1}:{ITEM.KEY1}): {ITEM.VALUE1}
{ITEM.NAME2}({HOST.NAME2}:{ITEM.KEY2}): {ITEM.VALUE2}
Original event ID:{EVENT.ID}
给用户添加报警媒介
管理–用户,选择属于administrators组中的一个用户,然后选择“报警媒介”-“添加”
测试
当上面的几步操作完成后,我们先对脚本进行测试。
python wechat.py 接收账号test test
 
十七、Zabbix 监 控网站关键词
1、agent端编写shell脚本监控网站关键词,/data/sh/目录shell脚本内容如下:
#!/bin/bash
#by author tang.com
WEBSITE="http://x.x.x.x/"
NUM='curl -s$WEBSITE|grep -c "ATM"'
echo $NUM
2、在客户端zabbix_agentd.conf内容中加入如下代码,并重启agentd服务即可。
UserParameter=check_http_word,sh/data/sh/check_http_word.sh
3、服务器端获取客户端的关键词Key,输入1,则表示ATM关键词存在,如果不为1则表示ATM关键词被窜改,代码如下:
/usr/bin/zabbix_get -sx.x.x.x -k check_http_word
4、ZabbixWeb端添加客户端的Items监控项。
--配置-》主机-》监控项-》创建监控项--
名称:HTTP Wordmonitor        类型:Zabbix客户端        键值:check_http_word
--》创建图型        名称:monitor-HTTP-ATM        监控项:x.x.x.x:HTTPWord monitor  平均 线 左边
--》创建触发器        名称:HTTPWord monitro        严重性:警告        表达式:last()-Last(mostrecent) T value      结果不等于1
除了使用shell脚本方式监控,还可以通过ZabbixWeb界面配置HTTP URL监控,方法如下:
--》配置-》主机-》Web场景-》--
名称:http-web                新的应用集:Apache-web        客户端:Chrome38.0(windows)        
步骤:名称:x.x.x.x        URL:http://x.x.x.x/                        
监测中-》Web监测查看。