Вопрос или проблема
SNMP, похоже, не регистрирует директиву конфигурации pass-through, вот мой файл конфигурации:
snmpd.conf
###########################################################################
#
# snmpd.conf Пример файла конфигурации для настройки агента Net-SNMP ('snmpd') Смотрите man-страницу snmpd.conf(5) для получения дополнительных сведений
#
###########################################################################
# РАЗДЕЛ: Настройка системной информации
#
# syslocation: [обычно физическое] местоположение системы.
# Обратите внимание, что установка этого значения здесь означает, что при попытке
# выполнить операцию snmp SET для переменной sysLocation.0 агент
# вернет код ошибки "notWritable". То есть, включение
# этого токена в файл snmpd.conf отключит запись в
# переменную.
# аргументы: location_string
sysLocation Sitting on the Dock of the Bay
sysContact Me <[email protected]>
# sysservices: Подходящее значение для объекта sysServices.
# аргументы: sysservices_number
sysServices 72
###########################################################################
# РАЗДЕЛ: Режим работы агента
#
# Этот раздел определяет, как агент будет работать, когда он
# запущен.
# master: Должен ли агент работать как главный агент или нет.
# В настоящее время единственный поддерживаемый тип главного агента для этого токена
# - "agentx".
#
# аргументы: (on|yes|agentx|all|off|no)
master agentx
# agentaddress: IP-адрес и номер порта, на которых агент будет прослушивать.
# По умолчанию агент прослушивает любой и весь трафик с любого
# интерфейса на стандартном SNMP порту (161). Это позволяет вам
# указать, на каком адресе, интерфейсе, типе трансорта и портах вы
# хотите, чтобы агент прослушивал. Множественные определения этого токена
# объединяются (с помощью ':'s).
# аргументы: [transport:]port[@interface/address],...
agentaddress 161
###########################################################################
# РАЗДЕЛ: Настройка контроля доступа
#
# Этот раздел определяет, кто имеет право общаться с вашим
# запущенным агентом snmp.
# Views
# аргументы viewname included [oid]
# только группы system + hrSystem
view systemonly included .1.3.6.1.2.1.1
view systemonly included .1.3.6.1.2.1.25.1
# rocommunity: имя сообщества SNMPv1/SNMPv2c только для чтения
# аргументы: community [default|hostname|network/bits] [oid | -V view]
# Доступ только для чтения для всех к представлению systemonly
rocommunity public
#rocommunity public default -V systemonly
#rocommunity6 public default -V systemonly
#rocommunity public localhost
#view all included .1.3.6.1.4.1
#extend .1.3.6.1.4.1.9999.1 checkcommand /bin/sh /home/pi/snmp/snmp-cpu-temp
# SNMPv3 не использует сообщества, а пользователей с (опционально) строкой
# аутентификации и шифрования. Этот пользователь должен быть создан
# с тем, что они могут видеть с помощью строк rouser/rwuser в этом файле.
#
# createUser username (MD5|SHA|SHA-512|SHA-384|SHA-256|SHA-224) authpassphrase [DES|AES] [privpassphrase]
# например.
# createuser authPrivUser SHA-512 myauthphrase AES myprivphrase
#
# Это должно быть помещено в /var/lib/snmp/snmpd.conf
#
# rouser: имя пользователя SNMPv3 только для чтения
# аргументы: username [noauth|auth|priv [OID | -V VIEW [CONTEXT]]]
#rouser authPrivUser authpriv -V systemonly
#rouser authOnlyUser
#
# Мониторинг процессов
#
# По крайней мере один процесс 'mountd'
proc mountd
# Не более 4 процессов 'ntalkd' - 0 допустимо
proc ntalkd 4
# По крайней мере один процесс 'sendmail', но не более 10
proc sendmail 10 1
# Пройдите по UCD-SNMP-MIB::prTable, чтобы увидеть полученный вывод
# Обратите внимание, что эта таблица будет пустой, если в файле snmpd.conf нет записей "proc"
#
# Мониторинг диска
#
# Требуется 10 МБ на корневом диске, 5% свободного места на /var, 10% свободного места на всех других дисках
disk / 10000
disk /var 5%
includeAllDisks 10%
# Пройдите по UCD-SNMP-MIB::dskTable, чтобы увидеть полученный вывод
# Обратите внимание, что эта таблица будет пустой, если в файле snmpd.conf нет записей "disk"
#
# Нагрузка системы
#
# Неприемлемый средний уровень нагрузки за 1, 5 и 15 минут
load 12 10 5
# Пройдите по UCD-SNMP-MIB::laTable, чтобы увидеть полученный вывод
# Обратите внимание, что эта таблица *будет* заполнена, даже без записи "load" в файле snmpd.conf
###############################################################################
#
# АКТИВНЫЙ МОНИТОРИНГ
#
# отправка SNMPv1 ловушек
trapsink localhost public
# отправка SNMPv2c ловушек
#trap2sink localhost public
# отправка SNMPv2c INFORM'ов
#informsink localhost public
# Обратите внимание, что вы обычно хотите только *одну* из этих трех строк
# Раскомментирование двух (или всех трех) приведет к множественным копиям каждого уведомления.
#
# Событийный MIB - автоматическая генерация предупреждений
#
# Не забудьте активировать строки 'createUser' выше
iquerySecName internalUser
rouser internalUser
# генерировать ловушки при условиях ошибки UCD
#defaultMonitors yes
# генерировать ловушки при linkUp/Down
linkUpDownNotifications yes
###############################################################################
#
# РАСШИРЕНИЕ АГЕНТА
#
#
# Произвольные команды расширения
#
extend test1 /bin/echo Hello, world!
extend-sh test2 echo Hello, world! ; echo Hi there ; exit 35
pass .1.3.6.1.2.1.25.1.8 /bin/sh /home/pi/snmp/snmp-cpu-temp
# включить все файлы *.conf в директории
includeDir /etc/snmp/snmpd.conf.d
/etc/snmp/snmpd.conf.d
пуст, я перезапустил сервис snmpd.
$ snmpget -v 2c localhost -c public .1.3.6.1.2.1.25.1.8
iso.3.6.1.2.1.25.1.8 = Нет такого экземпляра, который в настоящее время существует по этому OID
$ sh /home/pi/snmp/snmp-cpu-temp -g .1.3.6.1.2.1.25.1.8
.1.3.6.1.2.1.25.1.8
gauge
62322
Есть ли у этой системы SELinux или AppArmor? Если да, то могут быть правила, препятствующие выполнению демонов, таких как snmpd
, скриптов в домашних директориях пользователей.
Попробуйте переместить ваш скрипт в /usr/local/bin/snmp-cpu-temp
и пометить его как исполняемый:
chmod a+x /usr/local/bin/snmp-cpu-temp
Затем измените вашу строку pass
в snmpd.conf
на:
pass .1.3.6.1.2.1.25.1.8 /usr/local/bin/snmp-cpu-temp
Ответ или решение
Разбор проблемы с SNMP: Настройки и проблемы с директивой pass-through в snmpd.conf
Введение
В процессе настройки SNMP (Simple Network Management Protocol) на вашем сервере возникла проблема с регистрацией директивы pass-through в конфигурационном файле snmpd.conf
. Это может привести к отсутствию данных при запросах к определенным OID (Object Identifier). В этом ответе мы рассмотрим возможные причины этой проблемы и предложим шаги для её решения.
Контекст проблемы
На основании вашего описания, вы используете следующую директиву в вашем файле snmpd.conf
:
pass .1.3.6.1.2.1.25.1.8 /bin/sh /home/pi/snmp/snmp-cpu-temp
Вы также указали, что скрипт в /home/pi/snmp/snmp-cpu-temp
возвращает данные при его запуске из командной строки, но SNMP-запрос с использованием snmpget
возвращает ошибку:
No Such Instance currently exists at this OID
Возможные причины проблемы
-
Права доступа и местоположение скрипта:
- Если скрипт находится в директории пользователя, вполне вероятно, что
snmpd
не имеет необходимых прав для его выполнения. На системах с SELinux или AppArmor могут быть установлены правила, ограничивающие выполнение скриптов из пользовательских директорий.
- Если скрипт находится в директории пользователя, вполне вероятно, что
-
Неправильный OID:
- Убедитесь, что указанный OID
.1.3.6.1.2.1.25.1.8
корректен и соответствует OID, к которому вы хотите получить доступ. Возможно, стоит проверить в MIB-файлах, что данный OID действительно зарегистрирован и ожидает вызов.
- Убедитесь, что указанный OID
-
Обновление конфигурации:
- Проверьте, правильно ли перезапущен
snmpd
. Если конфигурация изменилась, необходимо перезапустить службу, чтобы изменения вступили в силу.
- Проверьте, правильно ли перезапущен
Рекомендации по решению проблемы
-
Перемещение скрипта:
- Переместите ваш скрипт в директорию с более широкими правами доступа, например, в
/usr/local/bin
. Убедитесь, что вы присвоили ему права на выполнение:
mv /home/pi/snmp/snmp-cpu-temp /usr/local/bin/ chmod a+x /usr/local/bin/snmp-cpu-temp
Измените вашу директиву
pass
следующим образом:pass .1.3.6.1.2.1.25.1.8 /usr/local/bin/snmp-cpu-temp
- Переместите ваш скрипт в директорию с более широкими правами доступа, например, в
-
Проверка конфигурации SELinux/AppArmor:
- Убедитесь, что SELinux или AppArmor не блокируют выполнение вашего скрипта. Возможно, потребуется на время отключить SELinux для тестирования:
setenforce 0 # Временно отключить SELinux
После чего попробуйте повторить запрос:
snmpget -v 2c localhost -c public .1.3.6.1.2.1.25.1.8
-
Логи и отладка:
- Проверьте логи
snmpd
, обычно они находятся в/var/log/snmpd.log
или/var/log/syslog
, чтобы выяснить, почему не обрабатывается директиваpass
.
- Проверьте логи
-
Тестирование:
- После внесения всех изменений, протестируйте настройки с помощью:
snmpget -v 2c localhost -c public .1.3.6.1.2.1.25.1.8
Убедитесь, что теперь вы получаете ожидаемый результат.
Заключение
Проблема с регистрацией директивы pass-through
в snmpd.conf
может быть вызвана различными факторами, такими как права доступа, местоположение скрипта или конфигурационные ошибки. Следуя приведенным рекомендациям, вы сможете устранить возникшую проблему и настроить SNMP для корректной работы с вашими пользовательскими скриптами. Если проблема сохраняется, возможно, стоит обратиться к документации по snmpd
или сообществу для дальнейшей диагностики.