Zabbix源码解析之监控项数据采集流程_第1页
Zabbix源码解析之监控项数据采集流程_第2页
Zabbix源码解析之监控项数据采集流程_第3页
Zabbix源码解析之监控项数据采集流程_第4页
Zabbix源码解析之监控项数据采集流程_第5页
已阅读5页,还剩24页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、 Zabbix 源码解析之监控项数据采集流程 一、概述监控项数据采集是一个监控工具最基本的功能,监控数据采集的准确、实时、有效是Zabbix其它监控功能正常运转的前提。因此,Zabbix运维人员有必要了解监控项数据采集流程,并有针对性的设计巡检和问题处理流程,确保监控数据质量。Zabbix 的监控采集类型很丰富,我最常用的是Agent方式,因此,就挑选Linux的内存监控(Zabbix内置key:vm.memory.size)为例来梳理一下监控项数据采集流程。二、程序流程图下图是我们梳理的vm.memory.size监控项采集流程图,数据采集的过程设计得缜密而复杂:下面,我们将对主要流程和具体

2、实现进行解析,涉及函数的具体实现解析写在了代码注释中。三、相关数据结构定义在介绍vm.memory.size具体实现之前,我们先介绍几个相关数据结构的定义。(1)struct ZBXMETRIC该结构体用于记录zabbix的监控项配置信息(2) struct AGENTREQUEST该结构体用于记录zabbix Agent的监控项请求信息(3) struct AGENTRESULT该结构体用于记录给zabbix Agent返回的采集数据四、监控项vm.memory.size配置用法: vm.memory.sizemode参数:total (*) - 总物理内存. mode的默认值free (*

3、) - 可用内存.active - 内存当前使用或最近使用,它在RAM中是活跃的。inactive - 未使用内存.wired - 被标记为始终驻留在RAM中的内存,不会移动到磁盘。pinned - 同“wired”。anon - 与文件无关的内存(不能重新读取)。exec - 可执行代码,通常来自于一个(程序)文件。file - 缓存最近访问文件的目录。buffers (*) - 缓存磁盘读写数据。cached (*) - 缓存文件系统读写数据。shared - 可以同时被多个进程访问的内存。used (*) - 已使用内存。pused (*) - 已使用内存占总内存的百分比。availab

4、le (*) - 可用内存pavailable (*) - 可用内存占总内存的百分比。假如我们在某Host下定义了2个item:Item1:Total memory Key1:vm.memory.sizetotalItem2:Available memory Key2:vm.memory.sizeavailable这2个item就会被insert到Server数据库的items表中,这样该Host的Agent就可以获取到相应的采集任务了(获取流程本文不具体阐述),下面我们来重点看下vm.memory.size的采集实现和数据上送。五、监控项vm.memory.size 采值实现vm.memor

5、y.size监控项在不同的操作系统下实现各不相同,Linux系统下的实现,在src/libs/zbxsysinfo/linux/linux.c中。其配置项存放于parameters_specific数组中,可以看到对应的实现函数为VM_MEMORY_SIZE,1. VM_MEMORYSIZE函数(位置在:src/libs/zbxsysinfo/linux/memory.c)用来接受参数,并对应调用对应的取值函数进行数据采集,并返回数据。具体实现如下:从源码中可以看到,Linux系统支持的模式包括如下参数,与官方文档中所列的参数不同。totalfreebuffersusedpusedavaila

6、blepavailablesharedcachedactiveanoninactiveslab通过分析各个参数对应的取值逻辑,可分为2种方法:第一种:调用sysinfo函数获取指标值。通过这种方式获取的选项参数有:total,free,buffers,used,pused,pavailable,shared。第二种:读取/proc/meminfo文件中的指标值。通过这种方式获取的选项参数有:available,cached,active,anon,inactive,slab。下面我们分别对两种情况进行分析。(1)调用sysinfo函数Linux中sysinfo()函数是用来获取系统相关统计信息

