Агент наблюдения не может прочитать нужные данные
Агенты наблюдения работают от непривилегированного пользователя и потому не видят части системных данных: чужих журналов, содержимого некоторых каталогов, сведений о других процессах. Выдавать агенту права root — плохое решение: он выполняет проверки, приходящие извне.
Вероятные причины
По порядку: сверху то, что встречается чаще.
-
Проверка обращается к файлу, недоступному агенту
Наблюдение за чужим журналом или файлом с закрытыми правами отказывает. Значение показателя становится отказом доступа.
-
Изоляция unit-файла скрывает часть системы
Параметры защиты процессов и каталогов прячут от агента то, что он должен видеть: процессы других служб, системные каталоги.
-
Проверка требует повышения прав
Часть проверок без прав root не работает вовсе. Обычный путь — отдельные разрешения для конкретных команд.
Диагностика
Команды идут в том порядке, в котором их стоит выполнять: каждая следующая проверяет то, что осталось после предыдущей.
Может ли пользователь агента прочитать нужный файл.
sudo -u zabbix test -r /путь/к/файлу && echo чтение есть || echo чтения нетПользователь и параметры изоляции агента.
systemctl show zabbix-agent2 -p User -p ProtectProc -p ProtectSystem 2>/dev/nullОтказы в журнале агента.
journalctl -u zabbix-agent2 -n 30 --no-pager | grep -iE "denied|failed"Решение
Решение своё для каждой причины. Сначала определите, какая из них ваша, — иначе правки наложатся друг на друга.
- Почему происходит
- Наблюдение за чужим журналом или файлом с закрытыми правами отказывает. Значение показателя становится отказом доступа.
- Как проверить
-
Посмотрите проверку и права на файл.
sudo -u zabbix test -r /var/log/myapp/app.log && echo чтение есть || echo чтения нет systemctl show zabbix-agent2 -p User 2>/dev/null
- Как исправить
- Дайте агенту право чтения через группу конкретного файла, а не права на весь каталог. Полные права root агенту не нужны.
- Почему происходит
- Параметры защиты процессов и каталогов прячут от агента то, что он должен видеть: процессы других служб, системные каталоги.
- Как проверить
-
Посмотрите параметры изоляции.
systemctl show zabbix-agent2 -p ProtectProc -p ProtectSystem -p PrivateTmp -p ProcSubset 2>/dev/null
- Как исправить
- Ослабьте конкретный параметр, мешающий проверке, а не всю изоляцию. Чаще всего это видимость чужих процессов.
- Почему происходит
- Часть проверок без прав root не работает вовсе. Обычный путь — отдельные разрешения для конкретных команд.
- Как проверить
-
Посмотрите, какие проверки отказывают.
sudo grep -rhE "^UserParameter" /etc/zabbix/ 2>/dev/null | head journalctl -u zabbix-agent2 -n 20 --no-pager | grep -i denied
- Как исправить
- Разрешите агенту ровно одну нужную команду точным правилом без пароля. Общее разрешение на всё превращает агент в способ получить права root извне.
Пример вывода
Агент не может прочитать журнал чужой службы. Пример показательный: он собран на тестовой машине специально для этой страницы, а не взят из чужого журнала.
zabbix_agent2[6900]: [log] cannot open file "/var/log/myapp/app.log": Permission denied
zabbix_agent2[6900]: item "log[/var/log/myapp/app.log]" became not supported: Permission denied
Связанные ошибки
- Permission denied в журнале службы Отказ в доступе у службы systemd: права на файл, каталоги по пути, пользователь службы, параметры изоляции, SELinux и AppArmor.
- sudo: user is not in the sudoers file Скрипт службы не может выполнить команду через sudo: нет правила, требуется терминал или пароль.
- Обычный пользователь не видит журнал службы journalctl показывает только свои записи: доступ к системному журналу даёт членство в группе.
- Operation not permitted в журнале службы Операция запрещена: не хватает возможностей процесса, мешает seccomp или модуль безопасности. Отличие от Permission denied.
- Read-only file system в журнале службы Служба не может писать: файловая система только для чтения. Разбор: параметры изоляции unit, монтирование ro, ошибки файловой системы.
- status=209/STDOUT в systemd Код 209/STDOUT: systemd не смог настроить стандартный вывод службы. Чаще всего виноват путь в StandardOutput=append: или file:.
- status=210/CHROOT в systemd Код 210/CHROOT: не удалось сменить корневой каталог из RootDirectory= или подключить образ RootImage=.
- status=218/CAPABILITIES в systemd Код 218/CAPABILITIES: не удалось применить набор возможностей процесса из CapabilityBoundingSet= или AmbientCapabilities=.
Источники
-
systemd.exec(5)
ProtectProc=, ProcSubset= и видимость системы для процессов службы. -
Воспроизведено на тестовой машине, systemd 255 (Ubuntu 24.04)
Воспроизведено проверкой файла, недоступного пользователю агента.