一、主动模式和被动模式介绍

要监控日志,必须使用主动模式,那么,什么是主动模式?什么是被动模式呢?

1、主动模式和被动模式

主动模式

主动模式通讯过程:
● Agent打开TCP连接(主动检测变成Agent打开)
● Agent向Server请求items检测列表
● Server返回items列表
● Agent 处理响应
● 关闭TCP连接
● Agent开始收集数据

主动检测提交数据过程
● Agent建立TCP连接
● Agent提交items列表收集的数据
● Server处理数据,并返回响应状态
● 关闭TCP连接

 
 
被动模式
被动模式通信过程
  ● Server打开一个TCP连接
  ● Server发送请求agent.ping\n
  ● Agent接收到请求并且响应<HEADER><DATALEN>1
  ● Server处理接收到的数据1
  ● 关闭TCP连接
not supported items通信过程
  ● Server打开一个TCP连接
  ● Server发送请求vfs.fs.size[no]\n
  ● Agent接收请求并且返回响应数据 <HEADER><DATALEN>ZBX_NOTSUPPORTED\0Cannot obtain filesystem information: [2] No such file or directory
  ● Server接收并处理数据, 将item的状态改为“ not supported ”
  ● 关闭TCP连接 
 
从以上可以看出,主动模式下server端压力会减小,所以如果线上机器非常多的话,建议尽量使用主动模式,有一定优势。

二、日志监控原理及注意事项

0、Zabbix Server和Zabbix Agent会追踪日志文件的大小和最后修改时间(对于logrt),并且分别记录在字节计数器和最新的时间计数器中。

  • Agent还在内部使用inode编号(在UNIX/GNU/Linux上)、文件索引(在Microsoft Windows上)和前512个日志文件字节的MD5的求和,以便在日志文件被截断和旋转时改进决策。
  • 在UNIX/GNU/Linux系统上,假定存储日志文件的文件系统会报告索引节点号,它可用于跟踪文件。
  • 在Microsoft Windows上Zabbix代理确定日志文件所在的文件系统类型,并使用:
    • 在NTFS文件系统上64位文件索引。
    • 在ReFS文件系统(仅从Microsoft Windows Server 2012开始支持)128位文件ID。
    • 在文件索引改变的文件系统(例如FAT32,exFAT)上,当日志文件旋转导致具有相同最近修改时间的多个日志文件时,使用fall-back(回退)算法是在不确定的条件下采取的明智方法。
  • inode号,文件索引和MD5总和由Zabbix代理在内部收集。 它们不传输到Zabbix服务器,并且在Zabbix代理停止时丢失。
  • 不要使用“touch”实用程序修改日志文件的最后修改时间,不要在以后恢复原始名称的情况下复制日志文件(这将更改文件inode号)。 在这两种情况下,文件将被视为不同的,将从头开始进行分析,这可能会导致重复的告警。
  • 如果logrt[]监控项有几个匹配的日志文件,并且Zabbix代理程序跟随其中最新的日志文件,同时最新的日志文件被删除,则在“<目录>”中会出现一条警告消息“没有文件匹配”<regexp mask>“。 Zabbix代理将忽略修改时间小于最近日期的日志文件。

1、Agent会从上次读取日志的地方开始读取日志。
2、已经分析的字节数和最新时间计数器的数据会被记录在Zabbix数据库,并且发送给Agent,这样能够保证Agent从上次停止的地方开始读取日志。
3、当日志文件大小小于Agent字节计数器中的数字时,字节计数器会变为0,从头开始读取文件。

4、如果目录中存在多个匹配文件,且最后修改时间相同,则Agent会尝试以相同的修改时间对所有日志文件进行正确分析,并避免跳过数据或分析相同的数据两次(尽管有时不能保证)。Agent不承担任何特定的日志文件轮询方案。

 当提供具有相同修改时间的多个日志文件时,Agent将以字典顺序降序处理它们。 因此,对于某些轮询方案,日志文件将按原始顺序进行分析。对于其它轮询方案,原始日志文件顺序将不会被执行,这可能导致以更改顺序报告匹配的日志文件记录(如果日志文件的上次修改时间不同,则不会发生问题)。
