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

时间:2016-10-24 15:07:04

标签: java docker kubernetes grafana

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

On想要创建一个仪表板,我可以在我的grafana中监视服务的所有实例的堆使用情况。使用模式将指标写入statsd:

<servicename>.<containerid>.<processid>.heapspace效果很好,我可以看到我的图表中的所有堆使用情况。

重新部署后,容器名称会更改,因此新值将添加到现有图表中。我的问题是,旧行继续存在于收到的最后一个值的位置,但容器已经死了。

grafana有什么简单的解决方案吗?我可以这样说:如果您没有收到超过X秒的指标数据,请中止图表行吗?

Many containers exit at 14:00, but the chart continues

更新: 升级到最新的Grafana版本并在Stacking和Null Value中将“null”设置为“Null值”的值不起作用。

也许这是statsd的问题?

我将以以下形式向statsd发送数据:

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

这有什么不对吗?

2 个答案:

答案 0 :(得分:1)

这可能有两个原因,因为grafana正在使用&#34; connected&#34;设置空值和/或(如此处的情况)因为当前期间没有更新时,statsd正在发送先前看到的量表值。

Grafana Config

您希望对图表配置进行2次调整:

首先,转到&#34;显示&#34;选项卡和&#34; Stacking&amp;空值&#34;改变&#34;空值&#34; to&#34; null&#34;,这将导致Grafana在没有系列数据时停止显示行。

其次,如果你正在使用传奇,你可以去传奇&#34;传奇&#34;选项卡和&#34;隐藏系列&#34;检查&#34;只有空值&#34;复选框,如果图表期间的项目具有非空值,则会导致项目仅显示在图例中。

statsd配置

statsd documentation for gauge metrics告诉我们:

  

如果仪表未在下一次冲洗时更新,它将发送   以前的价值。您可以选择不为该仪表发送任何公制,   设置config.deleteGauges

因此,在这种情况下单独改变grafana是不够的,因为石墨中的值实际上不为空(因为statsd不断发送最后一次读数)。如果您将statsd配置更改为deleteGauges: true,则statsd不会发送任何内容,而graphite会包含我们期望的空值。

Graphite Note

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

答案 1 :(得分:0)

为此,我会使用

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

transformNull将获取当前为null或当前未报告的任何数据点,并将其转换为0值。

maximumAbove只显示系列&#39;在所选时间段内,其最大值高于0

使用 maximumAbove ,您可以看到所有历史记录容器,如果您只想查看当前正在运行的容器,您应该只使用:currentAbove < / p>