Zabbix的安装和使用

zabbix

监控系统:硬件、软件、业务
	采样:sensor
	存储:
		数据:历史数据、趋势数据
	展示:
	报警:
	
	被监控对象:主机、交换机、路由器、UPS、...
	
	采样:周期性地获取某个关注指标相关的数据;
	
	监控系统采集数据通道:
		ssh/telnet
		agent:
			master/agent
		IPMI:
		SNMP:Simple Network Management Protocol
			v1,v2(community,public),v3
		JMX:Java Management extension
			JVM:Java Virtual Machine
	
	存储系统:
		历史数据:每次采样的结果,保存时长较短,一般3个月、半年;
		趋势数据:聚合数据,保存时长较长周期内的数据;

		存储系统:
			关系型数据库:MySQL,PGSQL,Oracle,...
			rrd:RoundRobin Database
			NoSQL:redis/mongodb
				时间序列数据库
	
	报警:
		邮件、短信、微信
		脚本
	
	展示:
		WebGUI
		GUI
		APP

	开源监控项目:
		cacti:采样,报警,保存,展示;
		nagios:采样,报警,不存储,不存储也就不展示;
		zabbix:
		ganglia

zabbix:
	Version:
		LTS:Long Time Support
			3.0,4.0,5.0
	
	特性:
		数据采样:snmp,agent,ipmi,jmx;
		报警:
			升级:步进
		数据存储:
			mysql/pgsql
		展示:php程序
			实时绘图:graph,screen,slide show,map
		
		支持监控模板
		网络自动发现
		分布式监控
		API:支持二次开发
		

zabbix架构图

zabbix程序组件概述

Zabbix Server:服务端守护进程,负责接收agent发送的报告信息的核心组件,所有配置、统计数据及操作数据均由其组织进行;

Database Storage(zabbix_storage):存储系统,MySQL/PgSQL,专用于存储所有配置信息,以及由zabbix收集的数据;

Web interface(zabbix_web): zabbix的GUI接口,通常与Server运行在同一台主机上;

Proxy(zabbix_proxy):代理服务器,可选组件;常用于分布监控环境中,代理Server收集部分被监控端的监控数据并统一发往Server端;

Agent(zabbix_agentd):agent守护进程,部署在被监控主机上,负责收集本地数据并发往Server端或Proxy端; 

zabbix_get:命令行工具,测试向agent端发起数据采集请求;

zabbix_sender:命令行,测试向server端发送数据;

zabbix_java_gateway:java网关;

Zabbix监控Java应用

Zabbix Architecture

Zabbix逻辑组件

主机(host):要监控的网络设备,可由IP或DNS名称指定;

主机组(host group):主机的逻辑容器,可以包含主机和模板,但同一个组内的主机和模板不能互相链接;主机组通常在给用户或用户组指派监控权限时使用;

监控项(item):一个特定监控指标的相关的数据,这些数据来自于被监控对象;item是zabbix进行数据收集的核心,没有item,将没有数据;相对某监控对象来说,每个item都由“key”进行标识;
触发器(trigger):一个表达式,用于评估某监控对象的某特定item内所有接收到的数据是否在合理范围内,即阈值;接收到的数据量大于阈值时,触发器状态将从“OK”转变为“Problem”,当数据量再次回归到合理范围时,其状态将从“Problem”转换回“OK”;

事件(event):即发生的一个值得关注的事情,例如触发器的状态转变,新的agent或重新上线的agent的自动注册等;