5、所有符合配置的文件,都会被监控。
6、一个目录下的多个文件如果修改时间相同,会按照字母顺序来读取。
7、到每个Update interval的时间时,Agent会检查一次目录下的文件。
8、Zabbix Agent每秒发送日志量,有一个日志行数上限,防止网络和CPU负载过高,这个数字在zabbix_agentd.conf中的MaxLinePerSecond。

9、要找到所需的字符串,Zabbix将处理比MaxLinesPerSecond中设置的新行多4倍。 因此,如果log[]或logrt[]监控项的更新间隔为1秒,则默认情况下,Agent将分析小于80个日志文件记录,并在一次检查中向Zabbix服务器发送不超过20个匹配记录。通过在Agent配置文件中增加MaxLinesPerSecond或在监控项Key中设置maxlines参数,可以在一次检查中将限制最多增加4000个分析的日志文件记录和1000个匹配记录发送到Zabbix服务器。如果更新间隔设置为2秒,则一次检查的限制将被设置为更新间隔1秒的2倍。

10、此外,日志和日志计数值始终限于代理发送缓冲区大小的50%,即使其中没有非日志值。 因此,为了在一个连接(而不是几个连接)中发送最大值,代理BufferSize参数必须至少为maxlines x 2。

11、对大于256kB的日志文件记录,只有第一个256kB与正则表达式匹配,其余的记录将被忽略。 但是,如果Zabbix代理在处理长记录时停止,代理内部状态将丢失,并且可以在代理重新启动后再次分析不同的长记录。

12、“\”路径分隔符的特殊注意事项:如果file_format是“file\.log”,则不应该有“file”目录,因为不可能明确地定义是否转义了“.”,以及是否为第一个文件名符号。

13、仅在文件名中支持logrt的正则表达式,不支持目录正则表达式匹配。

14、在UNIX平台上,如果要找的日志文件的目录不存在,则logrt[]监控项将变为NOTSUPPORTED。

15、在Microsoft Windows上,如果目录不存在,则监控项将不会变为NOTSUPPORTED(例如,如果目录在监控项Key中拼写错误)。

16、没有用于logrt[]监控项的日志文件不会使其NOTSUPPORTED。读取logrt[]监控项的日志文件的错误将作为告警记录到Zabbix代理日志文件中,但不要使监控项NOTSUPPORTED。

17、Zabbix代理日志文件可以帮助你找出为什么log[]或logrt[]监控项成为NOTSUPPORTED。Zabbix可以监视其代理日志文件,除了在DebugLevel=4时。
18、在logtr中,正则表达式只对文件名有效,对文件目录无效。

三、日志监控项介绍

针对日志监控,zabbix在3.2以前有2个专门的监控项:log和logtr,在3.2以后新增了2个log.count和logtr.count。

log[/path/to/some/file,<regexp>,<encoding>,<maxlines>,<mode>,<output>]
logtr[/path/to/some/filename_format,<regexp>,<encoding>,<maxlines>,<mode>,<output>]

/path/to/some/file:要监控的日志文件
◆ regexp:要匹配内容的正则表达式,或者直接写你要检索的内容也可以,例如我想检索带ERROR关键词的记录
◆ encoding:编码相关,留空即可
◆ maxlines:一次性最多提交多少行,这个参数覆盖配置文件zabbxi_agentd.conf中的’MaxLinesPerSecond’,这里优先级比配置文件里面的高,我们也可以留空
◆ mode:默认是all,也可以是skip,skip会跳过老数据
◆ output:输出给zabbix server的数据。可以是\1、\2一直到\9,\1表示第一个正则表达式匹配出得内容,\2表示第二个正则表达式匹配得出的内容。

注意:

1、logtr的第一个参数是文件名的格式,可以是正则表达式,主要用于针对轮询或滚动日志使用,比如我们日常的程序日志:gameserver.20180102.log、gameserver.20180103.log、gameserver.20180104.log......

