linux snmptrapd, как записывать в пользовательский файл журнала или выполнять пользовательскую команду

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

Ubuntu 18.04 и 20.04, snmptrapd, версии около 5.7.3.

События трейп идут в syslog. Отлично.

Как можно сделать так, чтобы файлы журнала шли в пользовательское место, кроме syslog?

logoption или logOption, как видно во многих ответах и учебниках в интернете, не работает в snmptrapd.conf.

Вы можете поставить logoption в snmp.conf, но тогда все журналы snmp идут туда, а не только трейпы. Например, сообщения об ошибках, когда вы запускаете snmpwalk. Я не могу найти способ создать файл журнала ТОЛЬКО для snmp трейпов, полученных snmptrapd.

Я думал, что хитрым обходным путем будет выполнить и обработать трейп, и просто заставить скрипт записывать на диск. Но traphandle, похоже, не передает аргументы?

Что-то вроде :

authCommunity log,execute trap-dat
traphandle default /usr/local/bin/logger.rb

Так что вы хотите, чтобы snmptrapd что-то делал. Как передать аргументы? Как заставить это записывать в пользовательский файл журнала?

Существует один неприятный метод для записи пользовательского файла журнала: изменить или переопределить единицу запуска snmptrapd, например:

/lib/systemd/system/snmptrapd.service или переопределение в /etc/whatever

Что-то вроде этого :

ExecStart=/usr/sbin/snmptrapd -Ln -f -Lf /var/log/snmptrapd.log

Единица запуска / служба systemd – это единственный способ.

ExecStart=/usr/sbin/snmptrapd -Ln -f -Lf /var/log/snmptrapd.log

На CentOS вы можете добавить следующую строку в файл /etc/snmp/snmptrapd.conf

[snmp] logOption f /var/log/snmptrapd.log

Когда selinux установлен в режим принудительного контроля:

chcon -t snmpd_log_t /var/log/snmptrapd.log

Моя конфигурация/опыт (журналирование = работает; пользовательская команда = в работе) с Ubuntu 24.04.1 LTS:

  1. snmpTrapdAddr udp:0.0.0.0:162,udp6:[::]:162
  2. doNotLogTraps no
  3. [snmp] logOption f /var/log/snmptrapd.log

n.3 спасибо = raf

  1. format1 Трейп от %B(%b) данные трейпа: %P; %N; %q; %w; %W\n %v\n\n
  2. format2 Трейп от %B данные трейпа: %P; %N; %q; %w; %W\n %v\n\n
  3. format %Y-%m-%d %H:%M:%S %w от %a: %v
  4. authCommunity log,execute,net example

после перезапуска и проверки статуса этой службы мне пришлось настроить доступ для “Debian-snmp”

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

Для настройки логирования SNMP-трапов в Linux с использованием snmptrapd и его записи в пользовательский лог-файл, нам потребуется произвести некоторые изменения как в конфигурационных файлах SNMP, так и в настройках systemd. На системах Ubuntu 18.04 и 20.04, а также в более новых версиях, вы сможете выполнить следующие шаги, чтобы добиться нужных результатов.

Шаги для записи SNMP-трапов в пользовательский лог-файл:

  1. Редактирование конфигурационного файла snmptrapd.conf:
    Начнем с редактирования основного конфигурационного файла snmptrapd.conf. Вы можете указать, где будет храниться лог-файл (обратите внимание, что это может не работать так же, как в CentOS, но всё же стоит попробовать):

    sudo nano /etc/snmp/snmptrapd.conf

    Добавьте следующую строку для указания лог-файла (это может не поддерживаться во всех версиях):

    logOption f /var/log/snmptrapd.log

    Далее установите права доступа к этому файлу, чтобы убедиться, что snmptrapd может записывать в него логи.

  2. Настройка systemd для snmptrapd:
    Если указание логирования в snmptrapd.conf не сработало, можно внести изменения в конфигурацию службы systemd. Это более надежный способ, чтобы гарантировать, что ваши трапы будут записываться в указанный файл. Вам нужно переопределить настройки службы snmptrapd:

    Сначала создайте или отредактируйте файл переопределения для службы snmptrapd:

    sudo systemctl edit snmptrapd

    В открывшемся редакторе добавьте следующий код:

    [Service]
    ExecStart=
    ExecStart=/usr/sbin/snmptrapd -Ln -f -Lf /var/log/snmptrapd.log

    Этот код сначала очищает (перезаписывает) предыдущую команду ExecStart, а затем задает новый путь для логирования.

  3. Перезагрузка и проверка состояния службы:
    После внесенных изменений не забудьте перезагрузить службу snmptrapd и проверить её состояние:

    sudo systemctl daemon-reload
    sudo systemctl restart snmptrapd
    sudo systemctl status snmptrapd
  4. Настройка обработки трапов с помощью traphandle:
    Вы также упомянули, что хотите выполнить пользовательскую команду при получении трапа. Для этого в snmptrapd.conf можно использовать следующий синтаксис:

    traphandle default /usr/local/bin/logger.rb

    Таким образом, при каждом получении трапа будет вызван ваш скрипт logger.rb. Учтите, что если вы хотите передать аргументы, можно использовать дополнительный подход, используя стандартный ввод (stdin) или записывая данные в файл.

    Однако, как правило, traphandle не поддерживает передачу аргументов непосредственно, поэтому подход с логированием во внешний файл через systemd будет проще и надежнее.

  5. Права доступа и SELinux:
    Если на вашем сервере включен SELinux (хотя это более актуально для CentOS), вам будет необходимо изменить контекст безопасности для вашего лог-файла:

    sudo chcon -t snmpd_log_t /var/log/snmptrapd.log

Заключение:

Следуя указанным шагам, вы сможете успешно перенаправить логи SNMP-трапов в отдельный пользовательский файл и также настроить выполнение пользовательских сценариев. Это решение позволяет вам детально управлять логами снмп и получать необходимую информацию в удобном формате и месте расположения.

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

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