Pinpoint指标接入Zabbix LLD:监控项如何做到自动发现
Pinpoint指标接入Zabbix LLD:监控项如何做到自动发现【免费下载链接】pinpointAPM, (Application Performance Management) tool for large-scale distributed systems.项目地址: https://gitcode.com/gh_mirrors/pi/pinpoint手动维护Zabbix监控项是一件麻烦事:服务扩缩容之后,新接口不断出现,旧接口又下线,配置很快就和线上状态对不上。Pinpoint是面向大规模分布式系统的APM(应用性能管理)工具,它的监控指标,比如URL统计、基础设施指标,会随应用状态变化。把这些指标接进Zabbix LLD(Low Level Discovery,低层自动发现),Zabbix就能按计划自动生成、自动下线监控项,让配置始终贴近真实状态。值得接入Zabbix的Pinpoint指标不是所有指标都值得接。以下三类价值高、输出结构也比较稳定:指标类型典型字段代码位置基础设施指标CPU使用率、内存占用、GC次数、TPSagent侧上报:agent-module/agent/;展示侧:web/src/main/URL统计响应时间、请求数、失败数、Apdex得分uristat/(存储与查询)分布式追踪拓扑服务依赖、事务数、错误数collector/(采集链路)、web的applicationmap上面这个面板就是web端基础设施指标的入口。脚本取数时,字段口径以它为准,后续在Zabbix侧做映射时不容易出错。LLD自动发现的运行原理先解释一下LLD:它是Zabbix内置的发现机制,Zabbix定期执行一个外部检查脚本,解析脚本返回的JSON,据此动态创建或删除监控项。这条链路一共五步:Pinpoint API:web端暴露HTTP接口,可以查询在线agent、URL统计,例如 /api/agents 和 /api/uriStat。导出脚本:脚本请求上述接口,把结果转成LLD格式。格式要求是顶层有一个 data 数组,数组里每个元素包含 {#名称} 形式的宏键。Zabbix外部检查:发现规则的键值指向脚本,例如 pinpoint.lld[{$PINPOINT_URL}],其中 {$PINPOINT_URL} 是存服务地址的宏变量。发现规则生成宏:脚本发现到的每一个URL都会变成 {#URL} 这样的宏,Zabbix据此把监控项原型实例化成一个个具体监控项。监控项原型:键值里直接写宏,例如 pinpoint.url.response.time[{#URL}]。新URL出现,监控项自动建出来;URL消失,对应监控项自动删除。自动就体现在后两步:监控项不再靠人工登记,而是由数据驱动。脚本要输出的标准JSON长这样:{data: [ {{#URL}: /api/order}, {{#URL}: /api/pay} ]}把指标接进Zabbix的实操步骤第1步:先让Pinpoint指标可查询确认目标接口能访问:curl http://$PINPOINT_HOST/api/agents?applicationNamedemofrom1to2有两个实际细节:web端接口一般要求登录态,脚本里要带token,或者挑只读、不需要登录的接口;配置解析可以参考 agent-module/agent-tools/ 里现成的工具类写法。第2步:写发现脚本脚本只干一件事:取URL列表,按LLD的JSON格式输出。#!/usr/bin/env bash curl -s $PINPOINT_HOST/api/uriStat/uris?appName$APP \ | jq {data: [.[] | {{#URL}: .uri}]}本地跑通、确认输出是合法JSON,再交付给Zabbix。第3步:建发现规则与监控项原型在Zabbix模板上新建发现规则,类型选外部检查,键值写pinpoint.lld[{$PINPOINT_URL}],脚本路径指向上面这个,发现间隔按业务节奏设定。同一模板下新建监控项原型,键值写pinpoint.url.response.time[{#URL}];它对应的取值脚本以 {#URL} 宏作为入参,去Pinpoint查该URL的响应时间,输出一个数值。触发器挂在原型上,比如数值超过阈值就告警;需要曲线的话同样建图形原型。这样每个被发现的URL都会自动拥有完整的一套监控。第4步:验证闭环执行一次发现,到模板的已发现的实体页面核对监控项是否逐项生成;再手动加一个测试接口,看下一次发现周期是否自动补出新项。扩容发生时,新实例会出现在这张地图上;同一时间,LLD发现规则也会在下一个周期把新实例取进来,自动完成监控项挂载。排障清单现象排查动作发现实体为空本地执行脚本,确认输出含 data 数组;检查Pinpoint接口可达性与登录token是否有效Zabbix报JSON解析错误确认顶层是 {data: [...]} 结构,宏键为 {#XXX} 形式,检查是否混入全角标点监控项刷新慢分别检查发现规则与监控项原型的间隔;测量脚本执行耗时,慢则拆分查询监控项数值停留旧值确认可值脚本是否每次重新请求Pinpoint;检查脚本里是否加了缓存层接入完成之后,监控项始终跟着应用真实状态走,人工增删监控项的工作基本可以停掉了。想了解仓库整体模块划分,看 README.md;想看各面板的具体实现,可以翻 web-frontend/src/main/ 下的前端代码。【免费下载链接】pinpointAPM, (Application Performance Management) tool for large-scale distributed systems.项目地址: https://gitcode.com/gh_mirrors/pi/pinpoint创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考