Kubernetes,Java和Grafana – 如何仅显示正在运行的容器?

我正在设置一个设置,在kubernetes平台上托pipe的docker容器中运行我们的Java服务。

在想要创build一个仪表板,我可以监视在我的graphics服务的所有实例的堆使用情况。 将度量标准写入模式:

<servicename>.<containerid>.<processid>.heapspace运行良好,我可以在图表中看到所有堆用法。

重新部署后,容器名称会更改,所以新值将添加到现有graphics中。 我的问题是,旧线路继续存在于收到的最后一个值的位置,但是集装箱已经死了。

在grafana中有没有简单的解决scheme? 我只能说:如果您没有收到超过X秒的指标数据,请中止图表行?

许多集装箱在14:00后退出,但图表仍在继续

更新:升级到最新的Grafana版本,并且将“空值”设置为堆栈和空值中“空值”的值不起作用。

也许这是statsd的问题?

我正在发送数据statsd的forms:

felix.javaclient.machine<number>-<pid>.heap:<heapvalue>|g

这有什么不对吗?

这可能发生2个原因,因为grafana正在使用“已连接”设置为空值,和/或(因为在这里的情况),因为statsd发送当前没有更新的规范的先前看到的值期。

格拉法纳configuration

你会想对你的graphicsconfiguration进行2个调整:

首先进入“显示”选项卡,在“堆栈和空值”下将“空值”更改为“空值”,这将导致Grafana在没有数据的情况下停止显示行。

其次,如果您使用的是图例,则可以进入“图例”选项卡,然后在“隐藏系列”下勾选“仅限于空值”checkbox,这将导致只有图例中显示的项目才会显示在图例中,图表期间的空值。

statsdconfiguration

衡量指标的statsd文件告诉我们:

如果仪表在下次冲洗时没有更新,它将发送前一个值。 通过设置config.deleteGauges ,您可以select不发送任何度量标准

所以,在这种情况下,grafana的变化是不够的,因为石墨中的值实际上并不为空(因为statsd不断发送最后的读数)。 如果将statsdconfiguration更改为具有deleteGauges: true那么statsd将不会发送任何内容,而graphite将包含我们所期望的空值。

石墨笔记

另外,像这样的设置会导致数据文件夹在每次启动容器时创build新系列时不断增长。 你肯定会想在一段时间不活动之后去掉旧系列,以避免填满磁盘。 如果你使用石墨的耳语,可以像cron任务一样简单运行find /var/lib/graphite/whisper/ -name '*.wsp' -mtime +30 -delete删除还没有的耳语文件在过去的30天内进行了修改。

要做到这一点,我会用

 maximumAbove(transformNull(felix.javaclient.*.heap, 0), 0) 

transformNull将获取当前为空的任何数据点,或者在该时间点未被报告,并将其变为0值。

maximumAbove将仅显示在选定时间段内具有大于0的最大值的系列。

使用maximumAbove ,你可以看到所有的历史容器,如果你只想看到当前正在运行的容器,你应该只使用: currentAbove