Kubernetes,Java和Grafana – 如何仅显示正在运行的容器?
我正在设置一个设置,在kubernetes平台上托pipe的docker容器中运行我们的Java服务。
在想要创build一个仪表板,我可以监视在我的graphics服务的所有实例的堆使用情况。 将度量标准写入模式:
<servicename>.<containerid>.<processid>.heapspace
运行良好,我可以在图表中看到所有堆用法。
重新部署后,容器名称会更改,所以新值将添加到现有graphics中。 我的问题是,旧线路继续存在于收到的最后一个值的位置,但是集装箱已经死了。
在grafana中有没有简单的解决scheme? 我只能说:如果您没有收到超过X秒的指标数据,请中止图表行?
更新:升级到最新的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