Вопрос или проблема
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:
- snmpTrapdAddr udp:0.0.0.0:162,udp6:[::]:162
- doNotLogTraps no
- [snmp] logOption f /var/log/snmptrapd.log
n.3 спасибо = raf
- format1 Трейп от %B(%b) данные трейпа: %P; %N; %q; %w; %W\n %v\n\n
- format2 Трейп от %B данные трейпа: %P; %N; %q; %w; %W\n %v\n\n
- format %Y-%m-%d %H:%M:%S %w от %a: %v
- authCommunity log,execute,net example
после перезапуска и проверки статуса этой службы мне пришлось настроить доступ для “Debian-snmp”
Ответ или решение
Для настройки логирования SNMP-трапов в Linux с использованием snmptrapd и его записи в пользовательский лог-файл, нам потребуется произвести некоторые изменения как в конфигурационных файлах SNMP, так и в настройках systemd. На системах Ubuntu 18.04 и 20.04, а также в более новых версиях, вы сможете выполнить следующие шаги, чтобы добиться нужных результатов.
Шаги для записи SNMP-трапов в пользовательский лог-файл:
-
Редактирование конфигурационного файла snmptrapd.conf:
Начнем с редактирования основного конфигурационного файлаsnmptrapd.conf
. Вы можете указать, где будет храниться лог-файл (обратите внимание, что это может не работать так же, как в CentOS, но всё же стоит попробовать):sudo nano /etc/snmp/snmptrapd.conf
Добавьте следующую строку для указания лог-файла (это может не поддерживаться во всех версиях):
logOption f /var/log/snmptrapd.log
Далее установите права доступа к этому файлу, чтобы убедиться, что snmptrapd может записывать в него логи.
-
Настройка 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
, а затем задает новый путь для логирования. -
Перезагрузка и проверка состояния службы:
После внесенных изменений не забудьте перезагрузить службу snmptrapd и проверить её состояние:sudo systemctl daemon-reload sudo systemctl restart snmptrapd sudo systemctl status snmptrapd
-
Настройка обработки трапов с помощью traphandle:
Вы также упомянули, что хотите выполнить пользовательскую команду при получении трапа. Для этого вsnmptrapd.conf
можно использовать следующий синтаксис:traphandle default /usr/local/bin/logger.rb
Таким образом, при каждом получении трапа будет вызван ваш скрипт
logger.rb
. Учтите, что если вы хотите передать аргументы, можно использовать дополнительный подход, используя стандартный ввод (stdin) или записывая данные в файл.Однако, как правило,
traphandle
не поддерживает передачу аргументов непосредственно, поэтому подход с логированием во внешний файл через systemd будет проще и надежнее. -
Права доступа и SELinux:
Если на вашем сервере включен SELinux (хотя это более актуально для CentOS), вам будет необходимо изменить контекст безопасности для вашего лог-файла:sudo chcon -t snmpd_log_t /var/log/snmptrapd.log
Заключение:
Следуя указанным шагам, вы сможете успешно перенаправить логи SNMP-трапов в отдельный пользовательский файл и также настроить выполнение пользовательских сценариев. Это решение позволяет вам детально управлять логами снмп и получать необходимую информацию в удобном формате и месте расположения.