
Можно сказать, что logreplica задумывался как более удобный и надежный способ сбора логов в центральное место, нежели способ использования настроек syslog/syslog-ng.
Преимущество logreplica — в простоте конфигурирования: вы единственный раз настраиваете «маску» имен лог-файлов и задаете адреса машин-источников, и в дальнейшем логи, соответствующие маске, автоматически и «на лету» складываются на центральную машину (в том числе если на машинах-источниках появляются новые лог-файлы, неизвестные на момент старта logreplica). При добавлении новой машины на ней не нужно ничего донастраивать: достаточно включить ее имя в конфиг-файл.
Пример конфига /etc/dklab_logreplica.conf
# What directory at the current machine to store logs to. destination = /var/log/cluster # Skip these log files prefixes while storing to destination directory. skip_destination_prefixes = /var/log:/var/lib/pgsql/data/logs # Path to internal state directory (may not change). scoreboard = /var/run/dklab_logreplica.scoreboard # Time interval to sleep before log growth checks. delay = 0.25 # Default user to connect to remote hosts. user = root # What files to monitor at all of logs source machines. [files] /var/log/{messages,maillog} /var/log/httpd/*_log # What hosts to connect to gather logs from. [hosts] first=machine1.example.com second=nobody@machine2.example.com
Как установить и настроить logreplica
На машинах-источниках не нужно ничего настраивать: они сразу же оказываются в строю после прописывания в центральный конфиг-файл. Так что к logreplica можно свободно подключить несколько десятков серверов без их конфигурирования: все настройки располагаются в единственном файле
- Выберите сервер, на которые будут складываться все логи; скопируйте дистрибутив logreplica в
/opt/dklab_logreplica/ . - Скопируйте инит-скрипт
dklab_logreplica.init в/etc/init.d и настройте его автозапуск при загрузке машины (см.chkconfig ,update-rc.d и др. утилиты Linux). - Скопируйте дефолтный конфиг
dklab_logreplica.conf.sample в/etc/dklab_logreplica.conf и измените его согласно вашей системе:- задайте машины, с которых будут собираться логи;
- укажите маски имен лог-файлов, которые нужно мониторить;
- укажите директорию, куда в реальном времени будут копироваться логи.
- Создайте закрытый+открытый ключ при помощи
ssh-keygen -t rsa . Разложите открытый ключ по машинам, откуда будут скачиваться логи:ssh-copy-id root@machine-to-be-pulled . В итоге вы должны получить беспарольный доступ с лог-сервера на все машины-источники, иначе logreplica не сможет работать.
- Теперь запустите
/etc/init.d/dklab_logreplica start — и logreplica начнет отслеживать изменения в лог-файлах на машинах-источниках и складывать данные в директорию назначения.
Проблемы, которые решает logreplica
Предположим, в кластере есть несколько физических или виртуальных машин, выполняющих различные задачи (например, SQL-сервер, web-frontend, балансировщик, почтовый сервер и т. д.). Иногда хочется иметь логи со всех этих машин в едином месте — например, чтобы считать различную статистику или просто удобно (хоть даже и с помощью tail -f) следить за тем, что происходит во всей системе.
Конечно, можно настроить syslog или syslog-ng для передачи всех логов по сети на центральный лог-сервер, однако, если вы так сделаете, то столкнетесь с целым рядом неудобств:
- В случае временных перебоев связи между машинами (такое случается, к сожалению, чаще, чем хотелось бы) куски логов могут потеряться, так что вы иногда будете терять данные.
- Довольно сложно на практике поддерживать конфигурацию syslog или syslog-ng синхронизированной с реальным состоянием дел в кластере: новые машины могут добавляться, набор лог-файлов — меняться и т. д.
- Не все сервисы поддерживают передачу логов в syslog (например, apache и nginx пишут их напрямую в файлы для минимизации задержек). Так что придется использовать именованные каналы (named pipes) для передачи данных в syslog, а значит, конфиги и зависимости будут расти и расти.
- Часто хочется реплицировать лог-файлы на центральную машину по маске, а не жестко указав имя лог-файла. Syslog и syslog-ng этого делать не умеют.
- Наконец, на практике оказывается очень удобно хранить логи не только на центральной машине, но и на той машине, где они создаются (на машине-источнике может при этом настраиваться более узкое «окно ротации»). Так что ваши конфиги syslog и syslog-ng снова растут...
Ссылки: logreplica на dklab.ru, logreplica на GitHub. Пишите в комментариях, если знаете аналоги или имеете другое видение на описанную проблему.