3

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

Bosun 运行良好。我让 scollector 在 Ubuntu 14 LTS 上运行并正确使用我的配置文件。

这是我的 scollector.toml 中的内容:

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

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

然后,我希望在我的主机 cass01 下的 bosun 中在某处看到一个度量标题“cassandra”,但它无处可见。其他指标在那里。

4

1 回答 1

3

现在 Command 是二进制进程路径上的部分匹配,直到第一个空格分隔符。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 文件中使用的名称匹配的位置下。

于 2015-08-21T18:44:59.453 回答