Как использовать rsyslog с более чем одним hostname с помощью Linux Namespaces?

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

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

Вот моя последняя попытка:

У меня открыты два SSH терминала, оба под пользователем.

Перейдите в Терминал 1

me@localhost: sudo unshare --uts /bin/bash
root@localhost: hostname api1
root@localhost: hostname
api1
root@localhost: rsyslogd -n -i /var/run/rsyslogd-child.pid -f /etc/rsyslog.conf &
root@localhost: logger foochild1

Перейдите в Терминал 2

me@localhost: logger fooparent1

Теперь в моем /var/log/syslog обе записи были зарегистрированы с именем хоста из дочернего пространства имен:

Mar  8 22:47:12 api1 root: foochild1
Mar  8 22:47:33 api1 me: fooparent1

Может кто-нибудь предложить мне способ записывать файлы журналов из разных пространств имен, сохраняя при этом имя хоста соответствующего пространства?

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

Для работы с rsyslog и различными именами хостов в различных UTS неймспейсах в Linux важно понимать, как система обрабатывает идентификацию хоста при записи логов. В данном контексте, вы хотите продемонстрировать передачу различных имен хостов из различных неймспейсов, сохраняя их уникальность в системных логах.

Теория

Основой данной задачи является концепция UTS неймспейсов (Unix Timesharing System), которые позволяют создавать изолированные окружения в пределах одной системы Linux, включая уникальную маску имени хоста и доменного имени. Утилита unshare используется для создания дочернего неймспейса с отличными сетевыми параметрами, такими как имя хоста. Важной частью является и настройка rsyslog, который занимается сбором и централизованным хранением логов.

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

Пример

Ваш метод запуска процесса rsyslog в дочернем неймспейсе правильный, но есть некоторые моменты, которые требуют внимания:

  1. Убедитесь, что rsyslogd в обоих неймспейсах, и родительском и дочернем, работают как отдельные процессы и имеют правильные конфигурационные файлы и PID файлы.

  2. Убедитесь, что ваш rsyslog настроен на прием логов из разных источников. Это можно сделать через rsyslog.conf или создав отдельные конфигурации в /etc/rsyslog.d/.

Применение

  1. Настройка и запуск rsyslog в родительском неймспейсе.

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

    service rsyslog start
  2. Использование отдельного процесса rsyslog в дочернем неймспейсе.

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

    sudo unshare --uts --fork /bin/bash
    hostname api1
    rsyslogd -n -i /var/run/rsyslogd-child.pid -f /etc/rsyslog_child.conf &
  3. Настройка конфигурации для дочернего неймспейса:

    Создайте файл конфигурации /etc/rsyslog_child.conf, который будет содержать настройки для логации событий с отдельным именем файла или каталога:

    # rsyslog_child.conf
    $ModLoad imuxsock
    $ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat
    *.info;mail.none;authpriv.none;cron.none /var/log/syslog_child

    Таким образом, вы отдельно маршрутизируете записи дочернего неймспейса в локальный файл.

  4. Тестирование.

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

    • В родительском неймспейсе:

      logger -t parentns "Лог из родительского неймспейса"
    • В дочернем неймспейсе:

      logger -t childns "Лог из дочернего неймспейса"

    Убедитесь, что логи в /var/log/syslog и /var/log/syslog_child отображают правильные имена хостов.

Таким образом, при правильно настроенных конфигурациях и продуманной маршрутизации логов вы сможете добиться различных записей с уникальными именами хостов из разных неймспейсов, что позволит полноценно продемонстрировать и изучить функциональность UTS неймспейсов и rsyslog в контексте Linux систем.

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

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