flashcatcloud / categraf

one-stop telemetry collector for nightingale
https://flashcat.cloud/docs/
MIT License
758 stars 237 forks source link

procstat配置labels_from_cmdline_reggroup 的建议: #975

Open fuqihuan opened 2 weeks ago

fuqihuan commented 2 weeks ago

引用原链接:https://github.com/flashcatcloud/categraf/pull/951

  1. 这里使用正则动态获取到了进程自动添加上了标签,但有些局限性,例如只加上了cpu,io等标签,内存的没有加上(看代码是没引用上的)
  2. 能否加上存活的指标信息采取,如进程pid在则给1,不存在则给0或负值。且自动加上标签。或者有没有其他方法能够实现在用正则自动添加lable的前提下,通过哪些指标能做进程存活的监控判断呢?
kongfei605 commented 2 weeks ago

1 没看太明白 2 这个做不了,有些多进程的检查,有几个pid算存活? 标准怎么给出?

fuqihuan commented 2 weeks ago
  1. 配置了labels_from_cmdline_reggroup,mem_rss这些都没打上对应的lable,看代码上是没加上 ins.makeCmdlineLabelReggroupTag(p) 。
  2. 请问有哪些方法是能判断进程存活的不?是不是只能exec再写脚本的方式去实现了
kongfei605 commented 2 weeks ago

1 欢迎提个PR哈 2 自动判断不了,exec也判断不了。比如php-fpm进程,达到start_servers进程数就算存活, 那每个人的start_servers不一样,exec是不是不能写死这个数目?采集数据后,我不知道是你的exec脚本采集有问题,还是真的进程数就这几个。 就是想自动发现进程数的都不靠谱,就得配置的人知道有多少进程,从采集结果来判断才可以。

fuqihuan commented 2 weeks ago

第2点,其实我的场景是有很多同名同质进程。但是有一定规律。举例以下3个进程。 /data/abc_efg_1/server/bin/ctl start --host xxxxx /data/abc_efg_3/server/bin/ctl start --host xxxxx /data/abc_efg_5/server/bin/ctl start --host xxxxx

另外: /data/下这个 [a-zA-Z]_[a-zA-Z]_[0-9]+ 规则的目录是有可能新增或删减的。我的目的是想自动发现这些进程采集和判断这些进程的存活。举例: 如果/data/目录下创建了一个/data/abc_xxx_3这样的目录时,且没有启动对应的进程,我则可以快速发现。

当前能够用 labels_from_cmdline_reggroup 来收集各个进程的对应指标。但无法得知进程的存活状态。有以下几个思路:

  1. 通过判断上面指标值的数量小于一定数值时则判断可能进程挂了
  2. 另起一个exec脚本,exec脚本去用正则取对应规则的目录后用ps判断是否存活。
  3. 当然还是希望插件自身能够做这个事,但看起来搞不了。
kongfei605 commented 2 weeks ago

通用场景呢? 个性化场景放到exec中比较合适。

fuqihuan commented 2 weeks ago

通用场景的话,我觉得应该是应用在自动发现服务自动监控上。 我们的场景大致是以下内容。

  1. 某个路径下有规则统一的应用目录,每个目录会独立起一个进程服务。
  2. 这些目录的创建变更是走运维脚本或平台批量创建的。
  3. 希望能够自发现这些目录,识别成个别节点,对这些节点进行监控对应的进程存活,进程内存cpu等指标。当前 labels_from_cmdline_reggroup 已经解决掉进程指标收集这些问题了。
kongfei605 commented 1 week ago

这种非标准场景,就是做不到自动发现,是发现少了,还是真的节点、进程不存在。

zzmark commented 1 week ago

另外: /data/下这个 [a-zA-Z][a-zA-Z][0-9]+ 规则的目录是有可能新增或删减的。我的目的是想自动发现这些进程采集和判断这些进程的存活。举例: 如果/data/目录下创建了一个/data/abc_xxx_3这样的目录时,且没有启动对应的进程,我则可以快速发现。


基于正则做自动发现,只能是规则性的,没法做列表性的。此种需求需要列表性的东西来做发现。 或者,自行使用脚本进行校验。

categraf 的 procstat 没有做 stat 存储,只是一个刮取器,不该叠加太复杂的需求,也不要强加太多定制或者巡检需求给刮取器。

进程级的几种情况

  1. 新增进程,使用正则匹配进程,是可以做到自动发现并采集新进程的。
  2. 进程重启,刮取器只会去刮取新的数据,此时 uptime 会回拨
  3. 进程丢失,不能做到感知。最终表现只是时序数据中断。没办法进一步判断原因,到底是进程下线还是进程kill

当然,有一些解决方案


配置了labels_from_cmdline_reggroup,mem_rss这些都没打上对应的lable,看代码上是没加上 ins.makeCmdlineLabelReggroupTag(p) 。

mem_rss 这里,确实是有疏漏忘了加。我这里主要是用于大范围监控jvm gc和golang net,对mem没有开启,疏忽了。

稍后会补 PR

zzmark commented 1 week ago

fix https://github.com/flashcatcloud/categraf/pull/981

kongfei605 commented 1 week ago

@zzmark 也请关注正则的性能消耗 https://github.com/flashcatcloud/categraf/issues/982