Настройка syslog-ng для централизованного сбора логов

Тема в разделе "Администрирование систем и сетей", создана пользователем AnGel, 10 мар 2018.

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

    А теперь о нарушениях за которые я собственноручно буду выдавать блокировки до конца месяца или перманент:
    — оскорбления участников форума - до конца месяца/перманент
    — создание тем в разделах, которые не предназначены для этого или не отвечают требованиям - удаление темы, блокировка до конца месяца
    — флуд/спам/реклама - перманент
    — идиотизм - до конца месяца
    — мультиаккаунты - перманент
    — временная почта/рандом ник - перманент (нам не нужен биомусор)
    — остальные правила - блокировка до месяца

    Все что не запрещено — разрешено, но (!), если это не противоречит здравому смыслу. Оценка здравого смысла остается за администрацией ресурса.
    P.S. мне глубоко наплевать, сколько останется активных пользователей, я вижу серьезную проблему в отношении к правилам как пользователей, так и нашего состава модераторов, и мы это будет искоренять.
  1. AnGel

    AnGel Администратор
    Команда форума

    27 авг 2015
    2.936
    2.019
    Telegram:
    #1 AnGel, 10 мар 2018
    Последнее редактирование: 10 мар 2018
    Мне понадобилось организовать сервер для сбора логов с удаленных устройств. Это могут быть серверы, сетевое оборудование, либо что-то еще, что поддерживает логирование в формате syslog. Я решил использовать не стандартный для большинства дистрибутивов rsyslog, а установить syslog-ng, потому что мне он показался более удобным и простым в настройке.

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

    Настраивать сервер сбора логов будем на системе CentOS 7. Для небольшого количества устройств, нагрузка на сервер будет незначительная, поэтому имеет смысл размещать сервер на виртуальной машине.

    С установкой нет ничего сложного. Установить syslog-ng можно одной командой:
    yum install -y syslog-ng

    Сразу переходим к настройке. Файл конфигурации располагается по адресу /etc/syslog-ng/syslog-ng.conf. Чтобы сервер начал принимать логи с удаленного устройства, его необходимо прописать в конфиг. Делается это просто. В самый конец конфигурационного файла добавляем информацию о новом устройстве:
    destination d_xs-zabbix { file("/var/log/!remote/xs-zabbix.log"); };
    filter f_xs-zabbix { netmask("10.1.3.29/255.255.255.255"); };
    log { source(net); filter(f_xs-zabbix); destination(d_xs-zabbix); };


    d_xs-zabbix    Название назначения для записи лога по адресу /var/log/!remote/xs-zabbix.log
    f_xs-zabbix    Название фильтра по адресу сервера источника.
    10.1.3.29    Адрес сервера источника логов

    Соответственно для второго сервера нужно добавить еще 3 строки, например так:
    destination d_xs-web { file("/var/log/!remote/xs-web.log"); };
    filter f_xs-web { netmask("10.1.3.38/255.255.255.255"); };
    log { source(net); filter(f_xs-web); destination(d_xs-web); };

    И так далее. Добавляете столько серверов, сколько нужно. Не забудьте создать папку для логов. В моем примере это папка /var/log/!remote, сами файлы создавать не надо, служба автоматически их создаст, когда придет информация с удаленных серверов.

    Запускаем syslog-ng и добавляем в автозагрузку:
    systemctl start syslog-ng
    systemctl enable syslog-ng

    Проверим, запустилась ли служба:
    netstat -tulnp | grep syslog
    udp 0 0 0.0.0.0:514 0.0.0.0:* 25960/syslog-ng

    Все в порядке, слушает 514 udp порт. Не забудьте открыть этот порт в iptables, если у вас включен фаерволл. Сервер готов к приему логов.

    Теперь идем на добавленные в syslog-ng сервера и настраиваем там отправку логов на наш сервер. Сделать это очень просто. Открываем файл конфигурации rsyslog. В CentOS он живет по адресу /etc/rsyslog.conf и добавляем туда строку:
    *.* @10.1.3.22
    10.1.3.22 — ip адрес syslog-ng сервера. Перезапустите rsyslog:
    service rsyslog restart
    и проверяйте логи на сервере syslog-ng в указанной папке. Правило *.* отправит все логи в указанное направление. Это не всегда нужно, можно отредактировать правила. Для этого надо ознакомиться с документацией по syslog. Там нет ничего сложного, мне не хочется на этом сейчас подробно останавливаться. В интернете есть примеры.

    В завершение приведу пример своего правила ротации логов. Рекомендую ротацию настроить сразу, не оставлять на потом. Создаем файл /etc/logrotate.d/syslog-ng
    mcedit /etc/logrotate.d/syslog-ng

    /var/log/!remote/*.log {
        daily
        rotate 180
        olddir /var/log/!remote/old
        missingok
        compress
        sharedscripts
        postrotate
        /bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true
        endscript
    }

    По этому правилу ротация логов происходит раз в день. Старые логи перемещаются в папку /var/log/!remote/old и сжимаются. Хранятся логи за последние 180 дней.

    Я привел частный случай настройки хранения логов с удаленных устройств. Решение в лоб. В простых случаях этого достаточно. Лично мне удобно смотреть информацию в текстовых файлах. Это требуется редко, сделано на всякий случай для расследования инцидентов, если таковые возникают.