При большом количестве сервером становится неудобно обходить все сервера чтобы просмотреть на них системный журнал и появляется желание системные журналы со всех серверов собрать в одном месте.
В этом случае можно воспользоваться возможностью большинства реализаций syslog-демонов обмениваться информацией с другими syslog-серверами используя стандартный протокол. Далее будет показано как настроить сбор и хранение логов с нескольких серверов на один.
Начальные условия:
- Серая сеть 192.168.2.0/24, в которой у каждого сервера есть IP-адрес.
- Сервер для сбора логов. Имеет адрес 192.168.2.1, работает под управлением Debian и на нём запущен syslog-ng.
- Некоторое количество серверов под управлением Debian, на всех установлен и запущен syslog-ng.
- Некоторое количество серверов под управлением FreeBSD, на всех установлен syslogd.
Переходим к решению задачи. Для начала сконфигурируем syslog-ng на всех серверах под управлением Linux. Для этого нужно добавить в файл /etc/syslog-ng/syslog-ng.conf следующие строки:
# Описываем новое хранилище логов. destination df_remote { udp("192.168.2.1"); }; # Описываем фильтр, определяющий какие именно сообщения будут отсылаться на удалённый сервер. filter f_remote { level(info,notice,warn); }; # Настраиваем логирование выбранной информации на удалённый сервер. log { source(s_all); filter(f_remote); destination(df_remote); };
И перезапускаем syslog-ng:
invoke-rc.d syslog-ng restart
Следующим шагом настраиваем syslogd на серверах под FreeBSD. Здесь всё чуть проще: нужно добавить в файл /etc/syslog.conf строку:
*.* @192.168.2.1
И перезапустить syslogd:
/etc/rc.d/syslogd restart
Теперь остаётся только настроить сервер логов. Ранее, настраивая сбор логов с Wi-Fi точки, мы уже настраивали сбор логов с одного хоста, однако при большом количестве серверов затруднительно прописывать каждый из них отдельно, потому в этот раз поступим немного иначе.
Сейчас мы настроем сбор логов со всех серверов сразу, для этого нужно добавить следующие строки в файл /etc/syslog-ng/syslog-ng.conf на сервере сбора логов:
# Определяем новый источник: сеть. source s_udp { udp(); }; # Описываем фильтр, который будет из всей кучи сообщений выбирать сообщения от хостов из нашей сети. filter f_remote { host("192.168.2.*"); }; # Описываем хранилизе логов. # Логи будут находится в директории /var/log/remote # и иметь имя: <IP-хоста>-<уровень>.log destination df_remote { file("/var/log/remote/$HOST-$LEVEL.log"); }; # Настраиваем логгирование log { source(s_udp); filter(f_remote); destination(df_remote); };
Создаём директорию для логов:
mkdir /var/log/remote
Перезапускаем syslog-ng:
invoke-rc.d syslog-ng restart
На этом настройка заканчивается. Через некоторое время в директории /var/log/remote начнут появляться файлы логов.
Приятной работы!
Anonymous 2024-11-12 22:17:10 (#)