zabbix多种监控功能:
支持Zabbix Agent
SNMP Agent
IPMI Agent
无代理监控
web服务监控
数据库监控
zabbix内部监控
计算以后进行监控展示
客户自定义命令监控
特性:
数据采样:支持snmp,ssh,telnet,agent,ipmi,jmx;
支持自定义检测机制:通过UserParameter实现;
支持自定义指定时间间隔;历史数据保存多久,趋势数据保存多久;
支持实时绘图:展示,通过内置绘图模板,读取数据库数据完成绘图;
graph 绘图;
map 绘制网络拓扑图;
screen 定义一个屏幕展示各种图;
slide show 支持使用幻灯片机制显示;
告警:
支持告警升级;
定义脚本script
notification发通知,发邮件通知
数据存储:
数据库:自动超期数据清理
mysql
pgsql
支持使用模板:完成快速监控和配置;
网络自动发现:zabbix可自动扫描网段,发现即可添加被监控主机;
分布式监控:
server <--> proxy代理 <--> agent/ssh/ipmi
所有配置都在server端进行,自动推送;
API接口:支持研发扩展;
zabbix database负责专用于存储所有配置信息以及由Zabbix收集的数据;
zabbix server是负责接收agnet发送的报告信息的核心组件,所有配置、统计数据及操作数据均由其组织进行;
zabbix server在zabbix服务器端运行一个进程就叫zabbix server;这个进程有n种子进程,对于每一种不同的监控接口,都有专用的子进程完成此类监控收集数据的实
现;例如web页面监控,通过ICMP/IPMI/SNMP等协议监控设备,通过agent监控操作系统及对JMX(j2ee)监控;因此,每一类监控,都应该启动一个或几个子进程
进行监控,启动多少个子进程,取决于监控指标的个数;
zabbix server就是靠这些协议不断收集数据,并存储在zabbix database数据库中;
如果想查看,就通过zabbix web GUI查看,zabbix web GUI使用php语言研发,所有的配置也在GUI接口上完成,通常与Zabbix server运行在同一台主机上;
proxy的可选组件,常用于分布监控环境中,代理server收集部分被监控端的监控数据并统一发往server端;
agent是部署在被监控主机上,负责收集本地数据并发往server端或proxy端;
proxy是可选组件,常用于分布监控环境中,代理server收集部分被监控端的监控数据并统一发往server端;
agent是部署在被监控主机上,负责收集本地数据并发往server端或proxy端;
zabbix支持分布式监控:所有数据存储在数据库中,例如zabbix server只监控5万个指标,另外2万个指标交给代理服务器进行监控,代理监控服务器先把收集的数据放
在本地数据库,每隔一段时间,连接zabbix server后,把数据统计汇总后一次性发出;这样减轻了连接的压力;
在大规模监控中,Zabbix server、Zabbix database、Zabbix web GUI有可能是分别的主机提供,彼此间通过socket进行通信;
server1运行Zabbix sever,server2运行Zabbix web gui和apache、php(mysql或pgsql),server3运行mysql或pgsql数据库;通过server2的web页面进行配置和展示,Zabbix server把采集的数据存储在数据库中;
Zabbix server所有运行通过Zabbix_server.conf配置文件加载,运行中的所有日志信息,记录在Zabbix_server.log文件中;
Zabbix agent每个agent端运行一个zabbix_agentd守护进程,zabbix_agentd通过负责在本地监控各种应用,例如数据库、硬件设备、应用程序等等,把收集的数据通过zabbix协议发送给zabbix server,然后进行存储;
对于agnt通过zabbix_agentd.conf配置文件加载自己的配置,每个zabbix agent产生的日志信息记录在zabbix_agentd.log文件中;
zabbix proxy也需要配置文件zabbix_proxy.conf,日志文件zabbix_proxy.log;
配置好zabbix_agentd,在zabbix server端通过使用zabbix_get命令手动获取zabbix agent端数据测试,被动监控;zabbix agent端通过使用zabbix_sender命令,手
动向zabbix server发送数据测试,主动监控;
1、zabbix监控java应用时,通过java gateway组件与java应用程序通信;
2、zabbix程序的构成:
zabbix_server:服务端守护进程;
zabbix_agentd:agent端守护进程;
zabbix_proxy:代理服务器,可选组件;
zabbix_get:命令行工具,通常用于手动向agent发起数据采集请求;(测试数据采集);
zabbix_sender:命令行工具,通常运行与agent端,手动向server端发送数据;
zabbix_java_gateway:JMX接口用到的组件,zabbix2.0引入,java网关类似于 zabbix_agentd,但只用于监控java或JVM虚拟机相关程序;只能是单单向,
由zabbix server从JMX来取数据;
3、zabbix常用术语:
主机(host):要监控的网络设备;可有ip后dns名称指定;
主机组(host group):主机的逻辑容器;可以包含主机和模板,但同一组内的主机模板不能互相连接,主机组通常给用户或用户组指派权限时使用;
监控项(item):监控的数据指标,zabbix每一个item用一个key标识,可有用于标明的监控项,一个监控项就是一个采集指标,所以定义监控项就是定义一个key;key指明了用什么命令采集数据;这个key就是定义的采集指标或指标采集时所用到的命令的简写标识;
触发器(trigger):一个表达式,用于评估某监控对象的某特定item内所接收到的数据是否在合理范围内,即阈值;接收到的数据量大于阈值时,触发器状态将从OK转变为Problem,当数据量再次回归到合理范围内时,其状态将从Problem转换回Ok;
事件(event):即发生的一个值得关注的事情,例如触发器的状态转变,新的agent或重新上线的agnet的自动注册等;
动作(action):指对于特定事件事先定义的处理方法,通过包含操作(如发通知)和条件(何时执行操作);
报警升级(escalation):发生报警或执行远程命令的自定义方案,如每隔5分钟发生一次警报,共发送5次等;
媒介(media):发送通知的手动或通道,如email,Jabber或SMS等;
通知(notification):通过选定的媒介向用户发送的有关某事件的信息;
远程命令(remote command):预定义的命令,可在被监控主机处于某特定条件下自动执行;
模板(template):用于快速定义被监控主机的预设条目集合,通常包含了item、trigger、graph、screen、application以及low-level discovery rule;模板可以直接链接至单个主机;
应用(application):一组item相关联的集合;
web场景(web scennario):用于检测web站点可用性的一个或多个HTTP请求;
前端(frontend):zabbix的web接口;
zabbix server端由zabbix poller进程从各被监控端拉取数据,例如每5分钟poller进程向zabbix agent端、snmp端或基于internal机制,向被监控项发起数据采集请求;任何poller的执行都基于items监控项进行的;定义了监控项就意味着基于某个命令来完成数据采集;
item会采集出时间序列数据,对每个数据判断是否在有效区间内,大多数item都需要定义触发器trigger,超过阈值进行触发一个报警事件;
触发器一旦触发一个事件,action能订阅事件,来触发某一动作;所以在trigger之上,还要定义触发事件执行的动作以便完成报警通知或执行远程脚本;
某一个监控项都是被监控主机上的某一指标;
可把主机定义一个组,在套用模板时方便批量监控部署操作;
maintenance是维护模式,不让触发器报警;
zabbix server端的子进程
poller通用的,基于agent实现采集;
httppoller执行基于http协议监控数据采集;
还有很多poller,例如ipmipoller、snmppoller、jmxpoller;
housekeeper进程负责清理过期数据;例如每5分钟检查一次是否有过期数据;
pinger进程探测主机是否在线;
nodewatcher进程监控节点是否在线;
alerter报警器,执行报警时可分级escalator;
可实现自动发现discoverer;
db_config_syncer与代理通信时发送数据配置同步;
db_data_syncer与代理通信时发送数据同步;
watchdog进程是用来监控每个子进程是否OK;
zabbix的安装
一、zabbix前端软件依赖:
要求部署apache、php;
其中php要提供的模块:
gb 为php gd的扩展,必须支持--with-png-dir, --with-jpeg-dir, --with-freetype-dir;
bcmath 为php-bcmath模块,--enable-bcmath;
ctype 为php-ctype模块,--enable-ctype;
libXML 为php-xml或php5-dom模块;
xmlreader 为php-xmlreader模块;
xmlwriter 为php-xmlwriter模块;
session 为php-session模块;
sockets 为php-net-socket模块,--enable-sockets;
mbstring 为多字节字符串模块,php-mbstring模块,--enable-mbstring;
gettext 为php-gettext模块,--with-gettext;
ibm_db2 为如果zabbix后端数据库是IBM DB2数据库所提供的模块;
mysql 为如果zabbix后端数据库是MYSQL数据库所提供的模块;
oci8 为如果zabbix后端数据库是Oracle数据库所提供的模块;
pgsql 为如果zabbix后端数据库是PostgreSQL数据库所提供的模块;
sqlite3 为如果zabbix后端数据库是SQLite数据库所提供的模块;
二、zabbix服务器依赖的软件
OpenIPMI为支持IPMI所依赖到的软件;
libssh2为支持SSH所依赖到的软件;
fping为支持ICMP所依赖到的软件;
libcurl为支持web监控所依赖到的软件;
libiksemel为支持Jabber即时通信协议所依赖到的软件;
net-snmp为支持SNMP所依赖到的软件;
三、安装
rpm -ivh http://repo.zabbix.com/zabbix/3.0/rhel/6/x86_64/zabbix-release-3.0-1.el6.noarch.rpm
1、zabbix基本信息yum list all|grep zabbix
zabbix-web-mysql 为链接mysql的组件;
zabbix-sender 对于agent端使用的测试工具手动发送数据给服务端;
zabbix-get 对于服务器端用到的工具手动到agent端获取数据;
2、mysql的安装(centos7)
yum -y install mariadb-server
systemctl start mariadb
ss -ntl
vim /etc/my.cnf
添加
skip_name_resolve=on 禁止数据库反解主机名
innodb_file_per_table=on 开启独立表空间
其中:socket=/var/lib/mysql/mysql.sock 此路径在zabbix配置文件中会用到。
systemctl restart mariadb
mysql 连接
CREATE DATABASE zabbix CHARSET 'uft8';
GRANT ALL ON zabbix.* TO zbxuser@'127.0.0.1' IDENTIFIED BY 'zbxpass';
GRANT ALL ON zabbix.* TO zbxuser@'172.20.52.%' IDENTIFIED BY 'zbxpass';
FLUSH PRIVILEGES;
3、zabbix安装
[root@baby1 run]# rpm -ql zabbix-server-mysql /etc/logrotate.d/zabbix-server /etc/zabbix/zabbix_server.conf /usr/lib/systemd/system/zabbix-server.service /usr/lib/tmpfiles.d/zabbix-server.conf /usr/lib/zabbix/alertscripts /usr/lib/zabbix/externalscripts /usr/sbin/zabbix_server_mysql /usr/share/doc/zabbix-server-mysql-3.0.8 /usr/share/doc/zabbix-server-mysql-3.0.8/AUTHORS /usr/share/doc/zabbix-server-mysql-3.0.8/COPYING /usr/share/doc/zabbix-server-mysql-3.0.8/ChangeLog /usr/share/doc/zabbix-server-mysql-3.0.8/NEWS /usr/share/doc/zabbix-server-mysql-3.0.8/README /usr/share/doc/zabbix-server-mysql-3.0.8/create.sql.gz /usr/share/man/man8/zabbix_server.8.gz /var/log/zabbix /var/run/zabbix
cd /usr/share/doc/zabbix-server-mysql-3.0.8/
gzip -d create.sql.gz
mysql -h127.0.0.1 -uzbxuser -pzbxpass zabbix < create.sql
导入zabbix库中;
登录数据库验证导入是否成功:
]# mysql
> use zabbix
> SHOW TABLES;
]# cd /etc/zabbix/
]# cp /etc/zabbix/zabbix_server.conf{,.bak}
]# vim /etc/zabbix/zabbix_server.conf
其中:
在GENERAL PARAMETERS段:
ListenPort=10051
SourceIP= 执行监控操作时,zabbix server有多个ip时,指定使用的IP,因为客户端在执行监控时要验证服务端ip的,基于ip授权;
日志设置
日志类型有三种方式:
system - syslog 写入系统日志;
file - file specified with LogFile parameter 自定义单独使用日志文件;
console - standard output 日志发往控制台,调试才使用;
LogType=file 日志类型
LogFile=/var/log/zabbix/zabbix_server.log
LogFileSize=0 设置日志文件大小,超过后自动滚动;0表示不滚动;
PidFile=/var/run/zabbix/zabbix_server.pid 服务端pid文件的路径;
DBHost=127.0.0.1 数据库服务器地址;如果不在当前主机此项是必须改的;
DBName=zabbix 数据库名
DBUser=zbxuser 数据库登录用户
DBPassword=zbxpass 数据库登录密码
DBSocket=/var/lib/mysql/mysql.sock 因为mysql数据库在本地,此项为本地通信
rpm -q php-mysql 确保安装php-mysql程序包;因为zabbix依赖php;
]# yum -y install php-mysql httpd
还要指明zabbix的时区,即配置php的时区指定;两种方式修改php时区,一个是全局php.ini,一个是zabbix在php中自己的配置文件/etc/httpd/conf.d/zabbix.conf;
]# vim /etc/httpd/conf.d/zabbix.conf
仅修改:
php_value date.timezone Asia/Shanghai
其它都是定义授权项的无需修改;
]# systemctl start httpd.service
]# ss -tnl 查看80端口是否启动;
浏览器输入http://172.20.52.185/zabbix
第一次启动时,会自动跳转到setup安装操作;
点击下一步:
如果 PHP option 开通的有失败,只需修改 php.ini 文件中的各项参数;
其它项目如果失败,表明没有此php的扩展模块,需要安装失败的模块即可;如果是编译安装就要把模块编译进来,如果是yum安装的php,则使用php-加上失败的名
称,即可安装;
没有问题,点下一步;
这一步,把host/name/user/password,填写好。最好要填写127.0.0.1或者其IP地址。要填写主机名最好vim /etc/hosts查看一下。
填好IP,进行下一步
最后得到
输入zabbix默认的用户、密码登录:用户为admin,密码为zabbix;
登录进去后,发现Zabbix is runnin 的value值为NO,紧接着我就查看端口情况,发现10051端口没有打开。使用tail -f /var/log/zabbix/zabbix_server.log 中出现如下报错。
密码是正确的,授权出现了问题。回头查看当时的授权没有给“localhost”,还有可能的原因是/etc/hosts中IP与主机名的对应关系不正确。
后来使用了grant all privileges on zabbix.* to zbxuser@localhost identified by 'zbxpass';
FLUSH PRIVILEGES;并且重启服务。
就看到了端口打开。另外还有注意的是配置文件中的DBSocket的设置问题。务必与mysql的一致。可以通过ps aux|grep mysql来查看mysql的启动项的内容。