动作(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接口;

图形(graph):

屏幕(screens):

幻灯(slide show):

item:item key
	两类:
		zabbix内建
			zabbix agent:服务端通过agent拉取数据
			zabbix agent(active):由agent主动推送数据到服务端
		用户自定义(UserParameter)
	
采集到的数据类型:
	数值:
		整数
		浮点数
	字符型:
		字符串
		text
		log
	存储的值:
		As is:不对数据做任何处理,存储采集到的数据本身;
		Delta(simple change):本次采样的数据减去前一次采样的数据;
		Delta(speed per second):本次采样的数据减去前一次采样的数据,再除以经过的时长;速率数据;


逻辑组件

zabbix安装及配置

1.安装 zabbix-server(服务端)

(1) 安装ZBX DB 192.168.0.112
	yum install mariadb-server
	vim /etc/my.conf
		skip-name-resolve = ON
		innodb_file_per_table = ON
	
	mysql>
	mysql>create database zabbix charset 'utf8';
	mysql>grant all on 'zabbix.*' to 'zbxuser'@'192.168.%.%' identified by 'zbxpass';
	mysql>grant all on 'zabbix.*' to 'zbxuser'@'127.0.0.1' identified by 'zbxpass';
	mysql>flush privileges;
	
安装服务器端:
	1. 配置zabbix yum源
		rpm -ivh https://mirrors.aliyun.com/zabbix/zabbix/3.0/rhel/7/x86_64/zabbix-release-3.0-1.el7.noarch.rpm
		vim /etc/yum.repos.d/zabbix.repo
			将3.0改成4.0即可
	2.添加gpgkey
		curl https://mirrors.aliyun.com/zabbix/RPM-GPG-KEY-ZABBIX-A14FE591 -o /etc/pki/rpm-gpg/RPM-GPG-KEY-ZABBIX-A14FE591
 
		curl https://mirrors.aliyun.com/zabbix/RPM-GPG-KEY-ZABBIX -o /etc/pki/rpm-gpg/RPM-GPG-KEY-ZABBIX
	3.添加之后即可使用,更新源
		yum makecache -y
		
		# 查询zabbix相关的包:
		yum list all | grep zabbix
		yum install zabbix-server-mysql zabbix-agent zabbix-get -y
	
	4. 程序环境:
		配置文件:/etc/zabbix_server.conf
		Unit File:zabbix-server.service
	5.在mariadb数据库创建表,根据 rpm -ql zabbix-server-mysql 中的sql脚本:/usr/share/doc/zabbix-server-mysql-4.0.33/create.sql.gz 导入数据库结构,才能运行zabbix
	~]# gzip -d /usr/share/doc/zabbix-server-mysql-4.0.33/create.sql.gz 
	~]# mysql -uzabbix -h127.0.0.1 -pzabbix zabbix </usr/share/doc/zabbix-server-mysql-4.0.33/create.sql # 指定将create.sql 重定向导入zabbix数据库
		
		注意:zabbix 2的sql脚本有三个,需要一次导出;
	
	6.zabbix server配置启动
		cd /etc/zabbix
		cp zabbix_server.conf{,.bak} # 备份配置文件
		
		# zabbix_server.conf中的配置段:
            grep "^#####" zabbix_server.conf
            ############ GENERAL PARAMETERS ################# 通用配置参数
            ############ ADVANCED PARAMETERS ################  高级配置参数
            ####### LOADABLE MODULES #######  可加载的模块 
            ####### TLS-RELATED PARAMETERS #######  使用ssl加密传输数据
		
		通用配置相关的参数:
			ListenPort=10051
			SourceIP=
			LogType=file
			LogFile=/var/log/zabbix/zabbix_server.log
			DebugLevel=3 # 日志级别
			DBHost=127.0.0.1  
			DBName=zabbix # 我们在mariadb数据库创建的数据库名称是zabbix
			DBUser=zabbix # 我们在mariadb数据库授权的用户是zabbix
			DBPassword=zabbix  #  我们在mariadb数据库授权的用户zabbix的密码是zabbix
			DBPort=
			DBSocket=/tmp/mysql.sock
		
		高级配置参数:
			StartPollers=5  # 启动多少个进程负责数据采集
		
		配置好这些参数,基本能满足正常需要了。。。
		在启动zabbix-server.service之前,我们还要检查trousers包的版本,zabbix要求其版本要在0.3.12以上。
		yum info trousers
		
	7. 启动zabbix-server
		systemctl start zabbix-server.service
		systemctl status zabbix-server.service

