19.7 zabbix的主动模式和被动模式
-
主动或者被动是相对客户端来讲的
-
被动模式,服务端会主动连接客户端获取监控项目数据,客户端被动地接受连接,并把监控信息传递给服务端,服务端请求以后,客户端接受到请求以后,才把相应的数据汇报给服务中心
-
主动模式,客户端会主动把监控数据汇报给服务端,服务端只负责接收即可。
- 定义完策略之后,到达定义的时间以后,就会主动汇报数据给服务中心,比如系统的负载,网络的网卡流量等
-
当客户端数量非常多时,建议使用主动模式,这样可以降低服务端的压力。
- 服务端有公网ip,客户端只有内网ip,但却能连外网,这种场景适合主动模式
19.8 添加监控主机
- 客户端配置并启动了zabbix-agent服务,
- 操作环境
- 下面就到监控中心(即web浏览器下去配置具体的机器和监控的项目)
- 在web页面配置添加监控主机,选择 配置 ,在选择 主机群组 ,去添加主机群
- 配置下的一些集合
- 主机群组,就是给机器建立一些组,然后在组里面建立一些机器;
- 模板,就是一些监控项目的集合,预设的
- 主机,里面现在有 zabbix server,也就是我们的监控中心,但监控中心没有起zabbix agent,没有启动agent,就没有办法去采集数据的,所以是停用的状态(若想启动 ,就需要启动 zabbix agent 服务)
- 添加一个主机(因为在客户端已经安装启动了zabbix agent)
- 再添加主机之前,首先 添加一个 主机群组
- 写上 组的名字 ——>点击 添加即可;
- 有其他需求的时候,可以增加父级群组,从其他主机的群组中选择
- 然后再点 主机 ——> 点击 创建主机(主机名称和可见名称都写hf-02)
- 根据顺序,填写
-
- 主机名,在客户机上zabbix配置文件里面已经配置好的
-
- 可见名称,重复写上主机名,或者一个便于识别的名字
-
- 添加所属群组,选中群组,点击向左的箭头添加,或者3.1手动写一个新群组名称
-
- 添加客户端IP地址,DNS是用来 解析IP地址使用的,因为我们做的是实验,所以就免去这一项,4.1连接方式,IP还是DNS,端口填写对应的agent客户端端口(端口默认是10050)
-
- 添加,完成监控主机添加
-
- 定义主动和被动模式,在 监控项 里定义
- 在定义完主机后看到 应用集、监控项、触发器、自动发现规则、web场景
- 应用集:应用集就是监控项的集合,应用集的目的是为了更方便的去管理监控项
- 监控项:监控的项目
- 触发器:就是针对某一个项目,设置的一个告警规则
- 图形:相关数据的图表化
- 自动发现规则:自动抓取机器的两个信息,并生产图片和触发器一个是文件系统,另一个网卡
- web场景:用于监控web站点
19.9添加自定义模板
- 可以自定义一个常用模板,方便给新增主机添加监控项目
- 自定义aming模板
- 把其他自带模板里面的某些监控项目(比如cpu、内存等)复制到aming模板里
- 定义触发器
- 添加图形
- 自动发现,找到Template OS Linux,点击右侧的自动发现,参考Mounted filesystem discovery和Network interface discovery定义规则
- 可以直接导出、导入模板,然后再删除不需要的对象
- 在 配置 中的 模板,选择创建模板
- 模板的名字自定义,这里叫做myserver,模板归属在模板的组里,或者链接到其他的模板
- 刚添加的myserver模板,它下面 没有 应用集、监控项、触发器、自动发现规则、web场景,所有都为空的
-
现在给myserver增加一些监控项目,在自带的模板里面找一些,比如在Template OS Linux 模板里面找一些监控项
- 在Template OS Linux的监控项里选择一些,然后选择复制
- 然后复制到到 myserver 模板里面去
- 这时再来查看 myserver模板里面就有了刚复制的几个监控项
- 并且触发器、图形、聚合图形、自动发现、web监测都可以使用同样的方法拷贝到myserver模板下面去
-
但自动发现,在磁盘的使用率,网卡自动发现特别方便,想把这两项拷贝到myserver模板里面去,但是选中后,会看到并没有复制的按钮
- 这时若想搬 磁盘的使用率,网卡 这两项,有两种方法
- 方法一:
- 直接把这个模板导出,会生成一个 .xml 的文件,然后去编辑这个文件,编辑的时候需要仔细的去查看,删除掉,最后只剩下自动发现这两项,然后再把编辑后的 .xml文件在导入(在导入之前需要更改文件的名称,否则会出错)——>工作量比较大,比较麻烦,导入的时候还容易出错
- PS:不推荐使用
- 方法二:
- 先把myserver模板里面的监控项删除
- 这时myserver模板是空的,选择myserver模板点击进去,然后选择 链接的模板 ,点选择
- 然后选择拷贝的模板,这里选择的是 Template OS Linux
- 然后在选择 添加,否则是无法保存的
- 然后点击 更新
- 在更新之后,会看到myserver模板里面有了应用集、监控项、图形、自动发现等
- 这时若是想删除里面的监控项等其他的,会发现无法删除,是因为监控项是在原来的模板里,只能在原来的模板里面删除
-
若就想删除链接过来的监控项,方法打开myserver模板,点进去,选择链接的模板,会看到取消链接和取消链接并管理
- 取消链接,仅仅只会把链接取消,但并不会把应用集、监控项等给清空掉
- 取消链接并管理,就会把里面的所有给清空
-
这时点取消链接,然后点更新,会看到lmyserver模板里面依旧存在这些,不同的是监控项、应用集等里面没有链接模板的名字了
- 这时再来删除就没有问题了,再删除的时候 只能先删除监控项,才能删除应用集
- 应用集包含了监控项
-
删除监控项,会看到 提示 监控项已删除 ,很顺利的就删除掉了
-
删除应用集,只要 右侧监控项 有数字的都得留着,没有数字的监控项都可以删除
- 此时这个模板配置完成,而且没有链接任何的模板
19.10 处理图形中的乱码
设置为中文后,zabbix图形的中文文字会显示小方框 这是因为在zabbix的字体库中没有中文字体,需要从windows上拷贝一个过来
vim /usr/share/zabbix/include/defines.inc.php //搜索ZBX_FONTPATH, 它定义的路径是“fonts”,它是一个相对路径,绝对路径/usr/share/zabbix/fonts,而字体文件为“ZBX_GRAPH_FONT_NAME”所定义的“graphfont”,它是一个文件,绝对路径为/usr/share/zabbix/fonts/graphfont, windows字体路径为“C:\Windows\Fonts\”,找到“simfang.ttf”(其实就是那个仿宋简体),先把它复制到桌面上,然后上传到linux的/usr/share/zabbix/fonts/,并且改名为graphfont.ttf
在服务端(即zabbix服务器)打开配置文件,/usr/share/zabbix/include/defines.inc.php
zabbix服务器
[root@zabbix ~]# vim /usr/share/zabbix/include/defines.inc.php
搜索 /ZBX_FONTPATH 会看到字体所在的相对路径
define('ZBX_FONTPATH', realpath('fonts')); // where to search for font (GD > 2.0.18)
define('ZBX_GRAPH_FONT_NAME', 'graphfont'); // font file name
里面的
realpath('fonts')); //这个为zabbix字库所在的路径,使用的路劲是相对路径,相对于/usr/share/zabbix/
'graphfont'); // font file name // 这个为字体的名字
-它定义的路径是“fonts”,它是一个相对路径,绝对路径为/usr/share/zabbix/fonts,而字体文件为“ZBX_GRAPH_FONT_NAME”所定义的“graphfont”,它是一个文件,绝对路径为/usr/share/zabbix/fonts/graphfont 7. 这个目录下的/usr/share/zabbix/fonts/graphfont.ttf文件软链接到了/etc/alternatives/zabbix-web-font文件,而/etc/alternatives/zabbix-web-font文件又软链接到了 /usr/share/fonts/dejavu/DejaVuSans.ttf
dejavu: dejavu为字体的目录
DejaVuSans.ttf:是一个字体 ,但不支持中文
[root@zabbix ~]# ls /usr/share/zabbix/fonts/
graphfont.ttf
[root@zabbix ~]# ls -l !$
ls -l /usr/share/zabbix/fonts/
总用量 0
lrwxrwxrwx 1 root root 33 2月 3 01:51 graphfont.ttf -> /etc/alternatives/zabbix-web-font
[root@zabbix ~]# ls -l /etc/alternatives/zabbix-web-font
lrwxrwxrwx 1 root root 38 2月 3 01:51 /etc/alternatives/zabbix-web-font -> /usr/share/fonts/dejavu/DejaVuSans.ttf
[root@zabbix ~]#
现在要做的就是将 graphfont 软链接到一个支持中文带中文的字体下面,即可
打开你windows物理机,找到C盘——>Windows——>Fonts下面找到simfang.ttf(其实就是那个仿宋简体),先把它复制到桌面上,然后上传到linux的/usr/share/zabbix/fonts/,并且改名为graphfont.ttf
[root@zabbix ~]# cd /usr/share/zabbix/fonts/
[root@zabbix fonts]# ls
graphfont.ttf SIMFANG.TTF
[root@zabbix fonts]#
上传到/usr/share/zabbix/fonts/目录下后,更改原有graphfont.ttf为.back,或者删除掉这个文件
[root@zabbix fonts]# mv graphfont.ttf graphfont.ttf.back
[root@zabbix fonts]#
然后把上传的字体,做一个创建graphfont.ttf软链接文件
ln -s SIMFANG.TTF graphfont.ttf
[root@zabbix fonts]# ln -s SIMFANG.TTF graphfont.ttf
[root@zabbix fonts]# ls -l
总用量 10332
lrwxrwxrwx 1 root root 11 2月 2 06:45 graphfont.ttf -> SIMFANG.TTF
lrwxrwxrwx 1 root root 33 2月 3 01:51 graphfont.ttf.back -> /etc/alternatives/zabbix-web-font
-rw-r--r-- 1 root root 10576012 6月 11 2009 SIMFANG.TTF
[root@zabbix fonts]#
现在的zabbix调用的是graphfont.ttf,而graphfont.ttf它指向了SIMFANG.TTF
这时在浏览器上刷新下,会看到显示正常,这样就能解决图形里面的小方块
还能看到CPU load一直为0,因为已经有数据产生了
在检测中,有一个最新数据,在这里主机可以选择 主机hf-02 ,点击应用
会看到监控的项目都有数据的,也可以选择 右侧的图形查看
19.11 自动发现
修改自动发现规则的相关数据获取间隔
然后修改数据更新间隔(秒),改成以秒计算1h
配置好以后到监控中,查看自动发现
在实际应用中时间间隔不要设置太短
扩展
zabbix监控交换机(思科)
要监控交换机的CPU、内存关键在于找到正确的OID,关于怎么寻找OID请参考以下博文。
http://tryrus.blog.51cto.com/10914693/1788833
看这篇博文之前请确定已对zabbix的基本操作已有了解,有不明白的地方可以看我之前写的博文。
http://tryrus.blog.51cto.com/10914693/1772271
http://tryrus.blog.51cto.com/10914693/1782062
一、配置环境
CentOS 7 Linux version 3.10.0-229.el7.x86_64
Zabbix-3.0.1
c2960s-universalk9-mz.122-55.SE5.bin
c2960s-universalk9-mz.122-55.SE3.bin
c2960-lanbasek9-mz.122-50.SE5.bin
c3750e-universalk9-mz.122-55.SE5.bin
二、CPU监控及配置trigger
2.1 要用到的OID
1.3.6.1.4.1.9.2.1.57.0 CPU utilization for one minute
1.3.6.1.4.1.9.2.1.58.0 CPU utilization for five minutes
1.3.6.1.4.1.9.2.1.56.0 CPU utilization for five seconds
2.2 创建Item
由于cisco各版本的CPU OID是一致的,所以可以新建一个模板Cisco CPU Utilization,将要监控的项在这个模板里面建立item,最后将模板Cisco CPU Utilization加入到各类型交换机的模板中即可,这样所有的交换机都会自动监控CPU的使用率了。
在Cisco CPU Utilization模板下建立CPU相关的三个item,CPU utilization for one minute,CPU utilization for five minutes,CPU utilization for five seconds,如下图所示。
Name,Key 这两项的值可以随便填写,但最好是像我这样,可以很直观的知道这个item所监控的内容
Type:SNMP v2版本
SNMP OID:相对应的OID
SNMP community:相对应的SNMP读团体字
Units:CPU使用率,填写百分号%
其它选项默认即可,最后的item Description填写在思科网站上查找OID时的Description。点击Add,完成item的创建。
创建cpu使用率的三个监控项后如下图所示
2.3 创建Graph
在模板Cisco CPU Utilization中,创建Graph,如下图所示。
填写Graph的Name,在Items选项中将刚刚创建好的三个items添加进来,点击最后的Add,完成Graph的创建。
2.4 验证Graph
将创建好的模板Cisco CPU Utilization加入到交换机的模板中,然后可以在Monitoring-->Graphs中选择一台交换机,查看CPU Utilization,如下图所示。
2.5 创建Trigger
还在是模板Cisco CPU Utilization中创建Trigger,因为所有交换机都要用到。
创建Trigger,如下图所示。
这里比较重要的是表达式,即zabbix应该在什么情况下使用触发器(Trigger)向用户报警,让用户知道CPU使用率异常。点击Expression后面的Add增加表达式,如下图所示。
Item:这里选CPU utilization for five seconds。 CPU的实时使用率超过报警的阀值,zabbix就通过邮件报警,所以要知道CPU实时的使用率,这个是最合适的。
Function:指的是函数,有下拉列表,从下拉列表中选择平均值大于N。
Last of(T):#3,最近三次的值
N:20 这里填写20,表示20%,百分号可以不用写。这里为方便测试才填写的20.
最后的表达式为{Cisco CPU Utilization:cpuUtilization5sec.avg(#3)}>20
创建完成的trigger,如下图所示
关于表达式的详细用法及函数功能,可以参考以下两个文档。
https://www.zabbix.com/documentation/3.0/manual/config/triggers/expression
https://www.zabbix.com/documentation/3.0/manual/appendix/triggers/functions
2.6 验证trigger
因为我上面设置交换机的CPU使用率只要超过20%就会触发trigger报警,所以在创建trigger完成后,过一分钟左右,我的邮件就收到了下图所示的problem邮件,说明配置已经生效。
然后将阀值20%调整为80%,过一分钟左右后,我的邮件就收到了下图所示的OK邮件,说明配置已重新生效。
三、内存监控及配置trigger
3.1要用到的OID
.1.3.6.1.4.1.9.9.48.1.1.1.6.1 ciscoMemoryPoolFree
.1.3.6.1.4.1.9.9.48.1.1.1.5.1 ciscoMemoryPoolUsed
3.2 创建Item
同CPU使用率一样,创建模板Cisco Memory Statistics后,在模板中创建Item ciscoMemoryPoolFree与ciscoMemoryPoolUsed,创建方法是一样,只是内存的item不需要填写单位。其它选项默认即可,最后的item Description填写在思科网站上查找OID时的Description。点击Add,完成item的创建。
创建内存的两个监控项后如下图所示
3.3 创建Graph
在模板Cisco Memory Statistics中,创建Graph,如下图所示。
填写Graph的Name,在Items选项中将刚刚创建好的两个items添加进来,点击最后的Add,完成Graph的创建。
3.4 验证Graph
将创建好的模板Cisco Memory Statistics加入到交换机的模板中,然后可以在Monitoring-->Graphs中选择一台交换机,查看Memory Statistics,如下图所示。由于memory很少发生变化,所以在graph中表现为一条横线。
3.5创建Trigger
还在是模板Cisco Memory Statistics中创建Trigger,因为所有交换机都要用到。
创建Trigger,点击Expression后面的Add增加表达式,如下图所示。
这里我设置阀值为20%,首先按上图所示的配置,添加两个表达式。
{Cisco Memory Statistics:ciscoMemoryPoolFree.last()}=0
{Cisco Memory Statistics:ciscoMemoryPoolUsed.last()}=0
添加完成后如下图所示。
修改上述表达式为
{Cisco Memory Statistics:ciscoMemoryPoolFree.last()}*0.8<{Cisco Memory Statistics:ciscoMemoryPoolUsed.last()}*0.2
如下图所示,表示空闲使用量少于20%时将触发报警。
即A<(A+B)0.2转化为A0.8<B*0.2
点击最底下的Add,完成trigger的创建,完成后如下图所示。
3.6验证trigger
Trigger配置完成后,zabbix就会对运行配置。所以在创建trigger完成后,过一分钟左右,我的邮件就收到了下图所示的OK邮件,说明配置已经生效。
至于配置阀值为多大时会产生PROBLEM的邮件,就留给各位看观去测试啦~~
http://tryrus.blog.51cto.com/10914693/1789847
zabbix远程执行命令
概述
监控,有的人只把他当做报警使用,出现问题之后打开跑回家打开电脑处理掉,大多数时候都是一些已知问题,为何不让zabbix帮你把这些事情处理掉呢?
Zabbix远程执行命令可以做些什么:
1)重启应用(apache/nginx/mysql)。
2)自定义执行脚本。
3)使用IPMI接口重启服务器。
4)自动释放磁盘空间(删除老文件,清除/tmp目录等等)。
5)CPU过载时将一个虚拟机迁移到另外一个物理服务器。
6)云环境下,一台服务器CPU\硬盘\内存\其他硬件资源不足的情况下,可以自动添加过去。
Zabbix远程执行命令注意事项:
1)远程执行命令是server端向agent端执行,不支持主动模式的agent;
2)不支持代理模式;
3)zabbix用户必须对命令具有执行权限,可以使用sudo赋予root权限(配置sudo无密码方式);
4)远程命令只是执行,执行成功与否并不检测并确认,可在” Monitoring–>Events”中查看action执行时,或在”Reports–>Action log”中查看远程命令是否执行成功(成功为” Executed”)。
配置zabbix远程执行命令
创建一个报警,记得使用邮件报警吗?实际上,我们把发送邮件的操作改成执行远程命令就行了。
Zabbix agent不支持远程命令,远程命令最大长度为255字符,同时支持多个远程命令,如需要执行多条命令,只需要另起一行写命令即可,但最好自定在agent端定义一个脚本,直接让zabbix执行脚本即可。还有,远程命令可以使用宏变量。
1)配置zabbix-agent端
首先我们需要在zabbix agent端开启对远程命令的支持,修改配置文件zabbix_agentd.conf中的参数,然后重启客户端:
EnableRemoteCommands = 1
另外,在执行命令时确保你的zabbix用户有执行权限,如果某些命令需要root权限,那么请使用sudo。编辑sudoer文件,zabbix用户便可以执行nginx -s reload命令了。
zabbix ALL=NOPASSWD: ALL
zabbix ALL=NOPASSWD: /etc/init.d/nginx stop,/etc/init.d/nginx start
2)配置zabbix-server端
ConfigurationàActionsà Operation,其中operation type改成Remote Command,然后写上要在zabbix-agent执行的命令即可。如下图:
Type:IPMI、custom script、ssh、telnet、global script。
如果你要执行自定义的脚本,如下操作:
直接执行脚本即可。
http://www.ywnds.com/?p=6610
zabbix分布式部署
最近在研究Zabbix监控,由于机房分布在多个城市,因此采用zabbix proxy做为监控方案,在每
个节点部署zabbix proxy,由zabbix proxy收集agentd数据,然后将采集到的数据主动推送给zabbix
server,zabbix server将数据存入数据库,并在WEB前端显示。
1. Zabbix 主要功能和优劣势说明
1.1 Zabbix 主要功能:
1)Application monitoring应用监控
数据库/SSH/Apache/Nginx等应用程序的监控。
2)Server monitoring 服务器监控
CPU,内存,SWAP,磁盘空间,网卡流量的监控等,可以通过浏览器实时查看Graphs。
3)Network monitoring 网络设备监控
支持Cisco, Juniper, 3Com等网络设备,网络设备通过SNMP(SNMP (v1,v2,v3) devices)协议进行监控。
4)添加自定义监控,对于Zabbix无法满足的监控,可以添加自定义监控。
1.2 Zabbix 主要优势:
1)安装配置简单,支持多种语言,包括中文。
2)系统自带多种监控模板,可以直接使用。
3)支持分布式部署和WEB集中管理(通过WEB页面设置或查看报警结果)。
4)自动发现主机和网络设备(discovery of file systems,network interfaces,hosts and
netwrok devices)。
5)WEB监控:可以监控WEB下载速度,返回码及响应时间。
6)提供实时和历史的监控分析数据。
7)EMAIL报警,按照故障级别|服务器类型|业务类型发送EMAIL邮件到相关负责人。
1.3 Zabbix主要劣势:
1)需要在被监控机器上面安装agent。
2)All configuration information都存储在数据库里面,数据库是整个监控平台的瓶颈。
2. Zabbix分布式部署需求分析
2.1 软件需求
官方推荐的软件配置
1)MySQL5.0.3 or laterRequired if MySQLis used as Zabbix back end database,InnoDB
engine isrequired.
2)PHP 5.3.0 or later
3)Apache 1.3.12 or later
2.2 硬件需求
官方推荐的最小硬件配置
3.1 分布式部署拓扑图
补充说明:
当proxy部署为主动模式(Active)时,Zabbix Server的负载最小。
1)Server:负责把数据写入到数据库,然后通过Apache|Nginx +php在WEB前端显示。
2)Proxy:帮助server采集被监控端的数据,并把采集到的数据主动传送给Server,proxy只负责数据收集。
3)Database:所有的配置信息都存储在数据库里面,Zabbix server数据库和proxy数据库必须独立。
4)Agent:agent的作用就是获取host数据,然后将收集到的数据发送给server(主动模式),或者是server主动来拿取数据(被动模式)。
5)Email:通过Qmail|postfix的SMTP负责报警邮件的发送(故障邮件和故障恢复邮件)。
3.2 Zabbix 分布式安装部署:
1)Mysql 数据库安装(参照:http://sfzhang88.blog.51cto.com/4995876/900846)
2)LNMP + Zabbix server 安装(参照:http://sfzhang88.blog.51cto.com/4995876/978686)
3)Zabbix proxy 安装(略)
4)Zabbix agent 安装
[root@www20 shell]# cat zabbix_agentd_install.sh
#!/bin/sh
#Create by sfzhang 2014.02.27
yum -y install net-snmp
yum -y install net-snmp-devel
BASE_DIR="/data/software"
TAR="zabbix-2.2.1.tar.gz"
tar -zxvf $BASE_DIR/$TAR -C$BASE_DIR
cd $BASE_DIR/zabbix-2.2.1
./configure--prefix=/usr/local/zabbix --sysconfdir=/etc/zabbix --enable-agent
make && make install
groupadd zabbix
useradd zabbix -g zabbix
cpmisc/init.d/fedora/core/zabbix_agentd /etc/init.d/zabbix_agentd
chmod 700/etc/init.d/zabbix_agentd
chown zabbix.zabbix/etc/init.d/zabbix_agentd
sed -i "/BASEDIR=/s#/.*#/usr/local/zabbix#" /etc/init.d/zabbix_agentd
sed -i"s#bin/zabbix_agentd#sbin/zabbix_agentd#" /etc/init.d/zabbix_agentd
sed -i"s#Server=127.0.0.1#Server=192.168.161.129#"/etc/zabbix/zabbix_agentd.conf
sed -i"s#ServerActive=127.0.0.1#\#ServerActive=127.0.0.1#"/etc/zabbix/zabbix_agentd.conf
sed -i "/Hostname=/s#=.*#"=$HOSTNAME#""/etc/zabbix/zabbix_agentd.conf
sed -i"s#\#/tmp/zabbix_agentd.pid#/data/logs/zabbix_agentd.pid#"/etc/zabbix/zabbix_agentd.conf
sed -i"s#/tmp/zabbix_agentd.log#/data/logs/zabbix_agentd.log#"/etc/zabbix/zabbix_agentd.conf
sed -i "s#\#Timeout=3#Timeout=30#" /etc/zabbix/zabbix_agentd.conf
cat>>/etc/services<<EOF
#Zabbix services
zabbix-agent 10050/tcp#Zabbix Agent
zabbix-agent 10050/udp#Zabbix Agent
zabbix-trapper 10051/tcp#Zabbix Trapper
zabbix-trapper 10051/udp#Zabbix Trapper
EOF
/etc/init.d/zabbix_agentdstart
4 Zabbix WEB**前端配置**
4.1**配置proxy代理**
4.2 添加Groups和hosts
通常Groups按照频道或者是WEB,MYSQL,memcache等服务类型分组的,提供相同服务的服务器分为一组,便于后期的维护和管理。
4.3 自定义监控模板,监控项和触发器。
5 zabbix 主要功能展示。
5.1 服务器监控
1)CPU负载监控
2)内存空间的监控
3) 磁盘空间的监控
4)交换分区的监控
5) 网卡流量的监控
除此之外,还有服务器重启的监控,添加删除用户时的监控,主机存活状态的监控(ICMP ping协议)等。
5.2 )应用程序的监控
Zabbix有很多系统自带的模板,在添加主机的时候Link相关的模板即可。
当停止主机的上面的SSH服务或者Apache服务的时候会产生报警。
5.3 )WEB Monitoring
Web Monitoring是用来监控web程序的,可以监控到web程序的下载速度、返回码及响应时间。当返回码不为200的时候也可以产生报警。
5.4 )Zabbix Screens
Screen将多种信息放在一起展示,便于集中展示某个主机的监控信息。
5.5 )Zabbix maps
Zabbix的maps用来图形化显示监控设备的拓扑图,并且以不同的标记显示故障事件,通过该图表很直观的显示设备的整体情况。
5.6 )Zabbix自定义监控
在实际应用当中,好多监控系统都满足不了实际的需求,需要根据实际的需求添加自定义监控。比如说:监控应用服务器tuxedo排队,当队列大于2000的时候报警。监控apache,mysql链接数,当大于2000的时候报警等等,此时Zabbix需要借助scripts来完成。
实例:监控http和mysql ESTABLISHED和TIME_WAIT连接数,当大于100的时候报警,并在WEB页面实时查看连接数。
1)在要监控的服务器上面编写Shell/python脚本,取出ESTABLISHED和TIME_WAIT连接数。
[root@monitor scripts]# catcheckservices.sh
#!/bin/sh
#Create by sfzhang 2014.02.10
ARGS=1
if [ $# -ne "$ARGS"];then
echo "Please input one arguement";
fi
case $1 in
EST_80)
result=`netstat -anp | grep :80 | grep EST | wc -l`
echo$result
;;
TIME_OUT_80)
result=`netstat-anp | grep :80 | grep TIME_WAIT | wc -l`
echo$result
;;
EST_3306)
result=`netstat -anp | grep :3306 | grep EST | wc -l`
echo $result
;;
TIME_OUT_3306)
result=`netstat -anp | grep:3306 | grep TIME_WAIT | wc -l`
echo $result
;;
EST_11211)
result=`netstat -anp | grep :11211 | grep EST | wc -l`
echo $result
;;
TIME_OUT_11211)
result=`netstat -anp | grep:11211 | grep TIME_WAIT | wc -l`
echo $result
;;
*)
echo"Usage:$0(EST_80|TIME_OUT_80|EST_3306|TIME_OUT_3306|EST_11211|TIME_OUT_11211)"
;;
esac
3)在Zabbix_agentd.conf里面添加UserParameter,格式如下,对于Zabbix来说,脚本其实就是一个插件。
UserParameter=checkservices.sh[*],/etc/zabbix/scripts/checkservices.sh $1
重启agentd服务器,然后在zabbix server用zabbix_get就可以取到值。
4)要监控的服务器有多台的时候,最简单的方法是先编写一个Templates(模板),在Link到要监控的服务器上面。
5)给新添加的模板Linux_service_templates添加Applications。
6)给新添加的模板Linux_service_templates添加Items(监控项)。下面是添加http ESTABLISHED监控条目。
7)给新添加的模板Linux_service_templates添加Triggers(触发器)。下面是添加 httpESTABLISHED触发器,当连接数大于2000的时候报警,故障级别为High。
8)要在WEB前端实时查看http的连接情况,必须配置Graph。在一个Graph里面可以添加多个Item数据。
9)要查看Graphs在要监控的主机上面Link刚才的模板Linux_service_templates。
10)在WEB前端查看实时连接情况。
Http连接情况:
Mysql连接情况:
5.7 )Zabbix discovery
1.Network discovery
Zabbix network discovery能自动发现网络中存活的主机,可用通过proxy代理或者Zabbix server 发现网络中存活的主机,并按照Actions里面定义的条件自动添加到Zabbix监控里面。
1)首先:添加Discovery rule,可以通过proxy代理或者zabbix server添加rule。
2)然后create Actions,指定Actions的Conditions,必须具备下列条件才能自动添加,Discover
rule :规则为 Local network,system.uname的值中包含Linux,Zabbix agentd服务必须正常运行。
3) 配置Actions的operations,将Actions里面符合条件的主机添加到shwww组里面并Link要监控的模板。
4)查看Discover自动发现的主机自动添加到Zabbix里面。
2.Zabbix Low-level discovery
Zabbis Low-level discovery 可以自动创建监控项,触发器和图像的方法。Zabbix可以自动发现主机上面的文件系统或者网络接口,不需要对每个文件系统和网络接口手动创建监控项,触发器和图像。Zabbix 还可以自动删除不需要的监控项,比如:上例当中的,当agentd宕机超过24小时的时候可以自动删除监控,只需在action里面配置即可。
实例:监控服务器上面所有TCP端口,就可以通过Low-level discovery轻松实现。
5.8) Zabbix 报警邮件机制
1)基于业务类型发送报警邮件
当数据库服务器出问题时发给DBA组,当系统出问题时发给System组。
2)基于故障级别或者时间发送邮件
5.9)Zabbix资产管理
Zabbix可以自动收集主机的hostname,OS,cpu信息,MAC等信息。需要在添加主机的时候开启Host inventory Automatic功能,并按照官方手册(https://www.zabbix.com/documentation/doku.php?id=2.0/manual/config/hosts/inventory)添加Item即可。
5.10)Zabbix 报表功能
附录:
1)官方在线文档:
https://www.zabbix.com/documentation/2.2/manual/introduction
zabbix监控tomcat(包含jvm监控)
_1._前言:
我们的监控系统是zabbix,最近刚做完jvm还有tomcat的监控,需要吐槽以下内容:
- zabbix官方提供的jvm和tomcat监控模版,存在item书写格式的坑,导致很多内容无法获取到监控。
- 网友写的zabbix监控java文章,99%就只有环境的搭建,没有zabbix item键值,所以环境监控上了,item键值不知道怎么写。
本文监控jvm内容如下:
内存使用状态: 堆内存(Heap memory)和非堆内存(No Heap memory),包括已用值、最大值、已提交;
堆内存内存池: 新生代(eden space),survivor space,老年代(old gen)的内存使用状态;
非堆内存内存池: 代码缓存(Code cache),元空间(meta space),压缩类空间(compressed class space);
类加载: 加载总数,已加载,已卸载。
Java线程: 总开启线程,活动线程,线程峰值。
本文监控tomcat内容如下:
Tomcat请求数:包括每秒请求数,每秒出错数;
Tomcat网络流量统计:包括进流量统计,出流量统计;
Tomcat线程: 包括最大线程数,当前线程数,当前繁忙线程数。
我没有在zabbix中添加垃圾回收(gc)的监控,而是在catalina配置里面添加gc日输入来给开发进行分析,设置方式如下。
CATALINA_OPTS=”-XX:ParallelGCThreads=4 -XX:+PrintGCDetails -Xloggc:日志存放路径”
监控效果如下:
_2._监控环境搭建
环境介绍:
[root@tomcat-01 ~]# /usr/local/tomcat/bin/version.sh
Server version: Apache Tomcat/8.0.23
Server built: May 19 2015 14:58:38 UTC
Server number: 8.0.23.0
OS Name: Linux
OS Version: 2.6.32-573.22.1.el6.x86_64
Architecture: amd64
JVM Version: 1.8.0_65-b17
JVM Vendor: Oracle Corporation
_2.1._Server端配置
1、 Zabbix server端安装java jdk环境并开启javaGateway支持java监控。
javaGateway 启用方式如下:
Zabbix通过rpm包安装:只需要安装zabbix-java-gateway包即可。
Zabbix通过编译安装:在编译时需要加上—enable-java以支持jmx监控,如果之前没加需要重新编译。
2、修改zabbix-java-gateway配置文件
[root@zabbix ~]# vim /etc/zabbix/zabbix_java_gateway.conf
LISTEN_IP="192.168.10.3"
LISTEN_PORT=10052
PID_FILE="/var/run/zabbix/zabbix_java.pid"
START_POLLERS=5
修改zabbix-server配置文件
[root@zabbix ~]# vim /etc/zabbix/zabbix_server.conf
JavaGateway=192.168.10.3
JavaGatewayPort=10052
StartJavaPollers=5
启动zabbix-java-gateway服务
[root@zabbix ~]# /etc/init.d/zabbix-java-gateway start
_2.2._Tomcat服务器配置
1、下载catalina-jmx-remote.jar包,到tomcat安装目录下的lib目录
wget -O /usr/local/tomcat/lib/catalina-jmx-remote.jar http://archive.apache.org/dist/tomcat/tomcat-8/v8.0.23/bin/extras/catalina-jmx-remote.jar
2、修改catalina.sh添加如下内容
CATALINA_OPTS="$CATALINA_OPTS -Dcom.sun.management.jmxremote
-Dcom.sun.management.jmxremote.port=8090
-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.authenticate=false"
3、重启tomcat
4、监控测试
(1)下载cmdline-jmxclient-0.10.3.jar文件,下载地址http://crawler.archive.org/cmdline-jmxclient/downloads.html
(2)本地执行如下命令查看tomcat的堆内存信息
[root@tomcat-01 ~]# java -jar /root/cmdline-jmxclient-0.10.3.jar - 127.0.0.1:8090 java.lang:type=Memory HeapMemoryUsage
11/04/2016 15:23:16 +0800 org.archive.jmx.Client HeapMemoryUsage:
committed: 2146959360
init: 2147483648
max: 2146959360
used: 407611808
_3._监控数据采集
_3.1._堆内存
Tomcat本地查看堆内存信息:
[root@tomcat-01 ~]# java -jar cmdline-jmxclient-0.10.3.jar controlRole:tomcat 127.0.0.1:8090 java.lang:type=Memory HeapMemoryUsage
11/04/2016 15:36:58 +0800 org.archive.jmx.Client HeapMemoryUsage:
committed: 2145910784
init: 2147483648
max: 2145910784
used: 741540536
zabbix监控堆内存键值:
堆内存最大值:
jmx["java.lang:type=Memory","HeapMemoryUsage.max"]
已用堆内存:
jmx["java.lang:type=Memory","HeapMemoryUsage.used"]
已提交堆内存: jmx["java.lang:type=Memory","HeapMemoryUsage.committed"]
一个完整的zabbix item填写方式如下,不同内容填写不同的键值即可:
_3.2._内存池eden space:
Tomcat本地查看eden space:
java -jar cmdline-jmxclient-0.10.3.jar - 127.0.0.1:8090
java.lang:type=MemoryPool,name=PS\ Eden\ Space Usage
zabbix监控eden区域键值:
最大空间: jmx["java.lang:type=MemoryPool,name=PS Eden Space",Usage.max]
已用空间: jmx["java.lang:type=MemoryPool,name=PS Eden Space",Usage.used]
提交空间: jmx["java.lang:type=MemoryPool,name=PS Eden Space",Usage.committed]
_3.3._内存池survivor space:
Tomcat本地查看Survivor space区域:
java -jar cmdline-jmxclient-0.10.3.jar - 127.0.0.1:8090
java.lang:type=MemoryPool,name=PS\ Survivor\ Space Usage
zabbix监控Survivor 键值:
jmx["java.lang:type=MemoryPool,name=PS Survivor Space",Usage.committed]
jmx["java.lang:type=MemoryPool,name=PS Survivor Space",Usage.max]
jmx["java.lang:type=MemoryPool,name=PS Survivor Space",Usage.used]
_3.4._内存池old gen:
Tomcat本地查看old gen区域使用:
java -jar cmdline-jmxclient-0.10.3.jar - 127.0.0.1:8090
java.lang:name=PS\ Old\ Gen,type=MemoryPool Usage
zabbix监控old gen键值:
jmx["java.lang:type=MemoryPool,name=PS Old Gen",Usage.committed]
jmx["java.lang:type=MemoryPool,name=PS Old Gen",Usage.max]
jmx["java.lang:type=MemoryPool,name=PS Old Gen",Usage.used]
_3.5._非堆内存:
Tomcat 本地查看非堆内存使用:
java -jar cmdline-jmxclient-0.10.3.jar controlRole:tomcat 127.0.0.1:8090 java.lang:type=Memory NonHeapMemoryUsag1
zabbix监控非堆内存使用
jmx["java.lang:type=Memory","NonHeapMemoryUsag.committed"]
jmx["java.lang:type=Memory","NonHeapMemoryUsag.used"]
_3.6._内存池meta space:
Tomcat 本地查看meta space区域使用:
java -jar cmdline-jmxclient-0.10.3.jar - 127.0.0.1:8090 java.lang:type=MemoryPool,name=Metaspace Usage
zabbix监控mete space区域键值
jmx["java.lang:type=MemoryPool,name=Metaspace",Usage.committed]
jmx["java.lang:type=MemoryPool,name=Metaspace",Usage.used]
_3.7._内存池code cache:
Tomcat 本地查看code cache区域使用:
java -jar cmdline-jmxclient-0.10.3.jar - 127.0.0.1:8090 java.lang:type=MemoryPool,name=Code\ Cache Usage
zabbix监控code cache区域使用:
jmx["java.lang:type=MemoryPool,name=Code Cache",Usage.committed]
jmx["java.lang:type=MemoryPool,name=Code Cache",Usage.max]
jmx["java.lang:type=MemoryPool,name=Code Cache",Usage.used]
_3.8._内存池compressed class space:
Tomcat 本地查看compressed class space区域使用:
java -jar cmdline-jmxclient-0.10.3.jar - 127.0.0.1:8090 java.lang:type=MemoryPool,name=Compressed\ Class\ Space Usage
zabbix监控 compressed class space区域使用键值:
jmx["java.lang:type=MemoryPool,name=Compressed Class Space",Usage.committed]
jmx["java.lang:type=MemoryPool,name=Compressed Class Space",Usage.max]
jmx["java.lang:type=MemoryPool,name=Compressed Class Space",Usage.used]
_3.9._类加载:
Tomcat本地查看类加载信息:
加载总数:java -jar cmdline-jmxclient-0.10.3.jar controlRole:tomcat 127.0.0.1:8090 java.lang:type=ClassLoading TotalLoadedClassCoun
已加载:java -jar cmdline-jmxclient-0.10.3.jar controlRole:tomcat 127.0.0.1:8090 java.lang:type=ClassLoading LoadedClassCount
已卸载:java -jar cmdline-jmxclient-0.10.3.jar controlRole:tomcat 127.0.0.1:8090 java.lang:type=ClassLoading UnloadedClassCount
Zabbix监控类加载键值:
加载总数: jmx["java.lang:type=ClassLoading","TotalLoadedClassCount"]
已加载:jmx["java.lang:type=ClassLoading","LoadedClassCount"]
已卸载:jmx["java.lang:type=ClassLoading","UnloadedClassCount"]
_3.10._java线程:
tomcat本地查看java线程:
总开启线程:java -jar cmdline-jmxclient-0.10.3.jar controlRole:tomcat 127.0.0.1:8090 java.lang:type=Threading TotalStartedThreadCount
活动线程:java -jar cmdline-jmxclient-0.10.3.jar controlRole:tomcat 127.0.0.1:8090 java.lang:type=Threading PeakThreadCount
线程峰值:java -jar cmdline-jmxclient-0.10.3.jar controlRole:tomcat 127.0.0.1:8090 java.lang:type=Threading PeakThreadCount
Zabbix监控java线程键值:
总开启线程:jmx["java.lang:type=Threading","TotalStartedThreadCount"]
活动线程:jmx["java.lang:type=Threading","ThreadCount"]
线程峰值:jmx["java.lang:type=Threading","PeakThreadCount"]
_3.11._tomcat线程:
本地查看tomcat线程信息:
最大线程:java -jar cmdline-jmxclient-0.10.3.jar - 127.0.0.1:8090 Catalina:name=\"http-nio-8080\",type=ThreadPool maxThreads
当前线程:java -jar cmdline-jmxclient-0.10.3.jar - 127.0.0.1:8090 Catalina:name=\"http-nio-8080\",type=ThreadPool currentThreadCount
繁忙线程:java -jar cmdline-jmxclient-0.10.3.jar - 127.0.0.1:8090 Catalina:name=\"http-nio-8080\",type=ThreadPool currentThreadsBusy
Zabbix监控tomcat线程键值:
最大线程:jmx["Catalina:type=ThreadPool,name=\"http-nio-8080\"",maxThreads]
当前线程:jmx["Catalina:type=ThreadPool,name=\"http-nio-8080\"",currentThreadCount]
繁忙线程jmx["Catalina:type=ThreadPool,name=\"http-nio-8080\"",currentThreadsBusy]
_3.12._网络流量:
Tomcat本地查看接收的字节:
接收的字节:java -jar cmdline-jmxclient-0.10.3.jar - 127.0.0.1:8090 Catalina:name=\"http-nio-8080\",type=GlobalRequestProcessor bytesReceived
发送的字节:java -jar cmdline-jmxclient-0.10.3.jar - 127.0.0.1:8090 Catalina:name=\"http-nio-8080\",type=GlobalRequestProcessor bytesSent
Zabbix监控tomcat接受字节键值:
接收的字节:jmx["Catalina:type=GlobalRequestProcessor,name=\"http-nio-8080\"",bytesReceived]
发送的字节:jmx["Catalina:type=GlobalRequestProcessor,name=\"http-nio-8080\"",bytesSent]
_3.13._tomcat请求,出错请求:
tomcat本地查看tomcat请求数:
tomcat请求数:java -jar cmdline-jmxclient-0.10.3.jar - 192.168.10.46:8090 Catalina:name=\"http-nio-8080\",type=GlobalRequestProcessor requestCount
tomcat出错请求: java -jar cmdline-jmxclient-0.10.3.jar - 192.168.10.46:8090 Catalina:name=\"http-nio-8080\",type=GlobalRequestProcessor errorCount
zabbix监控tomcat请求数:
tomcat请求数: jmx["Catalina:type=GlobalRequestProcessor,name=\"http-nio-8080\"",requestCount]
tomcat出错请求:jmx["Catalina:type=GlobalRequestProcessor,name=\"http-nio-8080\"",errorCount]
_4._关于网友问题的解答
最近有网友联系我说,看着我的博文搭建完了环境,获取不到数据,我帮助排查了一下,找到了问题所在,特此记录。
网友的报错如下:
# java -jar /root/cmdline-jmxclient-0.10.3.jar - 127.0.0.1:9080 java.lang:type=MemoryPool,name=PS\ Eden\ Space Usag
11/11/2016 10:03:37 +0800
org.archive.jmx.Client java.lang:name=PS Eden Space,type=MemoryPool is not a registered bean
_4.1._解决思路
-
如果你使用命令行监控获取不到数据,那么就先使用jconsole看看有没有数据,如果jconsole有数据,那么就往下看,反之检查你的环境。
- 如果jconsole有数据,但是命令行没有数据,那么就是Mbean的Object Name或者属性有问题,网友都是复制我的,但是自己本地环境和我的环境不一样所以导致获取不到数据,查询自己的本地Mbean方法有两种,分别是图形和命令行,网友的报错说事自己的Eden Space空间有问题,那么我就贴出来查看本地内存池的Object Name和属性的方法。
(1)通过jconsole查看:
(2)通过命令行查看:直接使用java -jar cmdline-jmxclient-0.10.3.jar – 127.0.0.1:8090命令可以获取所有的Mbean信息,输出太多这里就不贴输出结果了。我通过grep命令获取所有内存池的监控信息方式如下。
[root@tomcat-01 ~]# java -jar cmdline-jmxclient-0.10.3.jar - 127.0.0.1:8090 | grep MemoryPool
java.lang:name=Compressed Class Space,type=MemoryPool
java.lang:name=Metaspace,type=MemoryPool
java.lang:name=PS Old Gen,type=MemoryPool
java.lang:name=PS Eden Space,type=MemoryPool
java.lang:name=PS Survivor Space,type=MemoryPool
java.lang:name=Code Cache,type=MemoryPool
然后我要获取Eden Space的所有属性信息方式如下:(一些特殊字符需要转义)
[root@tomcat-01 ~]# java -jar cmdline-jmxclient-0.10.3.jar - 127.0.0.1:8090 java.lang:name=PS\ Eden\ Space,type=MemoryPool
Attributes:
Usage: Usage (type=javax.management.openmbean.CompositeData)
PeakUsage: PeakUsage (type=javax.management.openmbean.CompositeData)
MemoryManagerNames: MemoryManagerNames (type=[Ljava.lang.String;)
UsageThreshold: UsageThreshold (type=long)
UsageThresholdExceeded: UsageThresholdExceeded (type=boolean)
UsageThresholdCount: UsageThresholdCount (type=long)
UsageThresholdSupported: UsageThresholdSupported (type=boolean)
CollectionUsageThreshold: CollectionUsageThreshold (type=long)
CollectionUsageThresholdExceeded: CollectionUsageThresholdExceeded (type=boolean)
CollectionUsageThresholdCount: CollectionUsageThresholdCount (type=long)
CollectionUsage: CollectionUsage (type=javax.management.openmbean.CompositeData)
CollectionUsageThresholdSupported: CollectionUsageThresholdSupported (type=boolean)
Valid: Valid (type=boolean)
Name: Name (type=java.lang.String)
Type: Type (type=java.lang.String)
ObjectName: ObjectName (type=javax.management.ObjectName)
Operations:
resetPeakUsage: resetPeakUsage
Parameters 0, return type=void
那么我们在查看Eden Space空间的使用信息。就看到已经出来数据了
[root@tomcat-01 ~]# java -jar cmdline-jmxclient-0.10.3.jar - 127.0.0.1:8090 java.lang:name=PS\ Eden\ Space,type=MemoryPool Usage
12/03/2016 08:33:58 +0800 org.archive.jmx.Client Usage:
committed: 712507392
init: 537395200
max: 712507392
used: 396006304
转载于:https://blog.51cto.com/235571/2136880