SNMPD: разрешить список определённых сетевых интерфейсов

Вопрос или проблема

У меня есть машина с Ubuntu, на которой работает множество контейнеров Docker. Я также мониторю эту машину с помощью LibreNMS через snmpd.

Моя проблема в том, что контейнеры Docker создают сотни виртуальных сетевых интерфейсов и мостов (из-за количества контейнеров и того факта, что Docker, кажется, создает новые виртуальные сетевые интерфейсы и мосты каждый раз, когда контейнер пересоздается).

Похоже, что snmpd сообщает о всех этих сетевых интерфейсах в LibreNMS, что, во-первых, скрывает тот единственный, который мне важен — физический сетевой интерфейс, а во-вторых, создаёт значительные проблемы с производительностью для LibreNMS. В LibreNMS я могу вручную отключать отдельные порты. Но это похоже на игру в догонялки, поскольку виртуальные сетевые интерфейсы управляются динамически Docker.

Как я могу навсегда отключить опрос виртуальных сетевых интерфейсов? Либо в LibreNMS, или, что еще лучше, сделать так, чтобы snmpd просто их не сообщал?

.

Ответ или решение

Для решения вашей проблемы с мониторингом сетевых интерфейсов Docker-контейнеров на вашем сервере Ubuntu, который наблюдается через snmpd и LibreNMS, можно воспользоваться несколькими подходами.

Фактическая проблема

У вас возникла проблема с тем, что snmpd сообщает о множестве виртуальных сетевых интерфейсов, создаваемых Docker при развертывании контейнеров. Это затрудняет мониторинг единственного важного физического сетевого интерфейса и создает нагрузку на LibreNMS.

Решение через настройку snmpd

Самый эффективный способ минимизировать мониторинг ненужных интерфейсов — это внести изменения в конфигурацию snmpd на вашем сервере.

1. Изменение конфигурации snmpd

  1. Откройте файл конфигурации snmpd:

    sudo nano /etc/snmp/snmpd.conf
  2. Отфильтруйте ненужные интерфейсы. Для этого потребуется использовать директиву pass или скрипт на Perl для исключения интерфейсов. Одним из решений будет специфическая модификация snmpd, нацеленная на фильтрацию по именам интерфейсов (например, все, что не ensXXX или ethXXX):

    pass .1.3.6.1.2.1.2 /bin/bash /path/to/filterInterfaces.sh
  3. Создайте скрипт фильтрации /path/to/filterInterfaces.sh. Это может быть скрипт на bash, который будет игнорировать интерфейсы на основе заданных условий:

    #!/bin/bash
    # Выберите только физические интерфейсы:
    if echo $2 | grep -E "(ens|eth)[0-9]+" > /dev/null; then
       snmpwalk -v 2c -c public localhost $2
    fi
  4. Предоставьте нужные права для файла скрипта:

    chmod +x /path/to/filterInterfaces.sh
  5. Перезапустите snmpd для применения изменений:

    sudo systemctl restart snmpd

Альтернативное решение в LibreNMS

Если вы хотите решить проблему на стороне LibreNMS:

  1. Настройка правил для автоматической игнорирования или фильтрации интерфейсов с использованием встроенных функций LibreNMS. Это может потребовать использования регулярных выражений для фильтрации интерфейсов по их имени.

  2. Полезное использование API для массовой деактивации ненужных интерфейсов (однако это сложнее сделать, когда интерфейсы динамически изменяются).

Таким образом, наиболее оптимальное решение — настроить snmpd для фильтрации только необходимых интерфейсов, что значительно снизит нагрузку и упростит практический мониторинг в LibreNMS.

Оцените материал
Добавить комментарий

Капча загружается...