DataStax OpsCenter 代理:短 os-stats 收集器失败

DataStax OpsCenter Agents: Short os-stats collector failed

在习惯了 Cassandra 和 OpsCenter 几个星期后,仍然有一个问题我无法找到解决方案。我设法安装和配置了 OpsCenter 和代理,以便它们可以相互连接。然后我查看了 OpsCenter 中可用的一些不同指标。因此,我意识到我没有获得 OS 的任何信息:已用内存,这就是为什么我试图追查此问题的根源。

在代理日志文件中,我一遍又一遍地看到消息 "Short os-stats collector failed"。我尝试搜索此消息的原因,但我找到的所有答案对我的情况都没有帮助。我提高了代理的日志级别来跟踪并发现了这个:

TRACE [os-metrics-2] 2015-08-27 08:39:34,644 Output from iostat -x -d -m 60 2... :
TRACE [os-metrics-2] 2015-08-27 08:39:34,648 Starting process: iostat -x -d -m 60 2
TRACE [os-metrics-7] 2015-08-27 08:39:34,667 Starting process: free -m
TRACE [os-metrics-7] 2015-08-27 08:39:34,669 Output from free -m... :
ERROR [os-metrics-7] 2015-08-27 08:39:34,670 Short os-stats collector failed
TRACE [os-metrics-5] 2015-08-27 08:39:34,677 Output from iostat -c -m 60 2... :
TRACE [os-metrics-5] 2015-08-27 08:39:34,678 Starting process: iostat -c -m 60 2
TRACE [os-metrics-6] 2015-08-27 08:39:34,682 Starting process: df --print-type --no-sync --block-size=1G --local
TRACE [os-metrics-6] 2015-08-27 08:39:34,684 Output from df --print-type --no-sync --block-size=1G --local... :

我想以任何方式导致问题的命令是 free -m,这是有道理的,因为它显示了有多少内存可用和已使用。我尝试使用这些新信息进行更多研究,并找到了一个可能的解决方案:人们建议检查我系统上的 cassandra 用户是否具有发出命令的必要权限。我以用户身份登录并且没有任何权限问题,free -m 显示通常的输出(与以root身份登录时显示的相同):

              total        used        free      shared  buff/cache   available
Mem:           7752        4768         145          27        2838        2705
Swap:          8191          64        8127

我运行不知道问题出在哪里,这就是为什么我希望在这里得到一些帮助。

关于我的系统和集群的更多信息:
OS: 美分OS 7.1.1503
Cassandra 版本:DataStax Community 版本 2.1.8
OpsCenter 和代理版本:5.2.0
Cassandra 和代理 运行 作为 cassandra 用户,OpsCenter 运行s 作为 root。

希望任何人都知道可能是什么问题。提前致谢,如果您需要任何进一步的信息,我很乐意提供。

顺便说一句:OS:已用内存是我迄今为止发现的唯一不起作用的统计数据。 OS: Memory Free 图无论出于何种原因都有效。

编辑:我刚刚看到,在某些情况下,我还会得到堆栈跟踪以及错误消息:

 java.lang.NullPointerException
at clojure.lang.Numbers.ops(Numbers.java:942)
at clojure.lang.Numbers.lt(Numbers.java:219)
at clojure.lang.Numbers.min(Numbers.java:4007)
at opsagent.rollup$add_value.invoke(rollup.clj:173)
at opsagent.rollup$process_keypair$fn__1465.invoke(rollup.clj:250)
at opsagent.cache$update_cache_value_default$fn__1166$fn__1167.invoke(cache.clj:25)
at clojure.lang.AFn.applyToHelper(AFn.java:161)
at clojure.lang.AFn.applyTo(AFn.java:151)
at clojure.lang.Ref.alter(Ref.java:174)
at clojure.core$alter.doInvoke(core.clj:2244)
at clojure.lang.RestFn.invoke(RestFn.java:425)
at opsagent.cache$update_cache_value_default$fn__1166.invoke(cache.clj:25)
at clojure.lang.AFn.call(AFn.java:18)
at clojure.lang.LockingTransaction.run(LockingTransaction.java:263)
at clojure.lang.LockingTransaction.runInTransaction(LockingTransaction.java:231)
at opsagent.cache$update_cache_value_default.invoke(cache.clj:24)
at opsagent.rollup$process_keypair.invoke(rollup.clj:250)
at opsagent.rollup$process_metric_map.invoke(rollup.clj:256)
at opsagent.os.collection$start_os_stat_collection$send_metric__16618.invoke(collection.clj:80)
at opsagent.os.linux_metrics$sendmap.invoke(linux_metrics.clj:12)
at opsagent.os.linux_metrics$report_mem_stats.invoke(linux_metrics.clj:134)
at opsagent.os.linux_metrics$collectors$wrap_short_collector__10821$fn__10822.invoke(linux_metrics.clj:270)
at opsagent.os.collection$start_pool$fn__16589.invoke(collection.clj:39)
at clojure.lang.AFn.run(AFn.java:24)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:308)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access1(ScheduledThreadPoolExecutor.java:180)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:294)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)

我的猜测是 Centos 7.1 使用 procps-ng,其中 free 的输出与“经典”free 不兼容。这是一个已知问题,将在即将发布的 5.2 补丁版本(不是 5.2.1,而是之后的版本)中修复。