vproc
概述
类似linux proc系统,以文件为媒介。应用程序可以定义多个状态值(key/value),在程序运行过程中持续更新到文件中。外部可随时读取文件查询状态值。程序开发者或运维者可以更好的掌控程序的运行状态。
所有key值均采用 app.[group1.gourp2...groupn].item方式组织。末端item为文件,记录监测项的值,前面是多级目录。比如key值vaserver.va0.cameraname,记录状态值的文件为VPORC_ROOT/vaserver/va0/cameraname。 一个监测项对应一个文件
vproc是实现上述功能的命令行工具,python编写
vproc提供的功能
应用程序调用vproc脚本写状态值。
查询指定key的value值,输出到屏幕。利用此功能,实现了zabbix查询监测项的值。汇总起来统一在zabbix web上展示
提供类似top命令的状态查看功能,不联动zabbix,也能实时掌控自己应用程序的运行状态。
使用方法
vproc工具有4个命令。
- 写:
# 此命令将创建文件 ROOT_VPROC/app/group1/group2/item,文件内容为value1
./vproc write --key=app.group1.gourp2.item --value=value1
- 读:
# 将ROOT_VPROC/app/group1/group2/item文件内容打印出来
./vproc read --key=app.group1.gourp2.item
- 重置:
# 删除ROOT_VPROC/app/group1/目录。相当于重置状态值
./vproc clean --path=app.group1
- 查看:
# 类似top,每隔1秒刷新输出一次状态值。参数path可以是任意级别,输出的监测项是path下的所有监测项。
./vproc watch --path=app.group1
注意事项
- 应用程序中单个监测项更新状态频率不宜过快。建议间隔时间1分钟以上
注意: 建议在程序(以及能代表一组的流程)启动时、关闭时重置状态,避免旧的状态值干扰。
vproc 典型使用流程,拿vaserver举例:
定义监测项:
vaserver.license
vaserver.event_count(发出了多少事件)
vaserver.va0.taskname(分析通道0的任务名称)
vaserver.va0.playok (分析通道0视频是否点播成功)
应用程序写值
vaserver启动和退出时应调用
# 清理旧状态
./vproc clean --path=vaserver
vaserver启动、关闭一个va时(假设是编号0)应调用
# 清理旧状态
./vproc clean --path=vaserver.va0
license校验状态时
# 成功写1 失败写0
./vproc write --key=vaserver.license --value=1
执行一个任务,打开了一个通道
# 然后将任务信息状态更新
./vproc write --key=vaserver.va0.taskname --value=taskname1
视频第一帧图像回调到va0
./vproc write --key=vaserver.va0.playok --value=1
xx秒没有图像回调到va0
./vproc write --key=vaserver.va0.playok --value=0
调试阶段在命令行查看状态
开启一个命令行,运行
./vproc watch --path=vaserver
类似top命令,每隔1秒更新一次各状态值
衔接zabbix
zabbix_agentd会调用
./vproc read --key=vaserver.license
# 其他值
...
所有状态值汇总到zabbix server中,在web上统一显示所有被检测主机的状态值。vproc是集群监测的一个基石