Кастомное правило rsyslog не записывает в конкретный файл в Yocto Project на Ubuntu

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

Я работаю над проектом Yocto, который работает на Ubuntu, и настроил rsyslog для маршрутизации лог-сообщений от конкретной программы в пользовательский лог-файл. Однако сообщения, похоже, не записываются в соответствии с моим правилом. У меня есть правило в отдельном конфигурационном файле в /etc/rsyslog.d/, которое соответствует имени программы “diagnostic” и должно записывать эти сообщения в /var/log/myApp-diagnostics.log. Несмотря на то, что правило помещено в файл, который должен загружаться первым, сообщения все равно попадают в стандартные логи, такие как user.log.

У меня уже сделано:

  • Создан файл в /etc/rsyslog.d/ с названием 00-myApp-rsyslog.conf, чтобы убедиться, что он загружается первым.
  • Правило установлено для соответствия имени программы и остановки дальнейшей обработки:
if $programname == 'diagnostic' then /var/log/myApp-diagnostics.log
& stop
  • Файл имеет права доступа, позволяющие rsyslog записывать в него.

  • Тестирование – использование команды logger с -p local0.info -t diagnostic “Тестовое сообщение для логов диагностики” работает как ожидалось, и сообщение корректно записывается в /var/log/myApp-diagnostics.log.

Наблюдаемый вывод логов:

С "diagnostic":

 ```2024-10-03T15:40:12.400343+00:00 qemux86-64 Тестовое сообщение: Диагностическое от some_function```

С “iagnostic” (Когда имя программы указано неверно):

 <12>1 2024-10-03T15:40:21.090797+00:00 hostname myApp 111 iagnostic - filename.py:56 INFO: Тестовое сообщение: Диагностическое от some_function

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

Настройка пользовательских правил rsyslog для логирования в Yocto Project на Ubuntu

Введение

При работе с rsyslog для маршрутизации логов в пользовательские файлы может возникнуть ряд проблем, особенно в контексте использования Yocto Project на Ubuntu. В этом ответе мы рассмотрим, как правильно настроить rsyslog для логирования сообщений из программы с именем "diagnostic" в файл /var/log/myApp-diagnostics.log, а также решение возникших проблем.

Шаги по настройке

  1. Создание конфигурационного файла

    Вы уже создали файл /etc/rsyslog.d/00-myApp-rsyslog.conf. Это правильный подход для обеспечения того, чтобы конфигурация загружалась первой. Убедитесь, что в файле содержатся следующие строки:

    if $programname == 'diagnostic' then /var/log/myApp-diagnostics.log
    & stop

    Это правило должно перехватывать все сообщения, приходящие от программы "diagnostic", и записывать их в указанный файл, останавливая дальнейшую обработку.

  2. Проверка прав доступа к файлу логов

    Убедитесь, что у пользователя, под которым работает rsyslog, есть права на запись в файл /var/log/myApp-diagnostics.log. Это можно сделать с помощью следующих команд:

    sudo touch /var/log/myApp-diagnostics.log
    sudo chown syslog:adm /var/log/myApp-diagnostics.log
    sudo chmod 664 /var/log/myApp-diagnostics.log

    Здесь мы создаем файл, устанавливаем права владельца и выставляем необходимые права доступа.

  3. Проверка правильности настройки программы

    Обратите внимание, что лидер сообщений вашей программы должен точно соответствовать имени программы в конфигурации. Например, если имя программы, генерирующей логи, отображается как "diagnostic", это именно то, что должно использоваться в условии конфигурации. Ваш тест с использованием команды logger подтверждает, что правило работает, когда имя программы указано корректно.

  4. Служба и перезапуск rsyslog

    После внесения всех изменений необходимо перезапустить rsyslog, чтобы применить новые правила. Это можно сделать с помощью следующих команд:

    sudo systemctl restart rsyslog

    Также стоит проверить статус службы на наличие ошибок:

    sudo systemctl status rsyslog
  5. Отладка

    Если сообщения по-прежнему не попадают в ваш файл, важно проверить, каким именно образом программа генерирует логи. Вы заметили, что сообщения от "diagnostic" записываются в лог, когда имя программы неверное (например, "iagnostic"). Это может указывать на то, что программа не всегда использует правильное имя при отправке логов.

    Вы можете настроить дополнительное логирование в качестве отладочной меры. Используйте так называемую "debug" опцию в rsyslog. Для этого добавьте следующие строки в ваш конфигурационный файл:

    global(
       debugMode="on"
    )

    После этого перезапустите службу и проверяйте логи в /var/log/syslog для получения сообщений об ошибках или предупреждениях от rsyslog.

  6. Итоговое тестирование

    После всех изменений и корректировок, протестируйте свою систему. Запустите вашу программу и убедитесь, что записи логируются в указанный файл. При необходимости проведите дальнейшую отладку, проверяя все этапы от генерации логов до их обработки rsyslog.

Заключение

Настройка rsyslog для логирования сообщений в пользовательские файлы может потребовать внимания к деталям. Важно удостовериться, что все элементы правильно сконфигурированы, включая права доступа, имена программ и синтаксис правил. Следуя представленным шагам, вы сможете успешно решить проблемы с логированием в вашем проекте Yocto на Ubuntu.

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

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