2、不管新日志、老日志,只要他们有变更,zabbix都会监控。
3、只要配置了<regexp>,Zabbix会根据<regexp>的正则表达式来匹配日志中的内容。

4、一定要保证Zabbix用户对日志文件有可读权限,否则这个Item的状态会变成“unsupported”。

四、范例

配置前,请确保Agent有如下两项配置
1、Hostname设定为Server创建主机是填写的Host name,必须一致
2、ServerActive设定为Server的IP

一、log[/path/to/some/file,<regexp>,<encoding>,<maxlines>,<mode>,<output>]    

配置步骤

1、Web端配置监控项

 2、Agent端配置Hostname

这里一定要和web端的主机名一致!!!!!!!!!

3、测试并查看结果

我们这里是测试通过rz上传文件后,会在messages里面出现rz字符串。

查看最新数据:

二、logtr[/path/to/some/filename_format,<regexp>,<encoding>,<maxlines>,<mode>,<output>]

配置步骤基本上和log一样。

1、配置监控项

2、查看结果

五、主动模式log分析

主动模式第一阶段:(请求items,并准备采集数据)
1.Agent向ServerActive机器发起请求
20674:20160728:155754.489 active checks #1 [getting list of active checks]
20674:20160728:155754.489 In refresh_active_checks() host:'192.168.1.100' port:10051
20674:20160728:155754.490 sending [{
"request":"active checks",
"host":"192.168.1.100",
"host_metadata":"Linux bgp-bjzw-zabbix-server02.xsjom.cn 2.6.32-431.20.3.el6.x86_64 #1 SMP Thu Jun 19 21:14:45 UTC 2014 x86_64"}]

2.ServerActive响应后,Agent获得从ServerActive返回的items列表
20674:20160728:155754.490 before read
20666:20160728:155754.493 collector [processing data]
20666:20160728:155754.493 In update_cpustats()
20666:20160728:155754.493 End of update_cpustats()
20666:20160728:155754.493 collector [idle 1 sec]
20674:20160728:155754.494 got [{"response":"success","data":[{"key":"log[/var/log/messages,charts,,,skip,]","delay":10,"lastlogsize":19499,"mtime":0}]}]

3.关闭TCP连接,准备收集数据
20674:20160728:155754.494 In parse_list_of_checks()
20674:20160728:155754.494 In disable_all_metrics()
20674:20160728:155754.495 In add_check() key:'log[/var/log/messages,charts,,,skip,]' refresh:10 lastlogsize:19499 mtime:0
20674:20160728:155754.495 End of add_check()
20674:20160728:155754.495 End of refresh_active_checks():SUCCEED

主动模式第二阶段:(agent提交items数据,ActiveServer处理并回应结果)
1.Agent获取itmes列表后,处理里面的items
20674:20160728:155754.495 active checks #1 [processing active checks]
20674:20160728:155754.495 In process_active_checks() server:'192.168.1.100' port:10051)
20674:20160728:155754.495 In process_logrt() is_logrt:0 filename:'/var/log/messages' lastlogsize:19499 mtime:0 error_count:0

20674:20160728:155754.496 In add_logfile() filename:'/var/log/messages' mtime:1469692670 size:19586
20674:20160728:155754.496 add_logfile() logfiles:0x282e540 logfiles_alloc:64
20674:20160728:155754.496 End of add_logfile()

