我正在运行一个带有两个容器的吊舱:global-metrics-generator和collectd-statsd。在容器global-metrics-generator中,我以cron的身份运行python脚本,它负责获取k8s集群中的所有豆荚,并将与pod和内存相关的度量推送到localhost:28125,运行在collectd-statsd容器中的k8s进程正在监听这些度量。我在脚本中使用python客户机将这些指标从global-metrics-generator推送到collectd-statsd容器。
我已经使用这个设置近一年了,它一直在无缝工作。但是最近我在我的系统中引入了一个nginx入口荚,尽管我看到python脚本将nginx-ingress pod的cpu/内存度量发送到collectd-statsd容器中的/var/lib/collectd/文件夹中,但是这个度量没有被收集到。对于我的k8s集群中的任何其他吊舱,它都可以正常工作。
奇怪的东西:
当我将nginx-ingress的荚名更改为任何其他名称时,其中没有单词ingress,例如:nginx-ingres(注意单个s),我看到该度量被收集在/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
什么不起作用- [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
我在网上找不到任何与此相关的信息,但“入口”这个词是否保留在收藏/统计文件中?如果是这样的话,那么为什么我能够传递Namespace=nginx-ingress标记和度量呢?
发布于 2021-04-02 08:51:28
其实是我想出来的。有趣的是,这个问题与ingress一词无关。
我们在应用程序中发出的任何度量中都添加了许多自定义维度。with将度量名称和键、值对(维度)与度量一起传递,并将其存储为/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个字符。
我们通过从所有度量中删除一些不必要的自定义标记来解决这个问题。
https://stackoverflow.com/questions/63071258
复制相似问题