2.安装zabbix-web(GUI)

这里我们安装zabbix的GUI和zabbix server 在不同主机,在192.168.0.111;
(1)zabbix-web(GUI)依赖以下包,因为zabbix-web是php语言写的:
	yum install php php-mysql php-mbstring php-gd php-bcmath php-ldap php-xml -y
(2) 安装web GUI
	yum install -y zabbix-web-mysql zabbix-web
(3) 配置php时区参数,有以下(a),(b)两种方式:	
	rpm ql zabbix-web # 默认会在/etc/httpd/conf.d下添加一个zabbix.conf文件,在此文件中修改时区为Asia/Shanghai  如下图1
	(a)php.ini
	(b)/etc/httpd/conf.d/zabbix.conf
	vim /etc/httpd/conf.d/zabbix.conf
		php_value date.timezone Asia/Shanghai
	
(4)启动httpd web服务
	systemctl start httpd.service
(5)访问zabbix web页面
	http://192.168.0.111/zabbix  # /etc/httpd/conf.d/zabbix.conf定义zabbix是web页面的根目录 如下图2
	
	安装后生成的配置文件在:/etc/zabbix/web/zabbix.conf.php

图1:

图2:

给zabbix-web配置数据库连接:

在Next step遇到问题:

Please create database manually, and set the configuration parameters for connection to this database. Press “Next step” button when done.
问题来源:连接mariadb的时候总是连接不上
解决方法:创建zabbix数据库的时候应该这样创建:create database zabbix character set utf8 collate utf8_bin;
而我之前创建的时候是:create database zabbix character set utf8;

只好删除之前创建的zabbix库,重新创建zabbix库,然后导入/usr/share/doc/zabbix-server-mysql-4.0.33/create.sql

配置成功!!!!

登录zabbix web:

使用默认的Username和Password无法登录zabbix web,因为他创建的Admin用户是存在mysql数据库中的,所以我们可以修改admin用户的密码,如下:

~]# mysql -h192.168.0.112 -uzabbix -pzabbix

#  进入mysql数据库以后查询users表
MariaDB [(none)]> use zabbix;
MariaDB [zabbix]> select userid,alias,passwd from users;
+--------+-------+----------------------------------+
| userid | alias | passwd                           |
+--------+-------+----------------------------------+
|      1 | Admin | 5fce1b3e34b520afeffb37ce08c7cd66 |
|      2 | guest | d41d8cd98f00b204e9800998ecf8427e |
+--------+-------+----------------------------------+
2 rows in set (0.00 sec)

#  生成一个新密码MD5,admin是密码
[root@zhang ~]# echo -n admin | openssl md5
(stdin)= 21232f297a57a5a743894a0e4a801fc3


update users set  passwd='21232f297a57a5a743894a0e4a801fc3' where userid = '1';

登录后:

3.zabbix agent 安装配置

现在在被监控主机上都需要安装的包:
	zabbix-agent
	zabbix-sender
我们准备了包括监控端在内的四台虚拟机:
	192.168.0.11 #  zabbix-agent zabbix-sender
	192.168.0.111 # zabbix-web zabbix-web-mysql zabbix-get  zabbix-agent zabbix-sender
	192.168.0.112 # zabbix-server zabbix-server-mysql  zabbix-agent zabbix-sender
	192.168.0.113 # zabbix-agent zabbix-sender

在 192.168.0.112虚拟机将,zabbix源拷贝到 192.168.0.11和192.168.0.113主机上:
	scp -r /etc/yum.repos.d/zabbix.repo root@192.168.0.11:/etc/yum.repos.d/
	scp -r /etc/yum.repos.d/zabbix.repo root@192.168.0.113:/etc/yum.repos.d/
	
