首页 文章

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

提问于
浏览
3

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

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

<servicename>.<containerid>.<processid>.heapspace 运行良好,我可以看到我的图表中的所有堆使用情况 .

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

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

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

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

也许这是statsd的问题?

我正在以下列形式向statsd发送数据:

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

这有什么不对吗?

2 回答

  • 0

    这可能由于两个原因而发生,因为grafana使用“连接”设置来表示空值,和/或(如此处的情况)因为当当前没有更新时,statsd正在发送先前看到的值的值期 .

    Grafana Config

    您需要对图表配置进行2次调整:

    首先,转到“显示”选项卡,在“堆叠和空值”下将“空值”更改为“空”,这将导致Grafana在没有系列数据时停止显示行 .

    其次,如果您正在使用图例,则可以转到“图例”选项卡,然后在“隐藏系列”下选中“仅使用空值”复选框,这将导致项目仅在图例中显示为非图形期间的空值 .

    statsd配置

    statsd documentation for gauge metrics告诉我们:

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

    所以,单独的grafana变化实际上并不是真的(因为statsd不断发送最后一个读数) . 如果您将statsd配置更改为 deleteGauges: true ,则statsd将不会发送任何内容,而graphite将包含我们期望的空值 .

    石墨注

    作为旁注,这样的设置将导致您的数据文件夹在每次启动容器时创建新系列时不断增长 . 你'll definitely want to look into removing old series after some period of inactivity to avoid filling up the disk. If you'使用带有耳语的石墨,这可以像运行 find /var/lib/graphite/whisper/ -name '*.wsp' -mtime +30 -delete 的cron任务一样简单,以删除过去30天内未修改的耳语文件 .

  • 1

    要做到这一点,我会用

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

    transformNull将获取当前为空的任何数据点,或者该时刻未报告的数据点,并将其转换为 0 值 .

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

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

相关问题