跳至主要內容
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?

4563博客

全新的繁體中文 WordPress 網站
  • 首頁
  • 监控进程 id,每次重启 id 都变化,有什么好的办法监控吗
未分類
26 3 月 2020

监控进程 id,每次重启 id 都变化,有什么好的办法监控吗

监控进程 id,每次重启 id 都变化,有什么好的办法监控吗

資深大佬 : tianshiyeben 70

最近一直在苦思这个问题,该怎么做。

我有个开源项目

https://github.com/tianshiyeben/wgcloud

是做服务器分布式监控的软件,其中包括监控进程,但是进程 id 要配置到 xml。

这样有个弊端,就是每次应用重启后,进程 id 就变了,要重新配置 xml 里的进程 id,还要重启 agent。这样比较麻烦。

有的同学建议,从 pid 文件里读取,但是这样对应用启动要求比较高,很多运维同学不知道怎么生成 pid 文件,说实话我也没做过。

我自己想的办法是准备从 sever 端页面配置进程信息,这样至少不用每次修改配置文件了。但是这样没有从根本解决我的疑惑。

大佬有話說 (32)

  • 資深大佬 : 202

    监控运行路径,再找 pid

  • 資深大佬 : asilin

    这个时候,就是 cgroups 大显身手的时候了,用 systemd-run 来运行程序,指定 slice 和 sevice 名称,即使进程重启,依然是在在对应的 cgroups 里。

  • 資深大佬 : cominghome

    有的同学建议,从 pid 文件里读取,但是这样对应用启动要求比较高,很多运维同学不知道怎么生成 pid 文件,说实话我也没做过。

    建议换个运维。百度一下五分钟解决的事情。

  • 主 資深大佬 : tianshiyeben

    @asilin 这个估计不行啊,我还要支持在 win 下跑呢。

  • 主 資深大佬 : tianshiyeben

    @202
    @cominghome
    tks
    因为我还要支持在 win 下运行,所以不能只考虑在 linux 下可用。
    我还是同时支持读进程 id 文件和进程 id 配置,这样就可以了。
    现在貌似没有更好办法了。

    我刚忘了说了,这个监控要支持 win

  • 資深大佬 : swulling

    配置进程的文件路径,然后从路径反差 PID 即可,windows 和 linux 都能轻松做到这一点

  • 主 資深大佬 : tianshiyeben

    @swulling 谢谢,我找下资料。

  • 資深大佬 : STRRL

    曾经我们也有这个问题 我们的应用是 spring based

    然后引入了 actuator 通过一个约定好的 /actuator/info 做发现 然后就解决了

    如果后续上了 spring cloud 有了 discovery 会更方便

  • 資深大佬 : wangyzj

    有端口吗?
    从端口找回来行吗?

  • 主 資深大佬 : tianshiyeben

    @wangyzj
    @STRRL
    这个监控进程是,是想监控所有的应用,可能没有端口。
    也有的不是 spring 进程。
    反正是各种各样的

  • 資深大佬 : zanelee

    这个去群里让群主想办法,群里也挺多人在讨论这个问题。看群里有没有好办法能够解决

  • 資深大佬 : wisdom

    bash 反查 pid

  • 資深大佬 : lovedebug

    1. pid 文件最简单
    2. 程序可以暴露一个接口有监控器查 pid 号
    3. 程序启动时自动上报 pid
    4. win 上应用注册为 service 也可以查到 pid

  • 資深大佬 : STRRL

    @tianshiyeben 如果还是 java based 的话, 可以考虑用 Java Attach API + MBeans 的方式, 反正你也有一个 agent 在机器上跑了. 我们也会用这种方式发现非 web 的 java 应用.

  • 資深大佬 : hankai17

    根据进程名查 pid
    把 pid 记录到 /tmp 路径下的一个文件里
    每次查的时候 再读这个文件对比

  • 資深大佬 : privil

    @cominghome #3 运维不知道怎么生存 pid 文件的,建议可以开除。

  • 主 資深大佬 : tianshiyeben

    @zanelee 什么群啊

  • 資深大佬 : xiaochun41

    重启时程序自动上报进程 id 到一个地方即可(比如通过接口上报的某个服务,这个服务在将进程 id 落地到存储),要用时候,只从存储读取即可

    接口可以通过 http 接口,也可以是其他形式( tcp,udp )
    存储可以是数据库也可以是缓存。

  • 主 資深大佬 : tianshiyeben

    @privil 汗,我这是做的开源产品,想做成一个比较简单工具。不是针对某一个运维同学

  • 主 資深大佬 : tianshiyeben

    @xiaochun41 我还是不能侵入应用,不能让他们自动上报。只能在外围想想办法,比如 pid 文件

  • 資深大佬 : msg7086

    pid 是古典的方式,cgroup 是现代的方式。

  • 資深大佬 : scarletass

    进程 id 可以动态获取为什么写到文件去?

  • 資深大佬 : qyvlik

    1. 修改程序上报 pid 给你的 agent
    2. 用 脚本通过特征,例如端口,运行路径等等找出 pid
    3. 类似于 window 那种注册 service,通过 service 找 pid
    4. 或者 linux 下用 supervisor,直接一键生成 pid 文件: http://liyangliang.me/posts/2015/06/using-supervisor/
    5. v 友补充好多其他方案了

  • 資深大佬 : houzhimeng

    shell :变量名获取 $pid,然后监控….

  • 主 資深大佬 : tianshiyeben

    @qyvlik 谢谢,你写的比较全面
    @houzhimeng 谢谢

  • 資深大佬 : chibupang

    find +xargs+awk 查找进程的 ID,然后写入 xml 文件

  • 資深大佬 : back0893

    程序上线自动发送 pid

  • 主 資深大佬 : tianshiyeben

    还是用 pid 文件,这样简单点。其他的建议也很好,就是使用起来用户体验不好。
    @back0893
    @chibupang

  • 資深大佬 : ysc3839

    不能通过进程名获取吗?

  • 主 資深大佬 : tianshiyeben

    @ysc3839 进程名称可以获取到,但是要解析才能拿到进程 id,而且很难做到跨系统。

  • 資深大佬 : lqxzzz

    myprocess & echo $! > /tmp/myprocess.pid

  • 資深大佬 : ysc3839

    @tianshiyeben 我个人感觉不难吧?类 Unix 系统应该都有 /proc,Windows 的话单独写一套代码。另外估计也有现成的第三方库可用。

文章導覽

上一篇文章
下一篇文章

AD

其他操作

  • 登入
  • 訂閱網站內容的資訊提供
  • 訂閱留言的資訊提供
  • WordPress.org 台灣繁體中文

51la

4563博客

全新的繁體中文 WordPress 網站
返回頂端
本站採用 WordPress 建置 | 佈景主題採用 GretaThemes 所設計的 Memory
4563博客
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?
在這裡新增小工具