在192.168.0.11和192.168.0.113主机上,从阿里镜像源下载包校验key:
		curl https://mirrors.aliyun.com/zabbix/RPM-GPG-KEY-ZABBIX-A14FE591 -o /etc/pki/rpm-gpg/RPM-GPG-KEY-ZABBIX-A14FE591
		curl https://mirrors.aliyun.com/zabbix/RPM-GPG-KEY-ZABBIX -o /etc/pki/rpm-gpg/RPM-GPG-KEY-ZABBIX

在四台主机上分别装上 zabbix-agent zabbix-sender:
	yum install -y zabbix-agent zabbix-sender

程序环境:
	配置文件:/etc/zabbix/zabbix_agentd.conf
	Unit File:/usr/lib/systemd/system/zabbix-agent.service

cd /etc/zabbix
grep -i "^####" zabbix_agentd.conf

############ GENERAL PARAMETERS #################
##### Passive checks related  被动监控相关的配置
##### Active checks related   主动监控相关的配置
############ ADVANCED PARAMETERS #################
####### USER-DEFINED MONITORED PARAMETERS #######  用户自定义的监控参数,UserParameter
####### LOADABLE MODULES #######
####### TLS-RELATED PARAMETERS #######
####### For advanced users - TLS ciphersuite selection criteria #######

############ GENERAL PARAMETERS #################
PidFile=
LogType=
DebugLevel=3
SourceIP=
EnableRemoteCommands=0  # 是否允许执行远程命令
LogRemoteCommands=0
##### Passive checks related 
#Server=127.0.0.1  # 允许哪一台主机来采集数据,访问控制授权的功能
Server=IP1,IP2,.....
ListenPort=10050
ListenIP=0.0.0.0
StartAgents=3  # 预先生成的agent子进程的数量,

##### Active checks related 

# ServerActive=127.0.0.1  # 作为客户端,主动报告给服务器端的IP
ServerActive=IP1,IP2,...
Hostname=  # 当前主机的主机名
HostnameItem=
HostMetadata=
HostMetadataItem=
RefreshActiveChecks=120
BufferSend=5
BufferSize=100
MaxLinesPerSecond=20

(3)启动zabbix-agent服务
	systemctl start zabbix-agent  # 确保10050是监听的


配置监控项

快速配置一个监控项:
	host groups-->host-->applications-->item-->triggers(events)-->action(conditions,operations)
	operations:remote command,alert
	
	item-->simple graph
	items-->graph
	grapps-->screen
	screens-->slide show


在zabbix-server主机(192.168.0.112):
	zabbix-get -h
	
	zabbix-get -s 192.168.0.111 -k "system.cpu.switches" # 内置的item,如下图1.如果不满足需求可以自定义。
		21772839
	zabbix_get -s 192.168.1.11 -k "net.if.in[eth0,packets]"
	zabbix_get -s 192.168.1.11 -k "net.if.out[eth0,packets]"
	zabbix_get -s 192.168.1.11 -k "net.if.in[eth0,bytes]"
	zabbix_get -s 192.168.1.11 -k "net.if.out[eth0,bytes]"
	
	前提是在对方主机的zabbix_agentd.conf文件中的server已经配置了当前主机的IP,并且对方主机已启动了zabbix-agent服务。

图1:

创建触发器(trigger)

创建触发器(trigger)
	"监控项"仅负责收集数据,而通常收集数据的目的还包括在某指标对应的数据超出合理范围时给相关人员发送告警信息,“触发器”正式用于为监控项所收集的数据定义阈值;
	
	每一个触发器仅能关联至一个监控项,但可以为一个监控项同时使用多个触发器
		事实上,为一个监控项定义多个具有不同阈值的触发器,可以实现不同级别的报警功能
	
	一个触发器由一个表达式构成,它定义了监控项所擦去的数据的一个阈值
	
	一旦某次采集的数据超出了此触发器定义的阈值,触发器状态将会转换为“Problem”;而当采取的数据再次回归至合理范围内时,其状态将重新返回到“OK”
	
	OK--> PROBLEM
	Recovery:PROBLEM --> OK
	
item > 100,TRUE,PROBLEM
		   FALSE,OK