20674:20160728:155754.496 setup_old2new: is_same_file(/var/log/messages, /var/log/messages) = 1
1.1.处理老的文件
20674:20160728:155754.496 process_logrt() old file list:
20674:20160728:155754.496 nr:0 filename:'/var/log/messages' mtime:1469692248 size:19499 processed_size:19499 seq:1 incomplete:0 dev:64768 ino_hi:0 ino_lo:652985 md5size:512 md5buf:b2f842e0e504b09c8cac18795a66bc93
1.2处理新的文件
20674:20160728:155754.496 process_logrt() new file list: (mtime:0 lastlogsize:19499 start_idx:0)
20674:20160728:155754.496 nr:0 filename:'/var/log/messages' mtime:1469692670 size:19586 processed_size:19499 seq:0 incomplete:0 dev:64768 ino_hi:0 ino_lo:652985 md5size:512 md5buf:b2f842e0e504b09c8cac18795a66bc93
1.3获取符合要求结果的数据值
20674:20160728:155754.496 In process_log() filename:'/var/log/messages' lastlogsize:19499 mtime: 0
20674:20160728:155754.497 In process_value() key:'192.168.1.100:log[/var/log/messages,charts,,,skip,]' value:'Jul 28 15:57:50 localhost rz[23429]: [root] charts.html/ZMODEM: 9976 Bytes, 102576 BPS'
20674:20160728:155754.497 In send_buffer() host:'192.168.1.100' port:10051 values:0/100
20674:20160728:155754.497 End of send_buffer():SUCCEED
20674:20160728:155754.497 buffer: new element 0
20674:20160728:155754.497 End of process_value():SUCCEED
20674:20160728:155754.497 End of process_log() filename:'/var/log/messages' lastlogsize:19586 mtime: 0 ret:SUCCEED
20674:20160728:155754.497 End of process_logrt():SUCCEED error_count:0
20674:20160728:155754.497 End of process_active_checks()
20674:20160728:155754.497 In get_min_nextcheck()
20674:20160728:155754.498 active checks #1 [idle 1 sec]
20666:20160728:155755.494 collector [processing data]
20666:20160728:155755.494 In update_cpustats()
20666:20160728:155755.494 End of update_cpustats()
20666:20160728:155755.495 collector [idle 1 sec]
1.4发送数据给ActiveServer
20674:20160728:155755.498 In send_buffer() host:'192.168.1.100' port:10051 values:1/100
20674:20160728:155755.499 JSON before sending [{
"request":"agent data",
"data":[
{
"host":"192.168.1.100",
"key":"log[\/var\/log\/messages,charts,,,skip,]",
"value":"Jul 28 15:57:50 localhost rz[23429]: [root] charts.html\/ZMODEM: 9976 Bytes, 102576 BPS",
"lastlogsize":19586,
"clock":1469692674,
"ns":497558898}],
"clock":1469692675,
"ns":498717648}]

2.ActiveServer回应收到数据,并返回状态
20674:20160728:155755.499 JSON back [{"response":"success","info":"processed: 1; failed: 0; total: 1; seconds spent: 0.000101"}]
20674:20160728:155755.499 In check_response() response:'{"response":"success","info":"processed: 1; failed: 0; total: 1; seconds spent: 0.000101"}'
20674:20160728:155755.500 info from server: 'processed: 1; failed: 0; total: 1; seconds spent: 0.000101'
20674:20160728:155755.500 End of check_response():SUCCEED
20674:20160728:155755.500 OK
20674:20160728:155755.500 End of send_buffer():SUCCEED
20674:20160728:155755.500 active checks #1 [idle 1 sec]

