Zabbix架构:zabbix基本术语、zabbix安装、配置和应用
Zabbix架构中的组件:
zabbix-server:C语言 zabbix-server和zabbix-agent通过zabbix协议来工作
OS:zabbix-agent:C语言
zabbix-web:GUI接口,是zabbix的配置接口,监控哪些主机、指标以及如何报警等都需要通过zabbix-web GUI配置,使用http协议或者https协议
zabbix-proxy:分布式监控环境中的专用组件
zabbix-database:MySQL,PGSQL(postgreSQL),Oracle,DB2,SQLite(不是zabbix的原生组件)
Zabbix架构描述
zabbix-server对zabbix-agent端收集数据有两种方式:
1、zabbix-server自身直接联系agent端来获取数据,周期性获取数据。
2、使用zabbix-get来获取数据,通过手动写脚本或者在命令行中使用程序收集数据,一般用来测试。
zabbix-agent端 zabbix-agentd 是一个守护进程,包括监听的地址和端口,监听在一个套接字上等待监控端收集数据。
如果zabbix-server定义了工作在被动模式下,agent端就会通过zabbix-sender模式主动发送数据给server端。
对于database的数据设定,可以通过zabbix-web实现提供gui接口,由于web是使用php开发的,所以需要一个LAMP平台,在LAMP平台上部署上zabbix-web,控制人员通过浏览器连入GUI接口,完成对zabbix所要监听的指标进行设定。
无论是使用zabbix-server还是zabbix-agent或者zabbix-proxy都需要为它们提供储存服务。
zabbix-server、Database和zabbix web gui三个可以定义在同一个主机上也可以分别定义在不同的主机上,但是必须要保证sever和web gui必须要连接上Database。
核心组件3部分:
- zabbix-server
- database
- zabbix web gui
zabbix的三种监控机制:
1、server端周期性的发送收集数据的请求给agent端,agent验证没有问题后就把收集好的数据发送到server端
2、pull,对客户端而言是被动监控,对agent端是主动的。server端不再主动向agent端poll(拉取)数据,而是agent端定期向server端send数据,这种机制就是ServerActive机制。
3、trapper监控机制:server端可能之前并不知道agent端,突然agent端主动向server端发送数据,这就需要server端捕获这些数据。
Zabbix常用术语
1、主机(host):要监控的网络设备,可有IP或DNS名称指定;
2、主机组(host group):主机的逻辑容器,可以包含主机和模板,但同一个组内的主机和模板不能互相连接;主机组通常在给用户或用户组指派监控权限时使用;
3、监控项(item):一个特定监控指标的相关数据,这些数据来自于被监控对象;item是zabbix进行数据收集的核心,没有item,将没有数据;相对某监控对象来说,每个item都有"key"进行标识
4、触发器(trigger):一个表达式,用于评估某监控对象的某特定item内所接收到的数据是否在合理范围内,即阈值;接收到的数据量大于阈值时,触发器状态将从"OK"转变为"problem",
当数据量再次回归到合理范围时,其状态将从"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的逻辑架构
zabbix启动的进程
部署zabbix硬件要求
Zabbix产生的数据主要由四部分组成:(database存储空间如何计算)
配置数据:
历史数据:每一次采集大概有50Bytes
历史趋势数据:每一个采集大概有128Bytes
时间数据:每一个采集大概有130Bytes
Zabbix frontend 前端对于安装软件的要求
Zabbix server 服务器端对于安装软件的要求
安装zabbix服务器端的步骤
1、安装zabbix-server
2、安装zabbix web interface
zabbix部署要求:
如果不使用分布式监控,则zabbix-proxy可以不部署。主要就是zabbix-server和zabbix-agent,其他还有zabbix-web和zabbix-database;
那么要准备好database数据库和LAMP平台,那么LAMP中的M即数据库要指向database。
配置环境
监控端: node1:192.168.128.131 安装zabbix-server zabbix-database、zabbix web
被监控端:node2:192.168.128.132 作为第一个被监控端,是agentd的部署节点
被监控端:winXP:作为第二个被监控端,也部署agent端
安装演示
在node1节点即192.168.128.131上安装,这台主机既是zabbix-server、zabbix-agent(要监控自己)、zabbix web、Database,所以在安装程序是就要安装程序包:zabbix-server、zabbix-web和zabbix-agent,
同时这些程序还要依赖其他程序,所以要解决好程序包依赖。之前database已经安装了,这里不再安装。
server端需要的程序有:(注意不同版本需要安装的软件包有差异) 可对比:
zabbix-server-mysql
zabbix-get
web端需要的程序有:
zabbix-web
zabbix-web-mysql
agent端需要的程序有:
zabbix-agent
zabbix-sender
准备数据库
# yum install mariadb-server //首先安装数据库服务即database
# vim /etc/my.cnf
innodb_file_per_table = 1 skip_name_resolve = 1
# systemctl restart mariadb
[root@node1 ~]# mysql Welcome to the MariaDB monitor. Commands end with ; or \g.Your MariaDB connection id is 3Server version: 5.5.60-MariaDB MariaDB ServerCopyright (c) 2000, 2018, 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; //创建zabbix数据库Query OK, 1 row affected (0.01 sec)MariaDB [(none)]> grant all on zabbix.* to 'zbxuser'@'192.168.128.%' identified by '123456'; //创建用户zbxuser,并对此用户授权访问数据库zabbix,以此作为zabbix server/webQuery OK, 0 rows affected (0.00 sec) //访问这个数据库服务器的一个用户。MariaDB [(none)]> grant all on zabbix.* to 'zbxuser'@'node1' identified by '123456'; //由于mariadb会对本机主机名做解析,所以允许本机主机访问数据库。Query OK, 0 rows affected (0.00 sec)MariaDB [(none)]> flush privileges;Query OK, 0 rows affected (0.00 sec)MariaDB [(none)]> exitBye
[root@node1 ~]# mysql -uzbxuser -h192.168.128.131 -p //此时新创建的用户是否可以连接数据库Enter password: Welcome to the MariaDB monitor. Commands end with ; or \g.Your MariaDB connection id is 5Server version: 5.5.60-MariaDB MariaDB ServerCopyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.MariaDB [(none)]> exitBye
# yum install httpd
安装zabbix即相关程序包
[root@node1 yum.repos.d]# rpm -ivh http://repo.zabbix.com/zabbix/4.0/rhel/7/x86_64/zabbix-release-4.0-1.el7.noarch.rpm
或者:
[root@node1 yum.repos.d]# rpm -ivh http://mirrors.aliyun.com/zabbix/zabbix/3.2/rhel/7/x86_64/zabbix-release-3.2-1.el7.noarch.rpm
# yum install zabbix-server zabbix-server-mysql zabbix-get zabbix-web zabbix-web-mysql zabbix-agent zabbix-sender
# cd /etc/zabbix/ //生成如下文件 //注意server端一般也需要安装server-agent和sender,因为server端也需要监控自己
web zabbix_agentd.conf zabbix_agentd.d zabbix_server.conf
# systemctl start httpd //在配置zabbix web之前,启动web服务器
# ls /etc/httpd/conf.d/ //注意安装zabbix web后,此目录下会有zabbix.conf文件,但是要重启/重载httpd服务器
autoindex.conf php.conf README userdir.conf welcome.conf zabbix.conf
导入数据到msqyl中
# ls /usr/share/doc/zabbix-server-mysql-4.0.3/
AUTHORS ChangeLog COPYING create.sql.gz NEWS README# zcat create.sql.gz | mysql -uzbxuser -h192.168.128.131 -p123456 zabbix //将数据导入zabbix
# mysql -uzbxuser -h192.168.128.131 -p //查看收据是否导入
[root@node1 ~]# mysql -uzbxuser -h192.168.128.131 -p123456
Welcome to the MariaDB monitor. Commands end with ; or \g.Your MariaDB connection id is 1008Server version: 5.5.60-MariaDB MariaDB ServerCopyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [(none)]> show databases;
+--------------------+| Database |+--------------------+| information_schema || test || zabbix |+--------------------+MariaDB [(none)]> use zabbix;Reading table information for completion of table and column namesYou can turn off this feature to get a quicker startup with -ADatabase changedMariaDB [zabbix]> show tables;+----------------------------+| Tables_in_zabbix |+----------------------------+| acknowledges || actions || alerts || application_discovery || application_prototype || application_template || applications | .......
| timeperiods |
| trends | | trends_uint | | trigger_depends | | trigger_discovery | | trigger_tag | | triggers | | users | | users_groups | | usrgrp | | valuemaps | +----------------------------+ 127 rows in set (0.01 sec)
修改zabbix的主配置文件制定mysql服务器的相关操作
# cd /etc/zabbix/
# vim zabbix_server.conf
# ListenPort=10051 //zabbix默认监听的端口是10051
# SourceIP= //向外发起连接时,向外界展示的IP,如果有多个需要指定
LogFile=/var/log/zabbix/zabbix_server.log //日志文件
LogFileSize=0 //日志滚动,0表示禁止
# DebugLevel=3 //日志级别,默认是3
# DBHost=localhost //数据库服务器节点,默认是localhost,如果database和zabbix在同一个节点即是本机,尽量用localhost,这样通信会更快
DBHost=192.168.128.131 //这里为了演示指定节点IPDBName=zabbix //这里确保是之前创建的database的name
DBUser=zbxuser
DBPassword=123456
# find / -name mysql.sock /var/lib/mysql/mysql.sock
# DBSocket=/tmp/mysql.sock //如果基于本机即localhost通信,则此项一定要修改正确,找到mysql.sock的位置
DBSocket=/var/lib/mysql.sock //由于本次实验前面已经修改基于IP通信,所以此次可以不做修改后面就是修改zabbix中子进程启动的个数,仍然在zabbix的主配置文件:zabbix_server.conf进行修改,这里不再修改
# rpm -ql zabbix-server-mysql //到版本3以后已经没有zabix和zabbix-server单独安装包了。
/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.2.11/usr/share/doc/zabbix-server-mysql-3.2.11/AUTHORS/usr/share/doc/zabbix-server-mysql-3.2.11/COPYING/usr/share/doc/zabbix-server-mysql-3.2.11/ChangeLog/usr/share/doc/zabbix-server-mysql-3.2.11/NEWS/usr/share/doc/zabbix-server-mysql-3.2.11/README/usr/share/doc/zabbix-server-mysql-3.2.11/create.sql.gz /usr/share/man/man8/zabbix_server.8.gz/var/log/zabbix/var/run/zabbix
# systemctl start zabbix-server //启动服务
# ss -tunlp //可以看出zabbix启动了很多的子进程
users:(("zabbix_server",pid=7956,fd=6),("zabbix_server",pid=7955,fd=6),("zabbix_server",pid=7954,fd=6),("zabbix_server",pid=7953,fd=6),("zabbix_server",pid=7952,fd=6),("zabbix_server",pid=7951,fd=6),("zabbix_server",pid=7950,fd=6),("zabbix_server",pid=7949,fd=6),("zabbix_server",pid=7948,fd=6),("zabbix_server",pid=7940,fd=6),("zabbix_server",pid=7939,fd=6),("zabbix_server",pid=7938,fd=6),("zabbix_server",pid=7937,fd=6),("zabbix_server",pid=7936,fd=6),("zabbix_server",pid=7935,fd=6),("zabbix_server",pid=7934,fd=6),("zabbix_server",pid=7933,fd=6),("zabbix_server",pid=7932,fd=6),("zabbix_server",pid=7931,fd=6),("zabbix_server",pid=7930,fd=6),("zabbix_server",pid=7929,fd=6),("zabbix_server",pid=7928,fd=6),("zabbix_server",pid=7927,fd=6),("zabbix_server",pid=7926,fd=6),("zabbix_server",pid=7924,fd=6),("zabbix_server",pid=7923,fd=6),("zabbix_server",pid=7922,fd=6),("zabbix_server",pid=7917,fd=6))
users:(("zabbix_server",pid=7956,fd=7),("zabbix_server",pid=7955,fd=7),("zabbix_server",pid=7954,fd=7),("zabbix_server",pid=7953,fd=7),("zabbix_server",pid=7952,fd=7),("zabbix_server",pid=7951,fd=7),("zabbix_server",pid=7950,fd=7),("zabbix_server",pid=7949,fd=7),("zabbix_server",pid=7948,fd=7),("zabbix_server",pid=7940,fd=7),("zabbix_server",pid=7939,fd=7),("zabbix_server",pid=7938,fd=7),("zabbix_server",pid=7937,fd=7),("zabbix_server",pid=7936,fd=7),("zabbix_server",pid=7935,fd=7),("zabbix_server",pid=7934,fd=7),("zabbix_server",pid=7933,fd=7),("zabbix_server",pid=7932,fd=7),("zabbix_server",pid=7931,fd=7),("zabbix_server",pid=7930,fd=7),("zabbix_server",pid=7929,fd=7),("zabbix_server",pid=7928,fd=7),("zabbix_server",pid=7927,fd=7),("zabbix_server",pid=7926,fd=7),("zabbix_server",pid=7924,fd=7),("zabbix_server",pid=7923,fd=7),("zabbix_server",pid=7922,fd=7),("zabbix_server",pid=7917,fd=7))
修改php的时区
# vim /etc/php.ini
[Date]
; Defines the default timezone used by the date functions
; http://php.net/date.timezone;date.timezone = //这里默认是不启动的date.timezone = Asia/Shanghai //修改为当前主机所在时区
# systemctl restart httpd
在浏览器中输入:http://192.168.128.131/zabbix/setup.php
由于当前server端没有配置agent,所以server端无法监控主机,下面就为server端配置agent。
# vim /etc/zabbix/zabbix_agentd.conf
Server=127.0.0.1,192.168.128.131 //指明服务器是哪个主机,是基于IP的授权机制,即允许这个IP的zabbix-server来本地获取数据,可以有多个。
ServerActive=127.0.0.1,192.168.128.131 //作为agent端,可以通知server端来获取数据,这里就定义了agent端通知哪个服务器来获取数据,可多个
//注意127.0.0.1表示本机,如果server端又作为agent时,127.0.0.1一定不能去掉,如果获取server端就无法获取自身的监控数据了。
Hostname=node1 //Hostname是指在对应的节点实现自动发现时(比如agent端自动联系server端时,agent端会告诉server端自己的主机名是什么),因此在zabbix支持由各agent端主动推送数据时,这个Hostname一定要全局唯一,不要与其他agent端的主机名冲突,可以使用DNS解析或主机名。
# systemctl start zabbix-agent
# ss -tunlp
tcp LISTEN 0 128 *:10050 *:* users:(("zabbix_agentd",pid=26330,fd=4),("zabbix_agentd",pid=26329,fd=4),("zabbix_agentd",pid=26328,fd=4),("zabbix_agentd",pid=26327,fd=4),("zabbix_agentd",pid=26326,fd=4),("zabbix_agentd",pid=26325,fd=4),("zabbix_agentd",pid=26324,fd=4))
此时只需要在Status点击Disabled改为Enabled就可以监控zabbix-server了
改为Enabled后就可以对agent做监控了,而后zabbix-server开始探测被监控给主机是否在线,如果在线就检测主机上的各个Items。
在一个主机上配置的条目有很多,其中Items是核心,从上图可以看出Items有64个,这些Items是从zabbix内部模板中来的。
定义一个zabbix监控的其他主机,需要在被监控主机上部署上agent,然后在仪表盘的Hosts中手动Create host,把node2(192.168.128.132)添加进来,示例演示如下:
[root@node2 yum.repos.d]# rpm -ivh http://repo.zabbix.com/zabbix/3.2/rhel/7/x86_64/zabbix-release-3.2-1.el7.noarch.rpm
# yum install zabbix-agent zabbix-sender //只需安装与agent相关的程序包
# vim /etc/zabbix/zabbix_agentd.conf //修改agent端的文件配置
Server=192.168.128.131 //因为node2只是agent端,不是server端,所以不需要127.0.0.1了
ServerActive=192.168.128.131
Hostname=node2
# systemctl start zabbix-agent
# ss -tunlp
tcp LISTEN 0 128 *:10050 *:* users:(("zabbix_agentd",pid=4271,fd=4),("zabbix_agentd",pid=4270,fd=4),("zabbix_agentd",pid=4269,fd=4),("zabbix_agentd",pid=4268,fd=4),("zabbix_agentd",pid=4267,fd=4),("zabbix_agentd",pid=4266,fd=4))