7、的函数。它会将结果存储在struct sysinfo结构体中。函数声明:int sysinfo(struct sysinfo *info);struct sysinfo的定义如下:total,free,buffers,used,pused,pavailable,shared等指标,都是以struct sysinfo中的成员的取值来计算的。 total:info.totalram * info.mem_unit free:info.freeram * info.mem_unit buffers:info.bufferram * info.mem_unit used:(info.totalram

8、- info.freeram) * info.mem_unit pused:(info.totalram - info.freeram) / (double)info.totalram * 100 pavailable:available / (info.totalram info.mem_unit)100(available在/proc/meminfo文件中读出) shared:info.sharedram * info.mem_unit(仅Linux 2.4)(2) 读取/proc/meminfo文件该功能在VM_MEMORY_PROC_MEMINFO函数中实现。向meminfo_entr

9、y参数传递Cached:, Active:, AnonPages:, Inactive:, Slab:字段。其中available的获取比较特殊,它先检测/proc/meminfo文件文件中是否有MemAvailable:字段,如果没有,则再调用sysinfo函数获取。具体实现如下:六、监控项vm.memory.size 数据上送前面解析的监控项的采值逻辑,下面我们来分析数据从Agent端上送到Server的过程。介绍几个相关的函数:1.init_metrics函数vm.memory.size监控项会被存储到parameters_specific数组中。那么parameters_specifi

10、c数组在哪儿被使用到呢?就在init_metrics函数中。init_metrics函数在zabbix Server和zabbix Agent启动的过程中都被调用了,因此这些监控项在zabbix启动时已经被设置好了。2.add_metric函数add_metric函数会向commands数组中添加值。commands是在sysinfo.c中定义的一个ZBX_METRIC结构体变量,初始值是NULL。add_metric函数具体实现如下:3.process函数commands数组在哪里被使用到了呢?在process函数中,process函数定义在src/libs/zbxsysinfo/sysin

11、fo.c中。在process函数中会最终调用监控项实现函数,那process函数在哪被调用到的呢?在zabbix_agent中,调用process函数的地方有2处,分别位于agent的被动模式和主动模式的实现中。我们分别来分析一下。(1) 被动模式下的processlistener函数(2)主动模式下的processactivechecks函数4. 监控项值的序列化与上送介绍完相关的函数和调用,下面我们可以具体来分析数据上送的过程了(1)agent与server通信协议首先是通信协议,agent与server间的通信协议比较简单,其协议格式为:。 PROTOCOL: 协议头,该字段长度为4个字

12、节,内容为ZBXD。 FLAGS: 协议标志,该字段长度为1个字节。有2个取值(这两个值可以使用“或”操作同时取): 0 x01:ZBX_TCP_PROTOCOL,zabbix TCP通信协议 0 x02:ZBX_TCP_COMPRESS,使用压缩算法 DATALEN: 数据长度,该字段长度为4个字节。整型,以小端模式表示。 注意该长度不包含协议头这几个字段的长度,它仅表示DATA字段的数据长度。 RESERVED: 保留字段,用作协议扩展,字段长度为4字节。当ZBX_TCP_COMPRESS标志被设置后,RESERVED字段会保存未被压缩时的数据段的长度。整型,以小端模式表示。 DATA: 数据内容,使用JSON格式来序列化。(2)监控项值的传递1、我们以主动模式下会被调用的send_buffer函数(zbx_tcp_send()最终会调用到zbx_tcp_send_ext()函数)为例,分析一下监控项值如何发送给server。被动模式下zbx_tcp_send_to(s, *value, .)函数最终也会调用到zbx_tcp_send_ext()函数,与主动模式下最终的处理是一致的,我们不再单独分析。具体实现如下:根据上面的源码分析结果,可得出agent发送的数据的格式如下:2、agent发送数据后,会从server端收到响应数据,响应数据的格式如下

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论