Zabbix实战-简易教程--日志类的更多相关文章

  1. Zabbix实战-简易教程--WEB类--Nginx

    一.开启Nginx status状态 1.在默认主机里面加上location添加ngx_status 如下操作: server { listen 127.0.0.1:8080; server_name ...

  2. Zabbix实战-简易教程--DB类--ClickHouse

    一.ClickHouse介绍 Clickhouse是一个用于联机分析处理(OLAP)的列式数据库管理系统(columnar DBMS). 传统数据库在数据大小比较小,索引大小适合内存,数据缓存命中率足 ...

  3. Zabbix实战-简易教程--业务类

    一.需求 项目要求对线上服务器进行监控,包括服务器本身状态.进程相关数据.业务相关数据. 服务器本身状态可以通过基础模板即可获取数据(CPU.内存.网络.磁盘): 进程相关数据,前面也有相关文章专门监 ...

  4. Zabbix实战-简易教程--订阅类

    一.需求提出 最近数据中心有一个新的需求,有一批后台任务需要在每天固定时间点运行(凌晨8:00),现在希望能够把这个任务执行的结果定时上报给他. 说明:执行的任务为一个sql查询,查询出来的是每个任务 ...

  5. Zabbix实战-简易教程系列

    一.基础篇(安装和接入) Zabbix实战-简易教程--总流程  Zabbix实战-简易教程--整体架构图 Zabbix实战-简易教程--DB安装和表分区 Zabbix实战-简易教程--Server端 ...

  6. Zabbix实战-简易教程(6)--Server端高可用

    3.4 server前端高可用    至此,单台Zabbix server环境已经搭建完成,为了达到高可用效果,我们需要通过2台服务器之间通过HA软件进行探测,一旦检测到主的server挂掉后,从的s ...

  7. Zabbix实战-简易教程--技巧一(操作类技巧)

    一.常用操作技巧 1.克隆 监控项.模板.触发器都可以进行克隆.其中,模板克隆又分为克隆和完全克隆.完全克隆会将LLD也一起复制一份,就是和之前的模板一模一样,而模板的克隆只是克隆监控项,不复制低层次 ...

  8. Zabbix实战-简易教程(3)--DB安装和表分区

    一.DB安装环境 主机角色 主机IP VIP 操作系统版本 软件版本 DB Master A 192.168.1.97 (主从) CentOS 6.5 64bit mysql-5.6.21 DB Sl ...

  9. Zabbix实战-简易教程(9)--触发器函数(triggers)

    Zabbix触发器函数学习 本文主要讲述zabbix触发器函数. 1.abschange 参数:缺省 值类型:float, int, str, text, log 返回值解析: Returns abs ...

随机推荐

  1. 批处理文件(Batch Files )

    后缀是bat的文件就是批处理文件,是一种文本文件.简单的说,它的作用就是自动的连续执行多条命令,批处理文件的内容就是一条一条的命令. 新建一个批处理abc.bat,里面内容如下:@echo offec ...

  2. 有效集 matlab代码

    %有效集 function activeset H=[2 -1; -1 4]; c=[-1 -10]'; Ae=[ ]; be=[ ]; Ai=[-3 -2; 1 0; 0 1]; bi=[-6 0 ...

  3. jenkins 安卓打包生成二维码下载

    先来张图看看吧 构思 jenkins gradle 打包apk文件,python myqr 模块生成二维码 放入nginx 访问图片的路径,apk安装包放在 nginx 下载目录. 环境 centos ...

  4. Django 通过APNS推送消息

    最近手上一个项目需要通过APNS向app推送消息,由于后端采用drf框架,在github上找了好多模块,最终发现pzanitti大神的推送模块 django-push-notifications 比较 ...

  5. WCF自寄宿实现Https绑定

    一.WCF配置 1 Address 将服务端发布地址和客户端访问地址都配置为https开始的安全地址.参考如下. <add key="SrvUrl" value=" ...

  6. idea html热部署

    IDEA SpringBoot 热部署+html修改无需make自动刷新 收藏 HeyS1 发表于 3个月前 阅读 310 收藏 2 点赞 0 评论 0 特邀IBM大咖的主题沙龙,5月20日·北京·3 ...

  7. python第二十二课——list函数

    演示list类型中常用的一些函数: 1.append(obj):将obj元素追加到列表的末尾 lt=['路费','佐罗','山治','乔巴','乌索普','纳米桑'] #append(): lt.ap ...

  8. 安装VMware,Linux

    不是每一个程序员都必须玩过linux,只是博主觉得现在的很多服务器都是linux系统的,而自己属于那种前端也搞,后台也搞,对框架搭建也感兴趣,但是很多生产上的框架和工具都是安装在服务器上的,而且有不少 ...

  9. UVa 10213 - How Many Pieces of Land ?(欧拉公式)

    链接: https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem& ...

  10. centos下mysqlreport安装和使用

    首先查看你的机器是否安装了perl: #perl -v 显示版本号即表示已安装 然后: #yum install perl-DBD-mysql perl-DBI #yum install mysqlr ...