如果进程是 运行,则将 scollector 配置为记录

Configure scollector to log if a process is running

我正在尝试使用 Bosun 来确定某些进程是否 运行,然后最终在它们是启动还是关闭时发出警报。我可能误解了文档,但我无法弄清楚。

Bosun运行很好。我在 Ubuntu 14 LTS 上安装了 scollector 运行 并正确使用了我的配置文件。

这是我 scollector.toml 中的内容:

host="blah:8070"
hostname="cass01"

[[Process]]
  command =  "^.*(java).*(CassandraDaemon)$"
  name = "Cassandra"

然后我希望在我的主机 cass01 下的 bosun 中的某处看到一个公制标题 "cassandra",但它无处可见。还有其他指标。

现在命令是二进制进程路径的部分匹配,直到第一个 space 定界符。 Args 参数是一个正则表达式,用于区分进程的多个实例。因此,对于 java 过程,您可以使用类似的东西:

[[Process]]
  Command = "java"
  Name = "Cassandra"
  Args = "CassandraDaemon$"

这将匹配如下命令行:

/usr/bin/java /usr/bin/CassandraDaemon

这假定该进程的 /proc/<pid>/cmdline 在 CassandraDaemon 中结束。如果它不以该字符串结尾,您需要将 Args 更改为仅 "CassandraDaemon",这将匹配包含该字符串的任何 java 进程。

还有一些进程将 cmdline 更改为 nul 分隔字符串以外的内容。在这些情况下,需要使用 Command 参数来匹配,因为 Args 需要 nul 分隔符。示例:

cat /proc/80156/cmdline | hexdump -C
00000000  2f 75 73 72 2f 62 69 6e  2f 72 65 64 69 73 2d 73  |/usr/bin/redis-s|
00000010  65 72 76 65 72 20 2a 3a  36 33 37 39 00 00 00 00  |erver *:6379....|
00000020  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
00000030  00                                                |.|
00000031

#Example for cmdline without NUL (00) delimiters between args
[[Process]]
  Command = "redis-server *:6379"
  Name = "redis-core"

一旦这些与正确的匹配值就位,您应该会在 linux.proc.* 下看到指标,其中名称标签将与 TOML 文件中使用的名称相匹配。