Есть ли способ отправить логи в определённый каталог с помощью syslog-ng?

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

Я хотел бы отправить логи каждого приложения на удаленный коллектор с помощью syslog-ng.

Если у меня есть Apache, я хотел бы, чтобы логи Apache отправлялись на мой удаленный коллектор в файл /var/log/apache.log.

Я не смог ничего найти об этом. Я знаю, что это возможно с rsyslog, но единственное, что я могу сделать здесь, это отправить все логи вместе с:

destination remote { network("<адрес_коллектора>" transport("udp") port(514)); };

Чтобы собрать логи из файлов с помощью syslog-ng, вам нужно создать источники файлов и добавить их в лог-выражение. Что-то вроде этого:

source s_apache {
    file("/var/log/apache.log");
};
log {
    source(s_apache); destination(remote);
};

Чтобы собрать логи и из других файлов, определите дополнительные источники и добавьте их в лог-выражение. Если у вас есть приложение, которое записывает в несколько разных лог-файлов (например, в файлы логов с меткой времени), вы можете использовать источник wildcard-file. Ознакомьтесь с документацией для получения подробной информации: https://www.syslog-ng.com/technical-documents/doc/syslog-ng-open-source-edition/3.21/administration-guide/16#TOPIC-1180423

Я думаю, что вы можете использовать тот же подход, что и в Syslog-ng – Отправить имя файла от клиента к серверу.

Конфигурация на стороне клиента в syslog-ng –

file("/var/log/shell.log" log_prefix("shell: "));

Конфигурация на стороне сервера в syslog-ng –

filter f_shell { match("shell" value("MSGHDR")); };

destination d_shell { file("/var/log/syslog-ng/shell.log"); };

log { source(demo_tls_src); filter(f_shell); destination(d_shell); flags(final); };

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

Вопрос о том, как отправить логи приложений в конкретный каталог с использованием syslog-ng, является актуальной задачей для многих администраторов систем. Это позволяет централизовать управление логами и упрощает их анализ и мониторинг. В данной статье мы детализируем процесс настройки отправки логов, например, для Apache, на удаленный коллектор с использованием syslog-ng.

Шаг 1: Установка syslog-ng

Прежде всего, убедитесь, что у вас установлена актуальная версия syslog-ng. Вы можете установить ее, используя пакетный менеджер вашей операционной системы. Например, для дистрибутивов на основе Debian это можно сделать командой:

sudo apt-get install syslog-ng

Шаг 2: Настройка клиента

На стороне клиента (где находятся ваши приложения, генерирующие логи), вам необходимо настроить syslog-ng на считывание временного лог-файла приложения и отправку его содержимого на удаленный сервер.

  1. Конфигурация источников:

    Определите источник для Apache. В конфигурационном файле syslog-ng (обычно это /etc/syslog-ng/syslog-ng.conf) добавьте следующий код:

    source s_apache {
       file("/var/log/apache.log" log_prefix("apache: "));
    };

    Здесь мы используем log_prefix, чтобы обозначить каждый лог-сообщение, приходящее из Apache, что может быть полезно для фильтрации на стороне сервера.

  2. Настройка назначения:

    Укажите удаленный сервер, куда будут отправляться журналы:

    destination remote {
       udp("<collector_address>" port(514));
    };

    Замените <collector_address> на фактический IP-адрес или hostname вашего удаленного коллектора.

  3. Создание лог-выражения:

    В завершение свяжите источник и направление в лог-выражении:

    log {
       source(s_apache);
       destination(remote);
       flags(final);
    };

Шаг 3: Настройка сервера

На стороне сервера, принимающего логи, необходимо настроить syslog-ng для их обработки.

  1. Определение источника:

    Добавьте источник, чтобы syslog-ng мог получать данные от клиента:

    source s_network {
       udp(port(514));
    };
  2. Фильтрация и направление логов:

    Чтобы логи от Apache помещались в определенный файл, добавьте фильтрацию и определите, куда отправлять эти логи:

    destination d_apache {
       file("/var/log/syslog-ng/apache.log");
    };
    
    filter f_apache { match("apache" value("MSGHDR")); };
    
    log {
       source(s_network);
       filter(f_apache);
       destination(d_apache);
       flags(final);
    };

Шаг 4: Перезапуск syslog-ng

После выполнения всех изменений вам необходимо перезапустить службу syslog-ng, чтобы конфигурация вступила в силу:

sudo systemctl restart syslog-ng

Заключение

Настройка syslog-ng для отправки логов приложений, таких как Apache, в конкретный каталог на удаленном коллекторе не только возможна, но и проста. Используя подход описанный выше, вы сможете легко централизовать управление логами различных приложений, что улучшит мониторинг и анализ ваших систем. Рассматривайте этот процесс как инвестицию в лучшую организацию вашей инфраструктуры, что в конечном итоге повлияет на эффективность вашей работы.

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

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