触发器表达式:
	触发器表达式高度灵活,可以以之创建出非常复杂的测试条件
	基本的触发器表达式格式如下所示
	{<server>:<key>.<function>(<parameter>)}<operator><constant>
		server:主机名称;
		key:主机上关联的相应监控项的key;
		function:评估采集到的数据是否在合理范围内时所使用的函数,其评估过程可以根据采集的数据、当前事件及其它因素进行;
		目前,触发器所支持的函数由avg、count、change、date、dayofweek、delta、diff、iregexp、last、max、min、nodata、now、sum等
		patameter:函数参数;大多数数值函数可以接受秒数为其参数,而如果在数值参数之前使用“#”作为前缀,则标识为最近几次的取值,如sum(300)表示300秒内所有取值之和,而sum(#10)则表示最近10次取值之和;
		此外,avg、count、last、min和max还支持使用第二个参数,用于完成事件限定;例如,max(1h,7d)将返回一周之前的最大值;

触发器之间存在依赖关系:主机依赖网络设备,服务依赖于主机;

媒介类型(Media Types):
	报警信息的传递方式:
	类型:
		Email:邮件,需要定义发件人邮箱地址和SMTP服务器;
		Script:自定义脚本,此脚本有发送信息至相关用户的功能;
		SMS:短信,仅对北美的运营商有效;jabber、Ez Texting

Action:
	conditions:触发此动作的条件,一般通过“事件”触发;
	operations:触发条件满足时要采取的动作;
		send message
		remote command
			功能:
				在agent所在的主机上运行用户指定的命令或脚本来尝试着恢复故障;例如:
					重启服务:
					任何由用户自定义的脚本;
			
			类型:
				IPMI命令
				custom script
				ssh
				telnet
				global script

触发器支持的运算符

触发器表达式例子

{zhang.ansible2.com:system.cpu.load[all,avg1].last(0)}>3
表示主机zhang.ansible2.com上所有CPU的过去1分钟内的平均负载的最后一次取值大于3时将触发状态变换
对last函数来说,last(0)相当于last(#1)

模板

模板:
	主机配置模板,可链接至主机,从而实现主机的快速监控配置;
模板可继承:
	在模板之上link其它模板即可;

从主机上删除模板:
	unlink:反链接
	ulink and clear:反链接并清除数据;
	
模板可导出,也可以从指定文件导入;

宏:MACRO
	预设的文本替换模式;
	
	级别:
		全局宏:Administation-->Genaral-->Macros
		模板宏:Configuration--> Tempates-->TEMPLATE-->Macros
		主机宏:Configuration-->Hosts-->HOST-->Macros
	
	类型:
		内建:{MACRO_NAME}
		自定义:{$MACRO_NAME}
		
		命名方式:大写字母、数字和下划线;
		
网络发现:
	zabbix server扫描指定网络范围内的主机;
	
		发现方式:
			ip地址范围:
				可用服务探测(ftp,ssh,http,...)
				zabbix_agentd的相应对某个key的请求;
				snmp_agent响应;
				
			一旦发现某主机,就会产生发现时间;
				事件有8类:
					Host,Service
					Up/Down,Discovered/Lost

			发现操作


网络发现:接口添加

网络发现中添加主机时会自动创建interface

	the services detected
		例如,如果基于SNMP检测成功,则会创建SNMP接口
		
	如果某服务同事响应给了agent和SNMP,则两种接口都会创建
	如果同一中发现机制(如agent)返回了非唯一数据,则第一个接口被识别为默认,其他的为额外接口
	即便是某主机开始时只有agent接口,后来又通过snmp发现了他,同样会为其添加额外的snmp接口;
	不同的主机如果返回了相同的数据,则第一个主机将被添加,余下的主机会被当作第一个主机的额外接口;

zabbix web 菜单

菜单:
	Monitoring
	Inventory
	Reports
	Configuration
	Administration
原文地址:https://www.cnblogs.com/zhangchaocoming/p/15465879.html