Собранные не принимающие метрики с тегом nginx-ingress

Я использую модуль с двумя контейнерами: global-metrics-generator и collectd-statsd. В контейнере global-metrics-generator я запускаю скрипт python в качестве cron, который отвечает за выборку всех модулей в кластере k8s и отправку показателей, связанных с процессором модуля и памятью, в localhost:28125, который прослушивается процессом collectd, запущенным внутри контейнера collectd-statsd. Я использую в своем скрипте клиент python statsd для передачи этих показателей из контейнера global-metrics-generator в контейнер collectd-statsd.

Я использую эту установку почти 1 год, и она работает без проблем. Но недавно я представил в своей системе модуль nginx-ingress, и каким-то образом, хотя я вижу, что скрипт python отправляет метрики процессора / памяти для модуля nginx-ingress в collectd, метрика не собирается внутри папки /var/lib/collectd/ в контейнере collectd-statsd. Для любого другого модуля в моем кластере 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

Я не смог найти в Интернете ничего, связанного с этим, но зарезервировано ли слово ingress в collectd / statsd? Если да, то есть идеи, почему я могу передать тег Namespace=nginx-ingress вместе с метрикой?


person TheShobhit147    schedule 24.07.2020    source источник
comment
Интересный вопрос. Очевидно ingress могло быть зарезервированным словом вроде здесь где ingress (как синоним входящего) используется в названиях показателей. Но это только мое предположение. Если он не упоминается в документации, возможно, вы сможете найти ответ, только проанализировав его код. Вы также можете подумать о создании новой проблемы на GitHub для этого конкретного проекта, который вы используете. Но есть интересные наблюдения, которые ingres работают, а ingress нет. :)   -  person mario    schedule 30.07.2020


Ответы (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 символов.

Мы решили проблему, удалив ненужные пользовательские теги из всех наших показателей.

person TheShobhit147    schedule 02.04.2021