【问题标题】:Collectd not accepting metrics with nginx-ingress tagCollectd 不接受带有 nginx-ingress 标签的指标
【发布时间】:2020-07-24 09:58:14
【问题描述】:

我正在运行一个带有两个容器的 pod:global-metrics-generatorcollectd-statsd。在容器global-metrics-generator 中,我将python 脚本作为cron 运行,该脚本负责获取k8s 集群中的所有Pod,并将与Pod cpu 和内存相关的指标推送到localhost:28125,@987654326 内运行的collectd 进程正在监听@987654326 @ 容器。我在脚本中使用 python statsd 客户端将这些指标从 global-metrics-generator 推送到 collectd-statsd 容器。

我已经使用这个设置将近 1 年了,它一直在无缝运行。但最近我在我的系统中引入了一个 nginx-ingress pod,尽管我看到 python 脚本将 nginx-ingress pod 的 cpu/内存指标发送到 collectd,但该指标并未收集在 collectd-statsd 容器中的 /var/lib/collectd/ 文件夹中.对于我的 k8s 集群中的任何其他 pod,它都按预期工作。

奇怪的事情:

当我将 nginx-ingress 的 pod 名称更改为任何其他名称以使其中没有单词 ingress 例如:nginx-ingres(注意单个 s)时,我看到该指标被收集在 @ 987654335@文件夹。

带有自定义标签的最终指标的结构如下所示:

什么有效 - [container=nginx-ingres,name=nginx-ingres-6bf8b67bb7-ndmjn,replicaset=nginx-ingres-6bf8b67bb7,ip=100.101.28.65,host_ip=10.36.40.229,Namespace=nginx-ingress]container.cpu.usage

什么不起作用 - [container=nginx-ingress,name=nginx-ingress-599c78d7b6-psxns,replicaset=nginx-ingress-599c78d7b6,ip=100.102.33.199,Namespace=nginx-ingress,host_ip=10.36.40.170]container.cpu.usage

我在网上找不到与此相关的任何内容,但在 collectd/statsd 中保留了 ingress 这个词吗?如果是这样,那么知道为什么我能够将Namespace=nginx-ingress 标记与指标一起传递?

【问题讨论】:

  • 有趣的问题。显然ingress 可能是像here 这样的保留字,其中ingress(作为入站的同义词)用于度量名称。但这只是我的猜测。如果文档中没有提到,可能只能通过分析其代码找到答案。你也可以考虑在你正在使用的这个特定项目的 GitHub 上创建一个新问题。但有趣的是ingres 有效而ingress 无效。 :)

标签: kubernetes nginx-ingress statsd amazon-eks collectd


【解决方案1】:

其实我想通了。有趣的是,这个问题与ingress这个词无关。

我们为从应用程序发出的任何指标添加了许多自定义维度。 Collectd 将与度量一起传递的度量名称和键、值对(维度)连接在一起,并将其作为文件存储在 /var/lib/collectd/ 目录中,例如[container=nginx-ingres,name=nginx-ingres-6bf8b67bb7-ndmjn,replicaset=nginx-ingres-6bf8b67bb7,ip=100.101.28.65,host_ip=10.36.40.229,Namespace=nginx-ingress]container.cpu.usage。 这些文件包含发出的指标的实际值。由于文件名中包含所有维度,因此文件名的长度通常很长。

Linux 的文件名长度限制为 255 个字符。阅读:https://unix.stackexchange.com/questions/32795/what-is-the-maximum-allowed-filename-and-folder-size-with-ecryptfs。由于我们将维度 container=nginx-ingress 以及一些已经存在的维度添加到我们的所有指标中,我们最终达到了 256 个字符。在了解文件名长度限制之前调试问题时,我怀疑ingress 可能是保留字,因此尝试使用ingres,它确实有效,但它所做的只是将文件名的长度减少到 255 个字符。

我们通过从所有指标中删除一些不必要的自定义标签解决了这个问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-10-25
    • 1970-01-01
    • 2022-01-02
    • 2022-08-15
    • 2016-05-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多