zabbix
数据存储
特性
zabbix组件概述
Zabbix程序构成
zabbix常用术语
YUM安装
源码安装
配置文件简介
安装
配置外部主机监控
快速配置一个监控项
存储的值
自定义监控
自定义监控示例
Zabbix报警
利用Django结合zabbix实现类别报警机制思路
zabbix
监控类型:硬件、软件、业务指标数据采集通道:ssh、agent、snmp、telnet、IPMI监控工具:cacti、nagios、zabbix、ganglia
数据存储
时间序列数据(根据时间的走势进行产生的)关系型数据库RRD:轮询数据库时间序列数据库nosql
特性
数据采样:snmp、sshelnet、agent、ipmi,jmx自定义检测机制:UserParamenter自定义指定时间间隔实时绘图展示:graph、map、screen、slide show告警:自定义脚本、notiflcation存储:mysql、pgsql支持模板支持网络自动发现支持API二次开发分布式监控(serverproxyagent)
zabbix组件概述
Zabbix Server:负责接收agent发送的报告信息的核心组件,所有配置、统计数据及操作数据均由其组织进行;Database Storage:专用存储所有配置信息,以及由zabbix收集的数据;Web Interface:zabbix的GUI接口,通常与server运行在同一台主机上;Proxy:可选组件,常用于分布式监控环境中,代理server收集部分被监控端的监控数据并统一发往server端;Agent:部署在被监控主机上,负责收集本地数据并发往server端或者proxy端;
Zabbix程序构成
zabbix_server:服务端守护进程;zabbix_agentd:agent端守护进行;zabbix_get:命令行工具,通常用于server端手动测试采集数据;zabbix_sender:命令行工具,通常用于agent端手动发送数据;zabbix_proxy:代理服务器,可选组件;zabbix_java_gateway:java网关,用于监控jvm相关的信息;
zabbix常用术语
1、主机(host):监控的网络设备,带有IP/DNS;2、主机组(host group):一组逻辑上的主机,或许同时包含主机和模板(template);3、监控项(item):要监控的主机的参数数据;4、触发器(trigger):一组逻辑上的表达式定义了问题发生的阀值;低于阀值,状态OK,高于阀值,状态为有问题;5、事件(event):单个发生的值得注意的事件,比如触发器的状态变化,代理自动注册;6、行为(action):预先定义的针对事件(event)的处理行为;7、报警升级(escalation):在行为中自定义的针对各种场景的操作,比如按顺序发送通知/执行远程命令;8、媒体(media):传送信息的渠道/途径9、模板(template):一套定义好的实体(类别,触发器,图表,应用等)可用于一个或多个主机;10、代理(agent):部署在目标主机上用于监控目标本地资源与应用的进程;11、委托(proxy):能够替代Zabbx主机执行收集数据的部分任务,以减轻主机的负担;12、服务器端(server)13、发送器(sender):发送器是一个命令行工具,可以将允许的参数发送给zabbix服务端;14、收集器(get):收集器是一个用来与zabbix代理通信和接收来自代理的请求信息,通常用于zabbix代理的故障排除;
YUM安装
1、创建数据库MariaDB [(none)]> create database zabbix CHARSET utf8;MariaDB [(none)]> grant all on zabbix.* to 'zabbix'@'127.0.0.1' identified by 'zabbix';MariaDB [(none)]> grant all on zabbix.* to 'zabbix'@'localhost' identified by 'zabbix';MariaDB [(none)]> flush privileges;2、安装server端[root@node1 ~]# yum install -y zabbix40 zabbix40-dbfiles-mysql zabbix40-server3、导入数据[root@node1 ~]# mysql zabbix < /usr/share/zabbix-mysql/schema.sql[root@node1 ~]# mysql zabbix < /usr/share/zabbix-mysql/images.sql[root@node1 ~]# mysql zabbix < /usr/share/zabbix-mysql/data.sql4、配置文件[root@node1 etc]# grep '^[^#]' zabbix_server.confLogFile=/var/log/zabbixsrv/zabbix_server.logLogFileSize=0PidFile=/run/zabbixsrv/zabbix_server.pidSocketDir=/var/lib/zabbixsrv/tmpDBHost=localhostDBName=zabbixDBUser=zabbixDBPassword=zabbixTimeout=4AlertScriptsPath=/var/lib/zabbixsrv/alertscriptsExternalScripts=/var/lib/zabbixsrv/externalscriptsLogSlowQueries=3000TmpDir=/var/lib/zabbixsrv/tmpSSLCertLocation=/var/lib/zabbixsrv/ssl/certsSSLKeyLocation=/var/lib/zabbixsrv/ssl/keys4、安装LAMP环境[root@node1 ~]# yum install -y php php-mysql php-mbstring php-gd php-bcmath php-ldap php-xml5、安装web GUI[root@node1 ~]# yum install -y zabbix40-web zabbix40-web-mysql # 会自动在/etc/conf.d下面创建zabbix.conf访问入口http://172.16.1.2/zabbix/setup.php默认账号密码是admin/zabbix6、安装zabbix-agent[root@node1 ~]# yum install -y zabbix40-agent7、agent配置Server=127.0.0.1:被动监控指明允许哪个服务端过来采样;ListenPort=10050:服务端要过来采样那么就需要监听在地址;StartAgents=3:相应监控端发送监控请求的线程;ServerActive=127.0.0.1:主动监控服务端的IP;Hostname=node1:要给服务端报告信息得告诉服务端自己是谁;RefreshActiveChecks=120:多长时间刷新监控;
源码安装
配置文件简介
# 配置文件简介ListenPort:Server端监听的端口;LogType:日志类型,默认为file;LogFile:日志文件路径;LogFileSize:日志文件最大多大,0为关闭日志,1为无上限,具体查看配置文件介绍;DebugLevel:日志级别,默认为3;PidFile:pid文件路径;SocketDir:存储zabbix-server启动的sock文件存储路径;DBHost:数据库主机IP;DBPort:数据库端口;DBSocket:数据库sock文件地址;DBName:数据库名;DBUser:数据库用户;DBPassword:数据库密码;
安装
# 安装所需要的组件[root@node1 ~]# yum install httpd mariadb mariadb-server php php-mysql php-devel php-xml php-bcmath php-mbstring php-gd wget expect net-snmp gcc mysql-devel libxml2-devel net-snmp-devel libevent-devel curl-devel -y# 创建运行用户[root@node1 ~]# groupadd --system zabbix[root@node1 ~]# useradd --system -g zabbix -d /usr/lib/zabbix -s /sbin/nologin -c "Zabbix Monitoring System" zabbix# 编译安装[root@node1 zabbix-4.0.12]# ./configure --prefix=/usr/local/zabbix --enable-server --enable-agent --with-mysql --with-net-snmp --with-libcurl --with-libxml2[root@node1 zabbix-4.0.12]# make -j 4[root@node1 zabbix-4.0.12]# make install[root@node1 ~]# chown zabbix:zabbix /usr/local/zabbix/ -R# 创建初始化数据[root@node1 ~]# mysql -uroot -e "create database zabbix character set utf8 collate utf8_bin;"[root@node1 ~]# mysql -uroot -e "grant all privileges on zabbix.* to zabbix@localhost identified by 'zabbix';"[root@node1 ~]# mysql -uroot -e "flush privileges;"[root@node1 ~]# mysql -uzabbix -pzabbix zabbix < /usr/local/src/zabbix-4.0.12/database/mysql/schema.sql[root@node1 ~]# mysql -uzabbix -pzabbix zabbix < /usr/local/src/zabbix-4.0.12/database/mysql/images.sql[root@node1 ~]# mysql -uzabbix -pzabbix zabbix < /usr/local/src/zabbix-4.0.12/database/mysql/data.sql# server基础配置[root@node1 ~]# grep '^[^#]' /usr/local/zabbix/etc/zabbix_server.confLogFile=/tmp/zabbix_server.logDBHost=localhostDBName=zabbixDBUser=zabbixDBPassword=zabbixTimeout=4LogSlowQueries=3000# 配置server和agent启动脚本[root@node1 ~]# cp /usr/local/src/zabbix-4.0.12/misc/init.d/fedora/core/zabbix_server /etc/init.d/[root@node1 ~]# cp /usr/local/src/zabbix-4.0.12/misc/init.d/fedora/core/zabbix_agentd /etc/init.d/# 配置前端[root@node1 ~]# cp -r /usr/local/src/zabbix-4.0.12/frontends/php/* /var/www/html/[root@node1 ~]# chown apache:apache /var/www/html -R# 配置中文[root@node1 ~]# mv simkai.ttf /var/www/html/assets/fonts/[root@node1 ~]# cat -n /var/www/html/include/defines.inc.php|grep 'simkai'71 define('ZBX_GRAPH_FONT_NAME', 'simkai'); // font file name112 define('ZBX_FONT_NAME', 'simkai');
配置外部主机监控
# 创建运行用户[root@node1 ~]# groupadd --system zabbix[root@node1 ~]# useradd --system -g zabbix -d /usr/lib/zabbix -s /sbin/nologin -c "Zabbix Monitoring System" zabbix# 安装客户端[root@node1 zabbix-4.0.12]# ./configure --prefix=/usr/local/zabbix --enable-agent[root@node1 zabbix-4.0.12]# make -j 4[root@node1 zabbix-4.0.12]# make install[root@node2 ~]# chown zabbix:zabbix /usr/local/zabbix/ -R# agent基础配置[root@node2 zabbix]# grep '^[^#]' etc/zabbix_agentd.confLogFile=/tmp/zabbix_agentd.logServer=172.16.1.2 # 允许主动监控的serverServerActive=172.16.1.2 # 允许被动监控的serverHostname=172.16.1.3 # 在zabbix-server显示的主机名称# 配置agent启动脚本[root@node1 ~]# cp /usr/local/src/zabbix-4.0.12/misc/init.d/fedora/core/zabbix_agentd /etc/init.d/
快速配置一个监控项
主机组->主机->应用->监控项->触发器(生成事件)->注册操作
存储的值
As is:不对数据做任何处理;Delta(simple change):本次采样的数据减去前一次采样的数据;Delta(speed per second):本次采样的数据减去前次采样的数据,并且除以经过时长,速率数据;
自定义监控
自定义监控示例
# 编写agent端监控脚本[root@node2 ]# cat /data/scripts/hostname.sh case incce) echo $HOSTNAME;;esac# 加入监控项[root@node2 ]# grep '^Include' zabbix_agentd.confInclude=/usr/local/zabbix/etc/zabbix_agentd.conf.d/*.conf[root@node2 ]# cat /usr/local/zabbix/etc/zabbix_agentd.conf.d/zabbix.conf UserParameter=hostname[*],/data/scripts/hostname.sh # [*]:表示接受传过来的所有参数# 在server端测试监控[root@node1 ~]# /usr/local/zabbix/bin/zabbix_get -s 172.16.1.3 -k "hostname[cce]"node2.cce.com
Zabbix报警
第一步应该是触发器,第二步是报警媒介,第三步是用户
利用Django结合zabbix实现类别报警机制思路
因为zabbix的actions可以有步骤的触发相应的事件,那么我们就可以利用这个特点来做当首次触发的时候我们可以执行远程命令,第二次触发的时候可以发送邮件脚本,第三次触发的时候我们可以利用python调用阿里云的电话接口给相应的技术人员打电话,这两个通知的事件通过用户组的组名来区别;
注意点:在创建新的用户的时候,创建的新用户需要加入组,并且组的权限要对所有群组至少有读的权限,否则该用户将无法接收到报警信息