C守护程序中的运行时信息

时间:2009-08-14 14:19:13

标签: c monitoring

用户,管理员和支持人员需要从C开发的守护程序中获取详细的运行时和监视信息。

就我而言,这些信息就是这样的。

  • 当前系统运行状况,如吞吐量(MB / s),已写入数据,......
  • 当前配置

我会在Java世界中使用JMX,在内核模块中使用procfs(或sysfs)接口。日志文件似乎不是最佳方式。

C守护程序的这种信息界面的最佳方法是什么?

我考虑过打开一个套接字并实现一个裸机http或xmlrpc服务器,但这似乎有些过分。有什么替代方案?

5 个答案:

答案 0 :(得分:4)

您可以在守护程序中使用信号处理程序,例如USR1,并将信息转储到屏幕/日志/网络。这样,只要您需要信息,就可以向进程发送USR1信号。

答案 1 :(得分:1)

如果您仍在使用关系数据库,请创建另一个表并根据需要随时填充当前状态。如果您没有关系数据库,请在文件中写入状态,并实现一些循环方案,以避免覆盖某人在此刻读取的文件。

答案 2 :(得分:1)

您可以在UNIX域套接字上侦听,并定期写入当前状态(例如每秒一次)给连接它的任何人。您不需要实现HTTP或XMLRPC之类的协议 - 因为通信将是单向的,只需定期编写包含该状态的单行纯文本。

答案 3 :(得分:0)

写入文件。使用文件锁定协议强制进行原子读取和写入。你同意的任何事情都会奏效。可能有一个UUCP锁定库可以使用。在以前的生活中,我找到了一个用于Linux。我也从头开始实现它。这样做也是相当微不足道的。

查看Linux上的lockdev(3)库。它适用于设备,但它也适用于普通文件。

答案 4 :(得分:0)

我最喜欢套接字的想法。无需支持HTTP或任何RPC协议。您可以创建一个返回所请求信息的简单应用程序特定协议。如果服务器总是返回相同的信息,那么处理传入的请求是微不足道的,尽管如果您想要扩展可能的查询,那么简单的方法可能会导致问题。使用预先存在的协议的主要原因是利用现有的库和工具。

说到利用,另一种选择是使用SNMP并将守护进程作为托管组件进行访问。如果您需要远程查询/管理守护程序,此选项有其优点,但否则可能会比HTTP服务器更难以理解。