Linux Zabbix
监控的步骤:
数据采集:采集主机上的各种参数(比如CPU负载、网络接口流量、内存使用比等),从而进行以后的数据分析展示;
数据存储:将采集到的各种参数存储下来(一般是根据时间轴存储的时间序列数据);
数据展示:将采集到的数据,根据预先定义的方式展示出来(数据可视化);
当有些数据参数超出我们定义的阈值时,会自动发起报警,以便于管理员即时维护;
监控的方式:
可以通过在被监控节点上部署特定的agent(根据所使用的应用程序不同而不同,比如Zabbix就有自己的agent),从而实现数据的收集;
可以通过ssh来实现数据的查看;
通过特定的协议(SNMP)来收集数据;
传感器(一般位于被监控节点):搜集监控者所关注各种参数,然后将这些参数传输(可以是被监控者主动发送给监控主机(主动),也可以是被监控者等待监控主机来收集参数(被动))给监控主机;
SNMP:Simple Network Management Protocol
最早的网络管理协议,几乎是所有操作系统和网络设备都支持的协议;
角色:
NMS(管理端):网络管理服务器,收集各个被管理端的数据;
agent(被管理端):负责执行一些管理端想要在被管理端执行的操作,也负责收集管理端关注的数据;
工作模式:
NMS向agent采集数据;
agent向NMS报告数据;
NMS请求agent修改配置参数;
组件:
MIB:管理信息库
定义各种被采集的数据的规范格式;比如采集哪种数据,数据的格式是什么、管理端关注的参数是什么、管理端和被管理端都支持的参数数据以及数据存储格式等;
SMI:管理信息结构
关于MIB的一套公用的表示符号;
SNMP协议
NMS可发起的操作:
Get:从agent获取数据;
GetNext:从agent获取下一个或多个数据;
Set:请求修改agent的参数;
Trap:收集agent发来的数据;
SNMP使用的是UDP协议,NMS监听在161端口上,agent监听在162端口上;
Note:SNMP不具有数据存储的能力,其只能在想获取数据的时候临时发送获取数据的请求,进而实现数据的监控且也不具有报警功能;但这不是我们想要的,我们使用的监控系统应该是可以自动收集数据,然后将数据存储下来,在经过分析以后将数据通过图形趋势图显示出来;所以一般都是将SNMP作为一种获取数据的协议,然后在通过其他的外部软件来实现剩下的功能;比如cacti就可以结合SNMP来完成数据的存储和图形化展示,但是cacti的报警功能比较弱,所以可以结合nagios来实现报警功能;
介绍SNMP是因为它的普遍性,且zabbix就支持使用SNMP协议来监控各网络节点;
Zabbix:
可以监控的主机:Linux、Windows、FreeBSD
且还可以通过SNMP|SSH协议监控网络设备
Zabbix的监控机制:
数据采集
可以通过专用的agent、自定义脚本、功能插件(SNMP等)收集数据;
数据处理
通过事先定义的计算函数,为数据定义一个合理的阈值,时刻关注监控的数据项是否超过对其设定的阈值,如果超过此阈值就进行下面相关的操作;
报警与联动
通过定义报警策略和联动处理,当数据超过上面提到的阈值以后进行相关的处理,比如通知管理员或者自行执行某些脚本;
监控系统都监控什么?
设备:服务器、路由器、交换机、IO系统等;
软件:OS、网络、应用程序等;
故障:服务器宕机、服务不可用、主机不可达、磁盘无可用空间等;
主机性能指标:IO速率、CPU利用率等;
时间序列数据:比如一段时间之内的网络流量的趋势;
Zabbix使用的存储:mysql、pgsql、oracle等;
Zabbix的分布式部署:当监控的主机过多时,可以采用分布式部署方案,部署多个Zabbix-proxy(具有存储功能),使其收集各主机数据,然后proxy再周期性的将数据传输到Zabbix-server进行统一分析;
Zabbix的结构:
Zabbix通过部署在被监控主机上的agent|协议(SNMP、IPMI、ICMP等)来实现数据采集,通过zabbix-server|zabbix-proxy收集和存储(zabbix-database)各主机的数据,最后通过zabbix-web GUI设定监控项和数据可视化;
Note:zabbix还支持使用JMX来监控java程序;
部署方式:zabbix-server、zabbix-database以及zabbix-web gui可以分别部署在不同的主机上,也可以部署在同一台主机上;在规模比较大的场景中建议分别部署;
Zabbix-agent传输数据的模式:
主动将数据传输给zabbix-server;
等待zabbix-server周期性的来收集数据;
Zabbix的常用术语:
主机(Host):要监控的网络设备,可用IP地址或DNS名称指定;
主机组(Host Group):主机的逻辑容器,可以包含主机和模板,但同一个组内的主机和模板不能互相链接;主机组通常在给用户或用户组指派监控权限时使用;
监控项(Item):一个特定监控指标的相关数据,这些数据来自于被监控对象;Item是Zabbix进行数据收集的核心,没有Item就不会产生数据;相对于某个监控对象来说,每个item都由key进行标识,可以使用zabbix_get命令获取被监控主机上的key值所对应的数据,比如:~]# zabbix_get -s 192.168.80.128 -k "system.cpu.load[all,avg1]";比如CPU每分钟的平均负载可以是一个Item、没5分钟的平均负载也是一个Item;每个Item都有相应的类型(Type),比如Zabbix agent、SNMP、SSH agent、JMX agent等,Zabbix服务器会使用相应类型的协议或机制同被监控端通信;
触发器(Trigger):一个表达式,用于评估某监控对象的某特定Item内所接收到的数据是否在合理范围内,即阈值;若接收的数据大于阈值,触发器的状态将由OK转为Problem,当数据再次回到合理分为内时,其状态将由Problem转为OK;一个触发器只能关联至一个监控项,但可以为一个监控项同时使用多个触发器,这种为一个监控项定义多个阈值的方式,可以实现不同界别的报警功能;
事件(Event):即发生的一个值得关注的事情,例如触发器的状态转变,新的agent或重新上线的agent的自动注册等;
动作(Action):指对发生的特定事件事先定义的处理方法,动作包含操作(如发送通知)和条件(如何时执行操作);
报警升级(Escalation):发送警报或执行远程命令的自定义方案,如每隔5分钟发送一次警报,供发送3次;
媒介(Media):发送通知的手段或通道,如Email、短信、
微信等;
通知(Notification):通过选定的媒介向用户发送的有关某事件的信息;
远程命令(Remote Command):预定义的命令,可在被监控主机处于某特定条件下时自动执行;
模板(Template):用于快速定义被监控主机的预设条目集合,通常包含了item、trigger、graph(图表)、screen(将多个graph显整合到一个屏幕上)、application、以及low-level discovery rule;模板可以直接链接至单个主机;
应用(Application):一组Item的集合;
Web场景(Web Scene):用于检测Web站点可用性的一个或多个HTTP请求;
前端(Frontend):Zabbix的Web接口;
Zabbix启动的进程:
poller:用于到agent拉取所关注的数据的进程;
httppoller:用于监控Web页面的进程(比如监控web页面的打开速度、下载速度等);
discover:用于指定范围内的主机的进程,可以实现主机的自动化加入;
alerter:用于实现报警功能的进程;
housekeeper:用于根据定义期限,定期清理数据的进程(比如Zabbix存储在mysql数据库中的监控数据);
watchdog:用于监控其他进程是否正常运行的进程;
escalator:用于实现报警升级的进程;
timer:计时器;
nodewatcher:用于监控各个被监控节点的进程(查看其是否在线);
pinger:通过ping操作,确定目标主机是否在线;
db_config_syncer:数据库的配置同步进程;主要应用在分布式场景中,实现同proxy进行同步操作;
db_data_syncer:数据库的数据同步进程;主要应用在分布式场景中,实现同proxy进行同步操作;
Zabbix安装配置:此处我是用的是2.4,这个版本在官网中没有直接提供,可以在互联网中自行下载;
1.在mysql中创建供Zabbix使用的数据库及用户:
MariaDB [(none)]> create database zabbix character set utf8;
MariaDB [(none)]> grant all on zabbix.* to 'zbxuser'@'192.168.80.%' identified by 'zbxpass';
MariaDB [(none)]> grant all on zabbix.* to 'zbxuser'@'node1.guowei.com' identified by 'zbxpass';
MariaDB [(none)]> flush privileges;
2.安装zabbix:
根据官网的信息下载安装即可:https://www.zabbix.com/download
需要 安装的软件包:zabbix-server-mysql.x86_64 zabbix-server.x86_64 zabbix-server.x86_64 zabbix-agent.x86_64 zabbix-get.x86_64 zabbix-sender.x86_64 zabbix-web-mysql.noarch zabbix-web.noarch
3.启动httpd服务器:
~]# service httpd start
Note:如果之前已经启动,则需要重新启动,目的是重新加载安装zabbix时生成的位于/etc/httpd/conf.d/目录中的zabbix.conf;
4.导入zabbix的初始数据到mysql中:
~]# cd /usr/share/doc/zabbix-server-mysql-2.4.8/create/
create]# mysql zabbix < schema.sql
create]# mysql zabbix < images.sql
create]# mysql zabbix < data.sql
5.编辑zabbix-server的配置文件:
配置文件中的Options大多数都是见名知意的,比较好理解,就不一一列出了;
LogFileSize:指定日志大小,当日志达到指定大小后自动完成日志滚动;
DBHost:指定zabbix-server所在的主机地址;
DBName:指定zabbix使用的数据库;
DBuser:指定mysql数据库中分配给zabbix使用的用户名;
DBPassword:指定mysql数据库中分配给zabbix使用的用户的密码;
DBSocket:指定mysql的socket文件所在位置;
StartPollers:指定预先启动的poller进程;
还有很多Start的选项,都是有关上面介绍的Zabbix启动的进程的;
SNMPTrapperFile:指定接收到的SNMP agent端发送的trapper的保存位置;
ListenIP:指定监听地址;
SenderFrequency:指定发送报警信息的频率;
ExternalScripts:指定调用的外部脚本的位置;
SSHKeyLocation:基于SSH进行数据收集时,指定其秘钥文件;
~]# vim /etc/zabbix/zabbix_server.conf
DBHost=192.168.80.130
DBName=zabbix
DBUser=zbxuser
DBPassword=zbxpass
6.启动zabbix-server:
service zabbix-server start
7.修改PHP的时区:
~]# vim /etc/php.ini
date.timezone = Asia/Shanghai
~]# service httpd restart
8.使用zabbix-web配置Zabbix:
在浏览器键入http://192.168.80.130/zabbix即可进入配置页面;
默认的用户名是admin 密码是zabbix
9.编辑zabbix-agent的配置文件:
文件格式与zabbix-server的配置文件一样;
Server:指定哪个|些zabbix-server可以获取自己的数据;
ServerActive:主动将自己的数据通知给哪个|些Zabbix-server;
Hostname:使用客户端自动发现时,agent主动联系server时使用的主机名,要求全局唯一;
~]# vim /etc/zabbix/zabbix_agentd.conf
Server=127.0.0.1,192.168.80.130
ServerActive=127.0.0.1,192.160.80.130
Hostname=node4.guowei.com
10.启动server-agentd:
service zabbix-agent start
11.配置管理不在同一台主机上的agent(上面的agent是监控server自己的):
agent主机只需要安装zabbix、zabbix-agent和zabbix-sender即可;
12.编辑agent的配置文件:
步骤同上,此处不再赘述!
Zabbix-Web配置:(使用的是Zabbix4.0,为什么使用4.0呢?因为我感觉4.0的界面好看、精致)
1.添加主机:
Host name:指定唯一表示主机,可以是IP地址也可以是主机名,如果是主机名的话,需要确保可以通过DNS解析到IP地址;
Visible name:类似于别名,也是用于表示主机;
Group:指定主机所属的主机组;
Agent interfaces:指定Agent的接口,用于连接Agent,可以使用IP地址,也可以使用支持DNS解析的主机名;
2.为主机添加模板:
3.主机添加Item:
Name:指定Item的名称;
Type:指定Item的类型;
Key:指定Item真正收集的数据是什么;
Host interface:指定要监控的主机;
Type of information:指定数据的类型,包括无符号整型、浮点型、字符、日志、文本;
Units:指定数据的单位;比如bps
Update interval:指定数据采样时间间隔;
Custom intervals:自定义具体的时间范围,进行数据采样;
History storage period:指定采样生成的监控数据存储的时间期限;
Trend storage period:指定监控数据呈现的趋势数据的存储时间期限;一般是以每小时为间隔,记录数据的最大值、最小值、平均值以及统计信息;
Show value:指定数据显示的形式,一般使用默认即可;
New application:指定属于哪个application;
Note:官网关于Key类型的解释:https://www.zabbix.com/documentation/4.0/manual/config/items/itemtypes/zabbix_agent
4.为上面添加的Item添加graph:
Name:指定graph的名称;
Width:指定图形的宽度;
Height:指定图形的高度;
Graph type:指定图形的展示形式,包括:线状图、堆叠图、饼图、割裂饼图;
Show legend:是否显示图例;
Show triggers:是否显示阈值;
Items:指定要显示的Item;
5.为Item添加Trigger:
Trigger的格式;
{<server>:<key>.<function>(<parameter>)}<operator><constant>
server:指定主机名;
key:主机上关联的相应监控项的key;
function:评估采集到的数据是否在合理范围内时所使用的函数,其评估过程可以根据采集的数据、当时的时间及其他因素进行;支持的函数有:avg(名均值)、count(计数)、change(变化的数据量)、date(日期)、dayofweek(星期几)、delta(增量)、diff(差量)、iregexp(正则)、last(最后一次取样)、max(最大值)、min(最小值)、nodata(没有数据)、now(此刻)、sum(求和)等;
parameter:函数参数;大多数数值函数可以接受秒数为其参数,而如果在数值参数之前使用”#”作为前缀,则表示为最近几次的取值,比如sum(250)表示的就是300秒内所有取值之和,而sum(#10)则表示最近10次取值之和;此外,avg、count、last、min和max还支持使用第二个参数,用于完成时间限定;例如,max(1h,7d)将返回一周之前的最大值;
Trigger的名称支持宏:
例子:{HOST.HOST},{HOST.NAME},{HOST.IP}等;
Note:官网中关于宏的详情信息:https://www.zabbix.com/documentation/4.0/manual/appendix/macros/supported_by_location
Name:指定Trigger的名称;
severity:指定报警级别;
Expression:指定阈值;
Item:指定绑定的Item;
Function:指定所使用的函数;
Result:指定阈值大小;
6.为Trigger添加Active:
创建Media Type:
SMTP email:指定发信人邮箱地址;
Administrator→Users→Create user→Media:
Send to:指定收件人;
Action有两类:
Send Message:发送通知;
Script:
alert script的路径在zabbix_server的配置文件中指定(在此目录中添加脚本以后需要重启zabbix server才可以识别到此脚本);
AlertScriptsPath=/usr/lib/zabbix/alertscripts
脚本中可以使用$1,$1,$3来引用action中定义的邮件的收件人($1),以及optration中指定的Default subject($2)、Default message($3);
Remote Command:执行命令;
当zabbix发现agent上某个服务关闭以后,不需要直接发送消息通知管理员,而是自己首先执行此处的命令(比如重启服务),试着解决问题,当此处无法解决问题时再通知管理员;
前提:
zabbix-agent需要在配置文件中设置,支持执行远程命令;
EnableRemoteCommands=1
LogRemoteCommands=1
执行命令的方式有通过zabbix server传输命令到远端agent执行和zabbix server将消息传递给agent,通过agent执行相应的命令;且命令长度不可超过255个字符;但可以使用宏;
Note:定义Action时可以设置多个条件,多个条件之间还可以使用Or、And、And/Or、Custom expression作为各个条件的联合,从而实现多个条件全满足时再运行或多个条件中只有某个条件满足时即可运行;
Note:定义action时,如果使用到了remote command,要在zabbix的agent上设置相应的sudo权限且需要注释掉visudo中的# Defaults requiretty (因为sudo命令要求在安全的tty上才可以执行),以及在operation中填写命令时也要在命令前附加上sudo;且远程命令不支持代理模式和active模式的agent;zabbix server也不会保证命令是否执行成功;
总结一下配置Zabbix的步骤: host groups --> host --> applications --> item--> graph --> trigger --> events --> acvtion(condition+operation) --> user groups --> users --> media type
Zabbix自动监控:
添加主机到zabbix-server中:
1.discovery:zabbix-server主动发现agent,可以实现将某个网段内的主机一次性的全部加入到zabbix-server中,但是可能会增加数据交互,给带宽带来压力;
2.auto_registration:agent自动到zabbix-server注册自己的信息,从而将agent加入到zabbix-server中;
3.low level discovery:用于区别不同的底层设备的,比如区分linux和windows;
Template:上面有介绍
将item、trigger、action、graph等结合到一个模板中,然后将这个
模板应用到多个具有类似功用的主机上,实现批量配置;
一系列配置的集合,此些配置可以通过“链接”的方式应用于指定的主机;
模板是可以继承的,也就是继承其他模板的一些属性,然后自己再在其基础上做一些新配置;
Action:当trigger由OK转变为problem时就会触发事件(event),从而执行action中定义的动作;
Macros(宏):
宏是一种抽象的概念,他根据一系列预先定义的规则替换一定的文本模式,而解释器或编译器遇到宏时会自动进行这一模式替换;简单的理解就是把宏看做变量,当调用宏时就相当于调用变量;且Zabbix还支持自定义宏,定义格式为{$MACRO},自定义的宏只能使用大写字母、数字以及下划线;
全局宏定义:Administration --> General --> Macros
主机或模板级别的宏:编辑主机或模板的相应属性即可;
Zabbix有很多内置的宏:{HOST.NAMR}、{HOST.IP}、{TRIGGER.NAME}等等
宏可以应用在Item_key、description、trigger名称、表达式、主机IP/DNS及端口、Map中的设备名以及discovery机制的SNMP协议的相关信息中;
宏的优先级:
在某级别找到对应的宏后不会再向后寻找;如果无法找到某主机定义的宏,则不会对其进行替换;
Host级别的宏;
Template级别的宏;
Global级别的宏;
Maintenance(维护时间):
用于定义设备的维护时间,可以在定义action时指定设备在维护期间所产生的problem不进行通知;
User Parameters:在agent端定义,一般定义在/etc/zabbix/zabbix_agentd.d/中;
即自定义Item,从而实现特有数据指标监控;应用User Parameter需要重启
格式:UserParameter=<key_name>,<command>
UserParameter=key_name[*],command
其中的“*”表示可以接受任意个参数,将参数直接传递给后面的命令,command使用$1、$2、.....引用前面的参数;
Note:当我们在command中使用awk等命令时,如果想要保持print中的”$”的意义就需要多加一个”$”;比如:awk ‘/^RX/ {print $$1}’
例子:UserParameter=Mysql.dml[*],/usr/bin/mysql -h$1 -u$2 -p$3 -e ‘SHOW GLOBAL STATUS’ | awk ‘/Com_$4\>/{print $$2}’
Note:此处awk要使用单引号且-h、-u、-p与其参数之间不可以有空格;
Zabbix的网络发现功能(Network Discovery)详解:
基于HTTP、TCMP、SSH、LDAP、TCP、Zabbix_agent来主动扫描网络中符合条件的主机,将其加入到监控中;
Note:一旦主机被发现,如果欲对其进行操作,将由action来决定;
LLD:Low Level Discovery,低级发现功能;
发现过程:
一般有两个过程,一个是Discovery过程,一个是Action过程;
Discovery负责发现指定网络中的主机,一旦发现主机则会触发service up、service down、host up、host down、service discovered、service lost、host discovered、 host lost这几种事件;
Action负责针对不同事件进行不同的处理操作;比如发送通知、添加或移除主机、启用或禁用主机、将主机添加到组中、将主机从组中移除、链接模板到主机、将模板从主机上移除以及执行远程脚本等操作;
Note:
1.网络发现中添加主机时会自动添加interface;
2.如果某服务同时响应给了SNMP和Agent,则两种接口都会创建;
3.如果同一种发现机制返回了非唯一数据,则第一个接口被识别为默认,其他的为额外接口;
4.即便是某主机开始时只有Agent接口,后来又通过snmp发现了它,同样会将其添加为额外的snmp接口;
5.不同的主机如果返回了相同的数据,则的第一个主机将被添加,余下的主机会被当做第一个主机的额外接口;
配置示例:
Agent端:
~]# vim /etc/zabbix/zabbix_agentd.conf
Server=192.168.80.128
Hostname=node2.guowei.com
EnableRemoteCommands=1
LogRemoteCommands=1
添加一个Discover:Configuration --> Discovery
添加一个Host Group
添加一个Templates
在Templates中添加相关的Applications、Items、Triggers、Graphs等:
添加一个Discovery类型的Action:
Zabbix的主动注册(auto_registration):
如果使用Zabbix的网络扫描功能,建议轮询时间设置的稍微大一点(或者保持默认),因为网络发现比较占用资源,对管理端压力比较大,所以要视情况而定;此处介绍的主动发现是Agent主动将自己注册到管理端,对管理端的压力比较小;
配置示例:
Agent端:
~]# vim /etc/zabbix/zabbix_agentd.conf
ServerActive=192.168.80.128 指定主动监控时的管理端地址;
Server=192.168.80.128 支持主动监控的同时还支持被动监控
Hostname=node2.guowei.com
EnableRemoteCommands=1
LogRemoteCommands=1
ListenIP=192.168.80.129 指定本机的监听地址;
HostMetadata=some string 用于标识主机,在定义action时作为发现条件;
HostMetadataItem=item key 类似HostMetadata,只不过此处是通过item key来获取一段字符串发送给管理端,一般默认为主机名(system.uanme);
Web端:
添加一个Auto registration类型的Action:
等待一会儿就会发现test group中已经有node2.guowei.com这个主机了;
Note:对于主动注册模式,一般建议同时使用主动监控模式,即定义Item时使用Zabbix action (Active)类型;
Zabbix的LLD功能:
因为不同设备的底层设置不同,有的时候我们使用固定的配置可能会出现问题,比如centos7的接口名称和一些服务器提供的接口名称就不一样,设置是centos6和centos7的默认接口名称就不一样;而LLD就可以解决这个问题,LLD可以根据特定主机的item返回特定主机的数据,从而实现差异配置;大体就是Agent向服务器发送自己的变量名,然后服务器根据这些变量再决定item中应该填入的参数(即变量的值);
例子:当我们定义Item时,里面有个键为net.if.in[if,<mode>],如果我们在此处直接指定if为ens33,则此item只能正确应用在接口名为ens33的设备上;所以当我们在定义这种参数时,就应该使用LLD;
示例:
这个写的还不错:https://www.cnblogs.com/skyflask/p/7538324.html
Zabbix的Web功能:
可以用于探测某个站点的响应速度、可用性等;
添加步骤:configuration-->Host-->选择要设置的主机--> Web scenarios-->create Web scenarios
官网手册:https://www.zabbix.com/documentation/4.0/zh/manual
注:根据马哥视频做的学习笔记,如有错误,欢迎指正;侵删