Telegraf vs vmagent

Сравнение двух решений для мониторинга по snmp в пользу vmagent, но от telegraf совсем отказываться не нужно, т.к. он работает как с victoria-metrics, так и с clickhouse. Vmagent используется вместе с snmp_exporter'ом.

telegraf, snmp plugin vmagent, snmp_exporter
Нет service discovery. Необходимо после изменения списка агентов делать reload telegraf'у. Есть service discovery и file_sd в частности. Для каждого модуля можно создавать файл со списком хостов средствами автоматизации.
Статус опрашиваемых устройств определить нельзя. Можно посмотреть логи об ошибках. Есть ручка curl http://vmagent-host:8429/targets , метрики и официальный dashboard для них с кол-вом targets up/down.
metric_buffer_limit в настройках telegraf определяет размер кэша для хранения метрик при опросе устройств. При недоступности базы метрики хранятся в кэше и при восстановлении связи записываются. При перезапуске telegraf'а, например из-за изменения адреса базы, данные будут потеряны. remoteWrite.tmpDataPath у vmagent определяет каталог для хранения данных при недоступности базы.
На хосте, который будет мониторинть сетевые устройства устанавливается snmp, мибы, telegraf. Указывается одна или две базы, куда будут записываться метрики. Так можно указать для части метрик influxdb, а для других - victoria-metrics, которая поддерживает influx-протокол по умолчанию. На хосте устанавливается snmp_exporter, vmagent. Мибы нужны на хосте с генератором конфигурационного файла snmp.yml.
Интервал опроса указывается в каждом конфигурационном файле, либо глобально. Имеет смысл делать множество файлов, т.к. если плагин не успеет завершить работу в указанный интервал, то данные обо всех устройствах будут потеряны. Когда начинается какая-то проблема, то потеря данных мониторинга делает бессмысленным мониторинг. Необходимо понимать, что устройства отвечают по snmp медленно и необходим компромис между количеством опрашиваемых данных и интервалом опроса. Рекомендуется один интервал для всех метрик. 1 минута - интервал опроса всех устройств по snmp. Если есть что опрашивать за спутниковым каналом связи, то извините, надо ставить отдельный сервер мониторинга. Инициирует обращение vmagent через запрос к snmp_exporter'у с указанием адреса устройства и модуля. Недоступность устройства не влияет на получения результатов опроса от других устройств.
Для каждого вендора или модели оборудования создается отдельный конфигурационный файл для snmp плагина в /etc/telegraf/telegraf.d/. У snmp_exporter один конфигурационный файл, в котором для каждого вендора или модели оборудования описывается модуль. В vmagent'е для каждого модуля свой job.
Добавление тегов влияет на производительность, но рекомендуется для индексации и поиска. Метрика с другим набором лейблов - это другой временной ряд.
В grafana есть конструктор запросов для influxdb, где в качестве условий указываются теги. Необходимо знать функции promql для составления запросов в базу, указывать в запросе специфичные для метрики лейблы.
Функции derivative() или non_negative_derivative() испольуются в grafana для отображения графиков загрузки интерфейсов. Интервал для использования в функциях может совпадать с интервалом опроса устройств. Функции rate() и increase() для счетчиков (counters) 32 и 64 битных. В базе prometheus для rate() необходимо 2.3 точки на интервале. Т.е. при опросе раз в минуту можно задать rate(metric[5m]), но не rate(metric[1m]). В victoria-metrics такого ограничения нет.
Запишет все полученные значения (value) текст, числа, неотфильтрованный мусор в базу influxdb как одну метрику (measurement) с множеством значений и индексов (tag). Есть мибы, например от polycom, где числа описаны как строки. Такое значение можно преобразовать через conversion = "int". В victoria-metrics и prometheus можно записать только числовые значения, а текст только в индексы/лейблы. Одной метрике будет соотвествовать одно значение с набором лейблов. snmp_exporter умеет преобразовывать string через overrides.
Лишние индексы в oid можно ограничить через oid_index_length в inputs.snmp.table.field. Можно настроить фильтрацию через fieldpass, tagexclude, inputs.snmp.tagdrop в конфигурации плагина. В конфигурации vmagent'а необходимо настроить labeldrop в metric_relabel_configs. Есть drop_source_indexes в lookup и ignore overrides в snmp_exporter.
В конфигурации можно использовать oid без мибов в случае inputs.snmp.field. Создать конфигурацию без миба не получится, потому что все индексы - это лейблы.
Необходимы мибы, т.к плагин выполняет snmptranslate при старте и делает проверку oid для таблиц inputs.snmp.table что это действительно таблица. Мибы необходимы только для генератора конфигурации и не нужны на хосте где запущен exporter.