一、zabbix 概念
1、 简介
zabbix 是一款开源的功能强大的分布式监控系统,一个基于WEB界面的提供分布式系统监视以及网络监视功能的企业级的开源解决方案。
zabbix server可以通过SNMP,zabbix agent,ping,端口监视等方法提供对远程服务器/网络状态的监视。
zabbix是由2部分构成,分别是zabbix server(监控端)与zabbix agent(被监控端)。
2、zabbix主要功能
- CPU负荷
- 内存使用
- 磁盘使用
- 网络状况
- 端口监视
- 日志监视
3、Zabbix 优缺点
优点
- 开源,无软件成本投入
- Server 对设备性能要求低
- 支持设备多,自带多种监控模板
- 支持分布式集中管理,有自动发现功能,可以实现自动化监控
- 当监控项比较多,服务器队列比较大时可以采用被动模式,被监控端主动从监控端去下载需要监控的item 然后取数据上传到监控端。 这种方式对监控端的负载比较小。
- Api接口的支持,方便与其他系统结合
缺点
- 需在被监控主机上安装 agent,所有数据都存在数据库里, 产生的数据据很大,瓶颈主要在数据库。
- 项目批量修改不方便
- 社区虽然成熟,但是中文资料相对较少,服务支持有限;
- 系统级别报警设置相对比较多,如果不筛选的话报警邮件会很多;并且自定义的项目报警需要自己设置,过程比较繁琐;
- 缺少数据汇总功能,如无法查看一组服务器平均值,需进行二次开发;
4、 zabbix组件
- zabbix server:负责接收agent发送的报告信息的核心组件,所有配置,统计数据及操作数据均由其组织进行
- zabbix database:用户存储所有配置信息,以及存储由zabbix server收集到的数据
- zabbix web:zabbix的interface接口,通常与Server运行在同一台主机上
- zabbix agent:部署在被监控主机上,负责收集本地数据发往server端或proxy端
- zabbix proxy:常用于分布监控环境中,代理Server收集部分被监控的监控数据并统一发往Server端(通常大于500台主机才需要使用)
5、Zabbix 监控架构
Zabbix的监控架构在实际监控架构中,zabbix根据网络环境、监控规模等架构: server-client 、server-proxy-client。
1、server-client架构也是zabbix的最简单的架构,监控机和被监控机之间不经过任何代理 ,直接由zabbix server和zabbix agentd之间进行数据交互。适用于网络比较简单,设备比较少的监控环境 。
2、server-proxy-client架构其中proxy是server、client之间沟通的一个桥梁,proxy本身没有前端页面,而且其本身并不存放数据,只是将agentd发来的数据暂时存放,而后再提交给server 。一般适用于跨机房、跨网络的中型网络架构的监控 master-node-client
- 普通监控:
- 分布式监控:
6、Zabbix 监控系统监控对象
- 数据库: MySQL,MariaDB,Oracle,SQL Server agent
- 应用软件:Nginx,Apache,PHP,Tomcat agent
------------------------------------------------------------------------------------------------------------------------------- - 集群: LVS,Keepalived,HAproxy,RHCS,F5 agent
- 虚拟化: VMware,KVM,XEN ,docker,k8s agent
- 操作系统:Linux,Unix,Windows性能参数 agent
------------------------------------------------------------------------------------------------------------------------------- - 硬件: 服务器,存储,网络设备 IPMI
- 网络: 网络环境(内网环境,外网环境) SNMP
-------------------------------------------------------------------------------------------------------------------------------
IPMI:智能平台管理接口(Intelligent Platform Management Interface)IPMI 能够横跨不同的操作系统、固件和硬件平台,可以智能的监视、控制和自动回报大量服务器的运作状况,以降低服务器系统成本。
SNMP:网络管理协议(SNMP) 是专门设计用于在 IP 网络管理网络节点(服务器、工作站、路由器、交换机等)的一种标准协议,它是一种应用层协议。
7、Zabbix监控方式
(1)主动模式
- 主动检测:相对于server而言;server向agent请求获取监控项相关的数据,agent接收请求、获取数据并响应给server;
(2)被动模式
-
被动检测:相对于server而言;、agent向server请求与自己相关监控项配置,主动地将server配置的监控项相关的数据发送给server;
-
被动监控能极大节约监控server 的资源。
8、Zabbix常用术语的含义
1、主机 (host)
- 一台你想监控的网络设备,用IP或域名表示 。
2、主机组 (host group)
- 主机的逻辑组;它包含主机和模板。一个主机组里的主机和模板之间并没有任何直接的关联。通常在给不同用户组的主机分配权限时候使用主机组。
3、监控项 (item)
- 你想要接收的主机的特定数据,一个度量数据。
4、触发器 (trigger)
- 一个被用于定义问题阈值和“评估”监控项接收到的数据的逻辑表达式 。
当接收到的数据高于阈值时,触发器从“OK”变成“Problem”状态。当接收到的数据低于阈值时,触发器保留/返回一个“OK”的状态。
5、动作 (action)
- 一个对事件做出反应的预定义的操作。
一个动作由操作(例如发出通知)和条件(当时操作正在发生)组成 。
6、媒介 (media)
- 发送告警通知的手段;告警通知的途径。
7、远程命令 (remote command)
- 一个预定义好的,满足一些条件的情况下,可以在被监控主机上自动执行的命令。
8、模板 (template)
- 一组可以被应用到一个或多个主机上的实体(监控项,触发器,图形,应用集,Web场景等)的集合。
模板的任务就是加快对主机监控任务的实施;也可以使监控任务的批量修改更简单。模版是直接关联到每台单独的主机上。
9、web 场景 (web scenario)
- 利用一个或多个HTTP请求来检查网站的可用性
10、前端 (frontend)
- Zabbix提供的web界面
11、Zabbix server
- Zabbix软件实现监控的核心程序,主要功能是与Zabbix server和Agents进行交互、触发器计算、发送告警通知;并将数据集中保存等
12、Zabbix agent
- Zabbix agent部署在监控的目标上,主动监测本地的资源和应用(硬件,内存,处理器统计等)。
- Zabbix agent收集本地的操作信息并将数据报告给Zabbix server用于进一步处理。一旦出现异常 (比如硬盘空间已满或者有崩溃的服务进程), Zabbix server会主动警告管理员指定机器上的异常。
二、zabbix界面介绍
1、监控项(items)
(1)介绍
我们点击上图中none1的监控项,即可创建我们的监控项,首先,我们创建三个应用集:
然后我们来定义监控项:
任何一个被监控项,如果想要能够被监控,一定要在zabbix-server端定义了能够连接至zabbix-agent端,并且能够获取命令。或者在agent端定义了能够让server端获取命令。一般都是内建的命令,都对应的有其名字,被我们称之为key
。
下面监控的是cpu的每秒中断次数
in 每秒CPU的中断次数,包括时间中断
关于key值,我们可以直接在网页上设置(服务器自动执行),也可以使用命令行命令(手动执行)来获取:
[root@zabbix-server zabbix]# zabbix_get -s 192.168.246.226 -p 10050 -k "system.cpu.intr"
在我们的agent端,也可以使用命令来查看intr
的速率变化:
们继续来看我们的监控项:
zabbix会收集历史数据(所有的数据都成为过去,O(∩_∩)O哈!),以及还会收集每小时的平均数据作为趋势数据,每小时才收集一次,所以trends(趋势)暂用的资源很小,说了这么多,我们来简单定义一个:
(2)定义一个不带参数的监控项
设置完以后,点击更新,即可加入,并会自动跳转至下图页面:
定义完成,我们回到所有主机,等待5秒,我们可以看到,我们none1节点后面的选项已经有变成绿色的了:如果不亮记得刷新
我们也可以回到我们的仪表盘,可以看到,我们的监控项有一个处于启用状态:
那么,我们的数据在哪里呢?可以点击最新数据
,把我们的node1节点添加至主机,应用一下,就可以看到下面的状态了:
可以看到,我们还有一个图形页面,点进去则可以看图形的分布:
事实上,我们关注的指标有很多种,我们一一添加进来即可。
刚刚我们定义的监控项是很简单的,指定一个key
即可,但是有些监控项是带有参数的,这样一来,我们的监控项就有更多的灵活性。接下来,我们来简单说明一个需要带参数的监控项:
(3)定义一个带参数的监控项
图中的[]
就是需要参数的意思,里面的值即为参数,带<>
为不可省略的。我们就以这个例子来说明:
if
表示是接口名;<mode>
表示是哪种模式,包括但不限于:packets(包)、bytes(字节)、errors(错误)、dropped(丢包)(上述内容通过ifconfig
查看)
我们来设置一下这个监控值:
同样的,我们也可以通过命令行来查看:
[root@zabbix-server zabbix]# zabbix_get -s 192.168.246.226 -p 10050 -k "net.if.in[ens33,packets]"
我们来看看网页的显示情况:检测中 —> 最新数据 —> Network Interface Stats(图形),等待一会,或者刷新一下
(4)快速定义类似指标
如果我们想要定义一个类似的指标,我们可以直接选择克隆,然后简单的修改一点点参数即可。
就以我们刚刚定义的net.if.in[ens33,packets]
为例,如果我们想要在定义一个out
的进行如下操作即可:
如果我们要以字节为单位也要定义的话,进行同样的操作:
如果有需要的话也可以把byte再克隆成out。就不一一演示了~
可以看一下,我们现在已经定义的指标:
我们来到 检测中 —> 最新数据,可以看到,我们定义的监控项都已经有值了:
(5) 删除监控项
如果有一个监控项,我们用不上了,就可以删除掉。但是如果你直接删除的话,默认数据是会留下的,所以我们要先清除数据,然后再删除,具体操作步骤如下:
2、触发器(trigger)
(1)简介
当我们的采集的值定义完了以后,就可以来定义触发器了。
我们触发器的定义是:界定某特定的item采集到的数据的非合理区间或非合理状态。通常为逻辑表达式。
一般,我们评定采样数值是否为合理区间的比较稳妥的方法是——根据最后N次的平均值来判定结果;这个最后N次通常有两种定义方式:
1. 最近N分钟所得结果的平均值
2. 最近N次所得结果的平均值
注:能用数值保存的就不要使用字符串
(2)触发器表达式
基本的触发器表达式格式如下所示
{<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(300)表示300秒内所有取值之和,而sum(#10)则表示最近10次取值之和;
(3)定义一个触发器
我们可以查看一下rate of packets(in)
的值,并以其为标准确定我们的非正常的值:
图中我们可以看出,我们的最大值为74,最小值为4,平均值为24。这样的话,我们可以定义5以上的都是非正常的值。
下面我们来定义一个触发器:
进入:配置 —> 主机 —> none1 —> 触发器 —> 创建触发器
我们的表达式可以直接点击右侧的添加,然后定义自己所需的内容,即可自动生成:
生成完毕后,我们就点击页面下方的添加,即成功定义了一个触发器,同时页面自动跳转:
然后我们去看一下我们刚刚定义了触发器的那个监控项:
我们可以看出,这个里面就有了一根线,就是我们刚刚定义的值,超过线的即为异常状态,看起来非常直观。
但是,现在即使超过了这根线,也仅仅会产生一个触发器事件而不会做其他任何事。因此,我们就需要去定义一个动作(action)。
3、定义动作(action)
(1)简介
我们需要去基于一个对应的事件为条件来指明该做什么事,一般就是执行远程命令或者发警报。
第一,我们要事先定义一个媒介,第二,还要定义这个媒介上用户接收消息的端点(当然,在用户上,我们也称之为用户的媒介)。
我们可以去看一下系统内建的媒介类型:
这只是大的媒介类型,里面还有更多的细分,我们以Email
为例:
同样的,同一个类型我们也可以定义多个,还是以Email
为例,我们可以定义一个腾讯的服务器,一个网易的服务器,一个阿里的服务器等等。
(2)定义一个媒介(media)
我们还是以Email
为例。来简单的定义一个媒介:
这样定义以后,我们去更新一下就可以了。
媒介定义好了,那么我们怎么才能够让用户接收到邮件呢?比如让我们的Admin用户接收邮件
进入 管理 —> 用户 —> Admin —> 报警媒介
我们来添加一条进来:
添加过后是这样的:
然后我们更新就可以了。
一个用户可以添加多个接收的媒介类型。
(3)定义一个动作(action)
我们之前说过了,动作是在某些特定条件下触发的,比如,某个触发器被触发了,就会触发我们的动作。
现在,我么基于redis来定义一个动作。
首先,我们在agent端使用yum安装一下redis
:
[root@zabbix-agent-none1 ~]# yum -y install epel-release
[root@zabbix-agent-none1 ~]# yum install -y redis
修改一下配置文件:
[root@zabbix-agent-none1 ~]# vim /etc/redis.conf
bind 0.0.0.0 #不做任何认证操作
修改完成以后,我们启动服务,并检查端口:
[root@zabbix-agent-none1 ~]# systemctl start redis
[root@zabbix-agent-none1 ~]# netstat -lntp | grep redis
tcp 0 0 0.0.0.0:6379 0.0.0.0:* LISTEN 1353/redis-server 0
接着,我们就可以去网站上来定义相关的操作了:
创建一个应用集:
配置-----主机—none1—应用集—创建应用集:
1.定义监控项
进入 配置 —> 主机 —> node1 —> 监控项(items)—> 创建监控项
填写完毕以后,我们点击下方的添加。
该监控项已成功添加。
我们可以去查看一下他的值:
检测中 —> 最新数据
2.定义触发器
定义好了监控项以后,我们亦可来定义一个触发器,当服务有问题的时候,我们才能及时知道:
进入 配置 —> 主机 —> none1 —> 触发器(trigger)—> 创建触发器
填写完毕以后,我们点击下方的添加。
该触发器已成功添加。
我们去查看一下:
监测中 —> 最新数据
我们来手动关闭redis服务来检测一下:
[root@zabbix-agent-none1 ~]# systemctl stop redis
进入 监测中 —> 问题
可以看到,现在已经显示的是问题了。并且有持续的时间,当我们的服务被打开,会转为已解决状态:
[root@zabbix-agent-none1 ~]# systemctl start redis
3.定义动作(action)
现在我们就可以去定义action了。
进入 配置 —> 动作 —> 创建动作(注意选择事件源为触发器)
我们可以进行操作添加:
我们可以看出,还需要在虚拟机上进行两项操作,一是修改sudo配置文件使zabbix用户能够临时拥有管理员权限;二是修改zabbix配置文件使其允许接收远程命令。我们进行如下操作:
[root@zabbix-agent-none1 ~]# visudo #相当于“vim /etc/sudoers”
## Allow root to run any commands anywhere
root ALL=(ALL) ALL
zabbix ALL=(ALL) NOPASSWD:ALL #添加的一行,表示不需要输入密码
[root@zabbix-agent-none1 ~]# vim /etc/zabbix/zabbix_agentd.conf
EnableRemoteCommands=1 #允许接收远程命令
LogRemoteCommands=1 #把接收的远程命令记入日志
[root@zabbix-agent-none1 ~]# systemctl restart zabbix-agent.service
我们添加了第一步需要做的事情,也就是重启服务,如果重启不成功怎么办呢?我们就需要来添加第二步:
添加完成以后,我们可以看一下:
操作添加完了,如果服务自动恢复了,我们可以发送消息来提示:
至此,我们的动作设置完毕,可以点击添加了,添加完成会自动跳转至如下页面:
现在我们可以手动停止服务来进行测试:
[root@zabbix-agent-none1 ~]# systemctl stop redis.service
然后我们来到问题页面来查看,发现确实有问题,并且已经解决: 等一会
也可以去agent端查看端口是否开启:
[root@zabbix-agent-none1 ~]# systemctl stop redis
[root@zabbix-agent-none1 ~]# netstat -lntp | grep redis
[root@zabbix-agent-none1 ~]# netstat -lntp | grep redis
tcp 0 0 0.0.0.0:6379 0.0.0.0:* LISTEN 1957/redis-server 0
查看邮箱是否成功
[root@zabbix-server ~]# yum -y install mailx
[root@zabbix-server ~]# mail
Heirloom Mail version 12.5 7/5/10. Type ? for help.
"/var/spool/mail/root": 1 message 1 unread
>U 1 zabbix@localhost.loc Thu Oct 10 00:51 21/865 "Resolved: redis service down"
邮箱也已经成功
可以看出端口正常开启,我们的动作触发已经完成。
补充:我们也可以使用脚本来发送警报,我们的脚本存放路径在配置文件中可以找到,定义为:
AlterScriptsPath=/usr/lib/zabbix/alertscripts
然后我们将这个动作关闭掉为后期的邮件报警做准备。
三、高级用法
1、图形
(1)简介
数据日积月累,如果我们想要更直观的了解到各项数据的情况,图形无疑是我们的最佳选择。zabbix提供了众多的可视化工具提供直观展示。
(2)自定义图形(Graphs)
自定义图形中可以集中展示多个时间序列的数据流。支持“线状图(normal)”、“堆叠面积图(stacked)”、“饼图(pie)” 和“分离型饼图(exploded)”四种不同形式的图形。
具体的设置过程如下:
进入 配置 —> 主机 —> none1 —> 图形,选择右上角创建图形:
我们来看一看四种状态:
包括我们的主机都可以自定义,不过一般来说,线型是看的最清晰的,我们通常会使用这个。
我们一共添加了三个图形,我们可以在 监测中 —> 图形 来查看
(3)聚合图形
再次点击更改,去添加其他图形进来,就能聚合在一张图表之上
(4)幻灯片
点击,会开始播放幻灯片,因为我们设置的切换时间为5s,所以每隔5s会进行一次切换
2、自动发现
(1)介绍
网络发现:zabbix server扫描指定网络范围内的主机;
网络发现是zabbix 最具特色的功能之一,它能够根据用户事先定义的规则自动添加监控的主机或服务等
优点:
- 加快Zabbix部署
- 简化管理
- 在快速变化的环境中使用Zabbix,而不需要过度管理
发现方式:
- ip地址范围;
- 可用服务(ftp, ssh, http, …)
- zabbix_agent的响应;
- snmp_agent的响应;
网络发现通常包含两个阶段:discovery发现 和actions动作
① discovery:
Zabbix定期扫描网络发现规则中定义的IP范围;
② actions:网络发现中的事件可以触发action,从而自动执行指定的操作,把discvery events当作前提条件;
添加/删除主机
启用/禁用host
向组中添加主机
移除组中的主机
从模板链接主机或取消链接
(2)配置网络发现Network discovery
(1)利用第二台用于可被扫描发现的主机----192.168.246.227
① 安装agent 端的包
[root@zabbix-agent-none2 ~]# rpm -ivh http://repo.zabbix.com/zabbix/3.4/rhel/7/x86_64/zabbix-release-3.4-2.el7.noarch.rpm
[root@zabbix-agent-none2 ~]# yum -y install zabbix-agent zabbix-sender
② 设置agent 配置,可以把之前设置好的none1的配置传过来
[root@zabbix-agent-none2 ~]# vim /etc/zabbix/zabbix_agentd.conf
Server=192.168.62.135
ServerActive=192.168.62.135
Hostname=zabbix-agent-none2 #只需修改hostname
[root@zabbix-agent-none2 ~]# visudo #修改sudo的配置,添加如下信息
zabbix ALL=(ALL) NOPASSWD: ALL
④ 开启服务
[root@zabbix-agent-none2 ~]# systemctl start zabbix-agent
(2)设置自动发现规则discovery
配置–自动发现–创建自动发现规则
ip范围不要给的太大
注释:在zabbix-server端
[root@zabbix-server ~]# zabbix_get -s 192.168.246.227 -p 10050 -k "system.uname"
Linux zabbix-agent-none2 3.10.0-693.el7.x86_64 #1 SMP Tue Aug 22 21:09:27 UTC 2017 x86_64
或者
设置为system.hostname(可选)
② 更新间隔:1h就好,不要扫描太过频繁,扫描整个网段,太废资源;这里为了实验,设为1m
(3)自动发现成功
(4)设置自动发现discovery 的动作action
a) 创建
b) 设置action动作
① 设置A条件,自动发现规则=test net
② 设置B条件,自动发现状态=up
③ 要做什么操作
添加主机到监控
自动链接Template OS Linux 到此host
c) 配置action 完成,默认是disabled 停用的,如果不是停用的,也需要再次选择启动,激活一下。
d) 启用动作,查看效果
确实已经生效,添加主机成功,模板链接成功
(5)如果自己需要添加的主机已经扫描添加完成,就可以关闭网络扫描了,因为太耗资源
3、Web监测
(1)介绍
Web监控:
- 监控指定的站点的资源下载速度,
- 页面响应时间
- 响应码
(2)创建设置web场景
配置–主机–none1–web场景–创建web场景
(1)创建
(2)配置web 监测
① 点击步骤,设置web page web页面
a) 设置名为home page,URL为http://192.168.246.226/index.html 的web页面
b) 设置名为fpm status,URL为http://192.168.246.226/php-fpm-status 的web页面
c) 设置2个web页面成功
(3)查看测试
4、模板
(1)创建模板
之前我们说过,每一个主机的监控项都很多,我们一个一个的添加效率不高,更何况,工作场景中不止一个主机。
但是我们可以把一个redis的监控项添加进一个模板里,这样更方便于我们后续的添加。
具体操作如下:
进入 配置 —> 模板 —> 选择右上角创建模板
填写完以后,我们点击下方的添加即可。
我们可以基于组过滤一下,就能看到我们刚刚定义的模板:
一样的,我们可以向里面添加应用集、监控项、触发器、图形等等,添加完成以后,后期我们再有主机需要添加就直接套用模板即可。
需要注意的一点是,我们现在添加的是模板,所以不会立即采用数据,只有链接到主机上以后,才会真正生效。
(2)模板的应用
我们的软件已经创建了许多模板,我们可以使用一个模板来看看效果。
进入 配置 —> 主机 —> node1 —> 模板
我们就可以选择要添加的模板了:
到这里我们就可以点击更新了。一旦我们成功链接至模板,我们的主机数据就会更新了:
注意:1、一个主机可以链接多个模板.
2、如果我们有多个主机,同时这些主机也在一个主机组里,这样的话,我们只需要在这个主机组里添加模板。
(3)移除模板链接
当我们一个主机的模板不想要用了,我们就可以移除模板链接,具体操作步骤如下:
进入 配置 —> 主机 —> none1 —> 模板
我们就可以把不需要的模板移除:
我们来删除掉试试看,移除并清理以后,我们点击更新。就会自动跳转至如下界面:
可以看出,我们的模板已经被移除了。
3、用户参数(自定义监控)
(1)介绍和用法
自定义用户参数,也就是自定义key
有时,你可能想要运行一个代理检查,而不是Zabbix的预定义
你可以编写一个命令来检索需要的数据,并将其包含在代理配置文件("UserParameter"配置参数)的用户参数中
用法格式 syntax
UserParameter=<key>,<command>
一个用户参数也包含一个键
在配置监控项时,key是必需的
注意:需要重新启动agent 服务
(2)用法展示
(1)修改agent 端的配置,设置用户参数
①自己需要查找的参数的命令
[root@zabbix-agent-none1 ~]# free | awk '/^Mem/{print $3}'
② 修改配置文件,把查找参数的命令设为用户参数
[root@zabbix-agent-none1 ~]# cd /etc/zabbix/zabbix_agentd.d/
[root@zabbix-agent-none1 zabbix_agentd.d]# vim memory_usage.conf
UserParameter=memory.used,free | awk '/^Mem/{print $3}'
③ 重启agent 服务
[root@zabbix-agent-none1 zabbix_agentd.d]# systemctl restart zabbix-agent.service
(2)在zabbix-server 端,查询
[root@zabbix-server fonts]# zabbix_get -s 192.168.246.226 -p 10050 -k "memory.used"
(3)在监控上,设置一个item监控项,使用这个用户参数
配置–>主机–>none1–>监控项–>创建监控项
(4)查询graph 图形
(3)用法升级
(1)修改agent 端的配置,设置用户参数
① 命令行查询参数的命令
② 修改配置文件,把查找参数的命令设为用户参数
[root@zabbix-agent-none1 zabbix_agentd.d]# ls
memory_usage.conf userparameter_mysql.conf
[root@zabbix-agent-none1 zabbix_agentd.d]# vim memory_usage.conf ----继续添加
UserParameter=memory.stats[*],cat /proc/meminfo | awk '/^$1/{print $$2}' --添加到文件中注意去掉反斜杠
[root@zabbix-agent-none1 zabbix_agentd.d]# systemctl restart zabbix-agent.service
注意:$$2:表示不是前边调位置参数的$1,而是awk 的参数$2
注意:$1是调用前边的[*],位置参数,第一个参数
(2)在zabbix-server 端,查询使用这个用户参数的key
传参:
[root@zabbix-server fonts]# zabbix_get -s 192.168.246.226 -p 10050 -k "memory.stats[MemTotal]"
999696
[root@zabbix-server fonts]# zabbix_get -s 192.168.246.226 -p 10050 -k "memory.stats[Cache]"
243832
[root@zabbix-server fonts]# zabbix_get -s 192.168.246.226 -p 10050 -k "memory.stats[Buffer]"
2108
(3)在监控上,设置一个item监控项,使用这个用户参数
① 添加Memory Total 的item监控项,使用memory.stats[MemTotal] 的用户参数
在进程中定义倍数,规定单位
② clone 克隆Memory Total 创建Memory Free 的监控项
memory.stats[MemFree] 用户参数
(4)上面2个监控项的graph 图形
① memory total
② memory free
四、解决字体乱码问题
在Windows - Fonts
中选择自己喜欢的字体下载下来,并上传到zabbix服务器中
注意:把新字体文件改名成原来字体文件的名字,不然需要修改如下配置文件(修改默认的字体指向 )
vim /usr/share/zabbix/include/defines.inc.php
搜索font,把所有的graphfont改为msyh(新字体文件名)(:%s/graphfont/msyh/g )
这里最好使用楷体,右键点击复制
复制到桌面。通过 rz 命令上传到zabbix-server监控端
如果有字体文件:
cp 字体文件 /usr/share/zabbix/fonts/graphfont.ttf
先将字体文件上传到zabbix服务器中
[root@zabbix-server ~]# cd /usr/share/zabbix/fonts/
[root@zabbix-server fonts]# ls
graphfont.ttf
[root@zabbix-server fonts]# mv graphfont.ttf graphfont.ttf.bak
[root@zabbix-server fonts]# ls
graphfont.ttf.bak
[root@zabbix-server fonts]# mv /root/simkai.ttf .
[root@zabbix-server fonts]# ls
graphfont.ttf.bak simhei.ttf
[root@zabbix-server fonts]# mv simkai.ttf graphfont.ttf
[root@zabbix-server fonts]# ls
graphfont.ttf graphfont.ttf.bak
使用xshell上传字体。如果使用其他客户端上传字体,会出现问题。
这样就成功了
五、分布式 zabbix proxy 监控
1、实验前准备
-
ntpdate 172.168.30.1 同步时间
-
关闭防火墙,selinux
-
设置主机名 hostnamectl set-hostname zbproxy.qfedu.com
-
vim /etc/hosts 每个机器都设置hosts,以解析主机名;DNS也行
2、环境配置(4台主机)
机器名称 | IP配置 | 服务角色 |
---|---|---|
zabbix-server | 192.168.62.131 | 监控 |
node1 | 192.168.62.168 | 被监控端 |
node2 | 192.168.62.169 | 被监控端 |
zbxproxy.qfedu.com | 192.168.62.133 | 代理proxy |
zabbix-server 直接监控一台主机 node1
zabbix-server 通过代理 node3 监控 node2
所有机器配置解析
监控端
[root@zabbix-server ~]# hostnamectl set-hostname zabbix-server
[root@zabbix-server ~]# cat /etc/hosts
192.168.62.131 zabbix-server
192.168.62.133 zbproxy.qfedu.com
192.168.62.168 node1
代理端
[root@zbxproxy ~]# hostnamectl set-hostname zbxproxy.qfedu.com
[root@zbxproxy ~]# cat /etc/hosts
192.168.62.131 zabbix-server
192.168.62.133 zbproxy.qfedu.com
192.168.62.168 node1
被监控端
[root@node1 ~]# hostnamectl set-hostname node1
[root@node1 ~]# cat /etc/hosts
192.168.62.131 zabbix-server
192.168.62.133 zbproxy.qfedu.com
192.168.62.168 node1
3、在proxy端上配置 mysql
1、创建 mariadb.repo
[root@zbxproxy ~]# vim /etc/yum.repos.d/mariadb.repo
写入以下内容:
[mariadb]
name = MariaDB
baseurl = https://mirrors.ustc.edu.cn/mariadb/yum/10.4/centos7-amd64
gpgkey=https://mirrors.ustc.edu.cn/mariadb/yum/RPM-GPG-KEY-MariaDB
gpgcheck=1
2、yum 安装最新版本 mariadb(也可以下载mariadb5.5版本)
[root@zbxproxy ~]# yum install -y MariaDB-server MariaDB-client
- 修改配置文件
[root@zbxproxy ~]# vim /etc/my.cnf.d/server.cnf
[mysqld]
skip_name_resolve = ON # 跳过主机名解析
innodb_file_per_table = ON # 开启独立表空间
innodb_buffer_pool_size = 256M # 缓存池大小
max_connections = 2000 # 最大连接数
log-bin = master-log # 开启二进制日志
3、重启我们的数据库服务
[root@zbxproxy ~]# systemctl restart mariadb
[root@zbxproxy ~]# mysql_secure_installation #初始化mariadb
4、创建数据库 和 授权用户
MariaDB [(none)]> create database zbxproxydb character set 'utf8';
MariaDB [(none)]> grant all on zbxproxydb.* to 'zbxproxyuser'@'192.168.30.%' identified by 'zbxproxypass'; #此处@后面可换为%
MriaDB [(none)]> flush privileges;
4、在proxy端上下载zabbix 相关的包
主要是代理proxy的包
[root@zbxproxy ~]# yum -y install zabbix-proxy-mysql zabbix-get zabbix-agent zabbix-sender
1、导入数据
zabbix-proxy-mysql 包里带有,导入数据的文件
[root@zbxproxy ~]# rpm -ql zabbix-proxy-mysql
[root@zbxproxy ~]# cp /usr/share/doc/zabbix-proxy-mysql-3.4.4/schema.sql.gz ./ #复制
[root@zbxproxy ~]# gzip -d schema.sql.gz #解包
[root@zbxproxy ~]# mysql -uroot -p zbxproxydb < schema.sql #导入数据
2、查看数据已经生成
5、配置 proxy 端
[root@zbxproxy ~]# vim /etc/zabbix/zabbix_proxy.conf
Server=192.168.62.131 # server 的IP
ServerPort=10051 # server 的端口
Hostname=zbxproxy.qfedu.com # 主机名
ListenPort=10051 # proxy自己的监听端口
EnableRemoteCommands=1 # 允许远程命令
LogRemoteCommands=1 # 记录远程命令的日志
# 数据的配置
DBHost=192.168.62.133
DBName=zbxproxydb
DBUser=zbxproxyuser
DBPassword=zbxproxypass
ConfigFrequency=30 # 多长时间,去服务端拖一次有自己监控的操作配置;为了实验更快的生效,这里设置30秒,默认3600s
DataSenderFrequency=1 # 每一秒向server 端发一次数据,发送频度
zbxproxyuser@'zbxproxy.qfedu.com'
2、开启服务
[root@node3 ~]# systemctl start zabbix-proxy
6、配置agent端允许proxy代理监控
如未安装zabbix-agent,先安装
[root@none1 ~]# yum install zabbix-agent zabbix-sender -y
[root@node1 ~]# vim /etc/zabbix/zabbix_agentd.conf
Server=192.168.62.131,192.168.62.133
ServerActive=192.168.62.131,192.168.62.133
Hostname=node1
[root@node1 ~]# systemctl restart zabbix-agent #启动服务
7、把代理加入监控 server 创建配置 agent 代理
1、创建 agent 代理
2、配置
8、创建node1 主机并采用代理监控
- 设置代理成功