Мне понадобилось организовать сервер для сбора логов с удаленных устройств. Это могут быть серверы, сетевое оборудование, либо что-то еще, что поддерживает логирование в формате syslog. Я решил использовать не стандартный для большинства дистрибутивов rsyslog, а установить syslog-ng, потому что мне он показался более удобным и простым в настройке.
Научиться настраивать MikroTik с нуля или систематизировать уже имеющиеся знания можно на углубленном онлайн-курcе по администрированию MikroTik. Автор курcа – сертифицированный тренер MikroTik Дмитрий Скоромнов. Более 40 лабораторных работ по которым дается обратная связь. В три раза больше информации, чем в MTCNA.
Содержание:
Введение
Информации на тему сбора логов с удаленных серверов и интернете достаточно много. Ничего сложного тут нет, я и сам уже описывал подобную настройку в статье про сбор логов с mikrotik. Но решение получилось кривоватое, в комментариях написаны замечания. Я и сам знал о них, но простого и быстрого решения я не смог найти, на тот момент меня устраивал и такой вариант. Сейчас же решил все сделать аккуратно и красиво, чтобы было удобно пользоваться. В процессе поиска информации в интернете решил попробовать syslog-ng. С ним у меня не возникло никаких затруднений, сразу получилось то, что требовалось, поэтому я остановил свой выбор на нем.
Настраивать сервер сбора логов будем на системе CentOS 7. Если у вас еще не подготовлен сервер, то читайте мою информацию по установке и базовой настройке centos. Для небольшого количества устройств, нагрузка на сервер будет незначительная, поэтому имеет смысл размещать сервер на виртуальной машине. Если у вас нет готового гипервизора, можете посмотреть мою информацию на тему настройки linux гипервизора proxmox или бесплатного решения microsoft - Windows Hyper-V Server 2016.
Установка и настройка syslog-ng
С установкой нет ничего сложного. Установить 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 на удаленный сервер
Теперь идем на добавленные в 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. Там нет ничего сложного, мне не хочется на этом сейчас подробно останавливаться. В интернете есть примеры. Приведу пару своих.
*.*;local5.none @10.1.3.22
В данном случае у меня по local5.notice идет лог самбы по доступу к сетевой шаре. Мне не нужно собирать эту информацию и я ее отключил. Вот еще пример:
*.info @10.1.3.22
С этого сервера сыпалось много лишней информации уровня debug. Я ограничил отправляемые сообщения уровнем info. И так далее.
Ротация логов syslog-ng
В завершение приведу пример своего правила ротации логов. Рекомендую ротацию настроить сразу, не оставлять на потом. Создаем файл /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 дней.
Заключение
Я привел частный случай настройки хранения логов с удаленных устройств. Решение в лоб. В простых случаях этого достаточно. Лично мне удобно смотреть информацию в текстовых файлах. Это требуется редко, сделано на всякий случай для расследования инцидентов, если таковые возникают. Эту же задачу, к примеру, можно решить с помощью заббикс. Я уже показывал, как мониторить с помощью zabbix лог файлы. Приведенное решение легко переделать в хранение логов.
Для более удобного сбора и последующего просмотра информации существуют готовые решения с написанными веб панелями. Я посмотрел на некоторые из них. Что-то мне показалось слишком сложным в настройке, где-то веб интерфейс не понравился. Для себя остановился на приведенном варианте.
На углубленном курсе "Архитектура современных компьютерных сетей" вы с нуля научитесь работать с Wireshark и «под микроскопом» изучите работу сетевых протоколов. На протяжении курса надо будет выполнить более пятидесяти лабораторных работ в Wireshark.
Доброго дня !
А можно ли как-то убрать штамп времени из захвата лога ?
Oct 23 13:22:28 192.168.164.130 (squid-1): - вот это необходимо минусовать.
Oct 23 13:22:28 192.168.164.130 (squid-1): 1729678948.664 7788 192.168.90.9 TCP_TUNNEL/200 1409 CONNECT http://www.google.ru:443 baranov HIER_DIRECT/108.177.14.94 -
Oct 23 13:22:28 192.168.164.130 (squid-1): 1729678948.664 7903 192.168.90.9 TCP_TUNNEL/200 19931 CONNECT enterprise.api-maps.yandex.ru:443 - HIER_DIRECT/87.250.251.134 -
В rsyslog есть возможность настроить шаблон сообщений. В /etc/rsyslog.conf надо добавить:
$template noTimestampFormat,"%HOSTNAME% %syslogtag% %msg%\n"
$ActionFileDefaultTemplate noTimestampFormat
Насчёт syslog-ng не подскажу. Активно его не использую. Думаю, что-то подобное там тоже есть.
Разобрался, в rsyslog-ng +/- тоже самое.
template squid { template("$MSG\n"); };
destination d_proxy-01-pe { file("/var/log/squid/access.log" template(squid)); };
Спасибо большое за вектор !)
Здравствуйте. При установке ошибка. CentOS 7
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
* base: mirror.yandex.ru
* extras: mirror.yandex.ru
* updates: centos-mirror.rbc.ru
No package syslog-ng available.
Error: Nothing to do
Установил репозиторий eplel
yum -y install epel-release
После этого установилось)
нет такой команды yum
Какой такой?
как только добавляю 3 строки в conf файл, то сервис не стартует....
что я делаю не так ?
● syslog-ng.service - System Logger Daemon
Loaded: loaded (/usr/lib/systemd/system/syslog-ng.service; enabled; vendor preset: enabled)
Active: failed (Result: start-limit) since Ср 2020-07-29 16:48:53 MSK; 3s ago
Docs: man:syslog-ng(8)
Process: 1989 ExecStart=/usr/sbin/syslog-ng -F -p /var/run/syslogd.pid (code=exited, status=2)
Main PID: 1989 (code=exited, status=2)
Status: "Starting up... (Wed Jul 29 16:48:52 2020"
июл 29 16:48:52 syslog.iceberry.local systemd[1]: syslog-ng.service failed.
июл 29 16:48:53 syslog.iceberry.local systemd[1]: syslog-ng.service holdoff time over, scheduling restart.
июл 29 16:48:53 syslog.iceberry.local systemd[1]: Stopped System Logger Daemon.
июл 29 16:48:53 syslog.iceberry.local systemd[1]: start request repeated too quickly for syslog-ng.service
июл 29 16:48:53 syslog.iceberry.local systemd[1]: Failed to start System Logger Daemon.
июл 29 16:48:53 syslog.iceberry.local systemd[1]: Unit syslog-ng.service entered failed state.
июл 29 16:48:53 syslog.iceberry.local systemd[1]: syslog-ng.service failed.
июл 29 16:48:53 syslog.iceberry.local systemd[1]: start request repeated too quickly for syslog-ng.service
июл 29 16:48:53 syslog.iceberry.local systemd[1]: Failed to start System Logger Daemon.
июл 29 16:48:53 syslog.iceberry.local systemd[1]: syslog-ng.service failed.
как только удаляю эти строки, то все ровно стартует, но логов же я не увижу, правильно ?
подскажите пожалуйста...
строки, которые добавляю: (хочу писать лог контроллера unifi)
destination d_xs-unifi { file("/var/log/!remote/xs-unifi.log"); };
filter f_xs-unifi { netmask("10.10.3.25/255.255.255.255"); };
log { source(net); filter(f_xs-unifi); destination(d_xs-unifi); };
А что у вас прописано в директиве source для "net"?
Я не вижу такого. Имеете ввиду что слушать ? там стоит 0.0.0.0 port 514
Здравствуйте.
Второй день ломаю голову, пробовал на обоих хостах использовать штатный в Ubuntu 20.04 rsyslog, и в качестве сервера syslog-ng. В обоих случаях добился того что на сервер прилетают в один файл часть системных логов с собираемого хоста, но не все, не могу заставить передавать логи nginx и его виртуальных хостов.
В идеале хотел получить следующее:
Есть хост сервер логов - host1.
Есть хост с которого хочу получать логи - host2.
Есть хост с которого хочу получать логи - host3.
На хостах host2 и host3 крутятся сервисы на nginx. Как заставить прилетать с этих хостов определённые логи, пути к которым известны, на сервер логов host1. Допустим на host2 и host3 крутится Joomla и нужные мне логи лежит по пути:
/var/log/nginx/access.log
/var/log/nginx/joomla_access.log
/var/log/nginx/joomla_access.log.1
/var/log/nginx/joomla_error.log
/var/log/nginx/joomla_error.log.1
Именно их, в таком виде, хочу получать на сервере логов Host1 по пути /var/log/rsyslog/:
nginx_access.log
nginx_joomla_access.log
nginx_joomla_access.log.1
nginx_joomla_error.log
nginx_joomla_error.log.1
В целом не важно что сам Nginx умеет сам передавать свои логи на удалённый syslog сервер, хотелось бы передавать логи один к одному, тех сервисов которые не умеют напрямую передавать логи на удаленный syslog сервер. Возможно ли указывать какой именно лог файл, указав точный путь на удалённом хосте, и передавать его в определённую папку на syslog сервер в определённый файл? Если всё это возможно, киньте пример что скофигурить на сервере и что на хосте. Смысл в том что бы смотреть логи на одной машине в том виде, в котором они формируются на удалённых хостах, один к одному.
Здравствуйте.
Была бы очень полезна статья как все это потом прикрутить к заббиксу. Спасибо
Что именно вы хотите увидеть в заббиксе? Возможно, у меня есть статьи на эту тему.
Я бы хотел заббиксом собирать эти логи и видеть их в заббиксе
Плохая идея. Zabbix не предназначен для хранения логов. Он все же система мониторинга. Если надо хранить логи, лучше использовать ELK или какие-то другие решения под это дело.
Пример того, как лог файлы передавать в zabbix есть в этой статье - https://serveradmin.ru/monitoring-ssh-loginov-v-zabbix/
Может по аналогии любой лог туда отправить. Но еще повторю - если логов много это плохая идея. База заббикса не заточена под хранение большого количества логов. Работать с ними будет неудобно.
А мне интересно, а где определение source (net)? И все повторяют, и у всех все получается...)))))))))))))))))))))))))
Добрый день. Есть ли какой нибудь относительно простой способ добавить веб-гуи к syslog-ng, с авторизацией? Чтобы можно было зайти из любого места и посмотреть логи.
Мне такой неизвестен. В качестве альтернативы предлагаю посмотреть elk stack — https://serveradmin.ru/ustanovka-i-nastroyka-elasticsearch-logstash-kibana-elk-stack/
Я сейчас для сбора логов в основном им пользуюсь.
Добрый день, подскажите пожалуйста, как правильней всего настроить в ELK приём логов по syslog ?
В статье про mikrotik я как раз собираю syslog логи - https://serveradmin.ru/tsentralizovannyiy-sbor-logov-mikrotik-v-elk-stack/#_logstash
Благодарю.
Привет! Сделал всё как Вы написали, всё получилось, но у меня ещё один вопрос, а как можно apache, nginx, mysql и openvpn логов отправить через rsyslog на syslog-ng ?
Читать документацию к каждому из сервисов и смотреть, как настроить отправку логов в syslog формате. Если не ошибаюсь, они все это умеют. Единственное сомнение насчет mysql, не настраивал. А все остальное в syslog отправлял.
Здравствуйте! Спасибо за совет (ответ :) ) настроил отправку логов nginx и apache, как вы уже сказали все они умеют отправить логи на syslog, mysql-а Я не смог настроить. В Интернете больше всего есть статьи по этой теме где syslog тправляет и сохроняет свои логи в mysql :)
хорошее описание. Но я бы предпочел более "старый "способ, описанный в http://www.linux-magazin.de/ausgaben/2009/06/zentrale-kontrolle/
destination loghost {
file ("/var/log/hosts/$YEAR-$MONTH/$HOST/$FACILITY-$YEAR-$MONTH-$DAY"
owner(root) group(root) perm(0600) dir_perm(0700) create_dirs(yes)
);
удобнее , само сортирует файлы. Работы меньше
01 # Filter/Destination für PIX-Firewall
02 filter f_pix {
03 host(pix);
04 };
05 # Zielort der Log-Dateien
06 destination loghost {
07 file ("/var/log/hosts/$YEAR-$MONTH/$HOST/$FACILITY-$YEAR-$MONTH-$DAY"
08 owner(root) group(root) perm(0600) dir_perm(0700) create_dirs(yes)
09 );
10 };
11 log {
12 source(s_all);
13 destination(loghost);
14 };
15 # Pix
16 log {
17 source(s_all);
18 filter(f_pix);
19 destination(loghost);
20 flags(final);
21 };
Спасибо за материал! Очень интересно и хорошо изложено.
И да, в syslog-ng.conf нужно раскомментировать строку:
#udp(ip(0.0.0.0) port(514));
перед тем как запускать syslog-ng.
Инструкция уже не работает, при внесении в конфиг строк:
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); };
Daemon не запускается, остановка и удаление rsyslog как писали выше не помогает:
[root@log]# systemctl restart syslog-ng.service
Job for syslog-ng.service failed because the control process exited with error code. See "systemctl status syslog-ng.service" and "journalctl -xe" for details.
[root@log]# systemctl status syslog-ng.service
● syslog-ng.service - System Logger Daemon
Loaded: loaded (/usr/lib/systemd/system/syslog-ng.service; enabled; vendor preset: enabled)
Active: failed (Result: start-limit) since Thu 2018-02-15 17:58:27 MSK; 42s ago
Docs: man:syslog-ng(8)
Process: 2003 ExecStart=/usr/sbin/syslog-ng -F -p /var/run/syslogd.pid (code=exited, status=2)
Main PID: 2003 (code=exited, status=2)
Status: "Starting up... (Thu Feb 15 17:58:27 2018"
Feb 15 17:58:27 log.local systemd[1]: Unit syslog-ng.service entered failed state.
Feb 15 17:58:27 log.local systemd[1]: syslog-ng.service failed.
Feb 15 17:58:27 log.local systemd[1]: syslog-ng.service holdoff time over, scheduling restart.
Feb 15 17:58:27 log.local systemd[1]: start request repeated too quickly for syslog-ng.service
Feb 15 17:58:27 log.local systemd[1]: Failed to start System Logger Daemon.
Feb 15 17:58:27 log.local systemd[1]: Unit syslog-ng.service entered failed state.
Feb 15 17:58:27 log.local systemd[1]: syslog-ng.service failed.
Feb 15 17:58:27 log.local systemd[1]: start request repeated too quickly for syslog-ng.service
Feb 15 17:58:27 log.local systemd[1]: Failed to start System Logger Daemon.
Feb 15 17:58:27 log.local systemd[1]: syslog-ng.service failed.
А в /var/log/messages что-то есть на этот счет? Не понятно, в чем ошибка. Обычно в логе есть информация на эту тему.
Ничего необычно я не увидел.
Feb 15 17:47:23 log-n1 yum[1749]: Installed: syslog-ng-3.5.6-3.el7.x86_64
Feb 15 17:47:36 log-n1 systemd: Reloading.
Feb 15 17:47:40 log-n1 systemd: Listening on Syslog Socket.
Feb 15 17:47:40 log-n1 systemd: Starting Syslog Socket.
Feb 15 17:47:40 log-n1 systemd: Starting System Logger Daemon...
Feb 15 17:47:40 log-n1 syslog-ng[1914]: syslog-ng starting up; version='3.5.6'
Feb 15 17:47:40 log-n1 systemd[1]: Listening on Syslog Socket.
Feb 15 17:47:40 log-n1 systemd[1]: Starting Syslog Socket.
Feb 15 17:47:40 log-n1 systemd[1]: Starting System Logger Daemon...
Feb 15 17:47:40 log-n1 systemd: Started System Logger Daemon.
Feb 15 17:47:40 log-n1 systemd[1]: Started System Logger Daemon.
Feb 15 17:52:41 log-n1 syslog-ng[1914]: syslog-ng shutting down; version='3.5.6'
Feb 15 17:52:41 log-n1 systemd[1]: Stopping System Logger Daemon...
Feb 15 17:52:41 log-n1 systemd: Stopping System Logger Daemon...
Feb 15 17:52:41 log-n1 systemd: Starting System Logger Daemon...
Feb 15 17:52:41 log-n1 systemd: syslog-ng.service: main process exited, code=exited, status=2/INVALIDARGUMENT
Feb 15 17:52:41 log-n1 systemd: Failed to start System Logger Daemon.
Feb 15 17:52:41 log-n1 systemd: Unit syslog-ng.service entered failed state.
Feb 15 17:52:41 log-n1 systemd: syslog-ng.service failed.
Feb 15 17:52:41 log-n1 systemd: syslog-ng.service holdoff time over, scheduling restart.
Feb 15 17:52:41 log-n1 systemd: Starting System Logger Daemon...
Feb 15 17:52:41 log-n1 systemd: syslog-ng.service: main process exited, code=exited, status=2/INVALIDARGUMENT
Feb 15 17:52:41 log-n1 systemd: Failed to start System Logger Daemon.
Feb 15 17:52:41 log-n1 systemd: Unit syslog-ng.service entered failed state.
Feb 15 17:52:41 log-n1 systemd: syslog-ng.service failed.
Feb 15 17:52:42 log-n1 systemd: syslog-ng.service holdoff time over, scheduling restart.
Feb 15 17:52:42 log-n1 systemd: Starting System Logger Daemon...
Feb 15 17:52:42 log-n1 systemd: syslog-ng.service: main process exited, code=exited, status=2/INVALIDARGUMENT
Feb 15 17:52:42 log-n1 systemd: Failed to start System Logger Daemon.
Feb 15 17:52:42 log-n1 systemd: Unit syslog-ng.service entered failed state.
Feb 15 17:52:42 log-n1 systemd: syslog-ng.service failed.
Feb 15 17:52:42 log-n1 systemd: syslog-ng.service holdoff time over, scheduling restart.
Feb 15 17:52:42 log-n1 systemd: Starting System Logger Daemon...
Feb 15 17:52:42 log-n1 systemd: syslog-ng.service: main process exited, code=exited, status=2/INVALIDARGUMENT
Feb 15 17:52:42 log-n1 systemd: Failed to start System Logger Daemon.
Feb 15 17:52:42 log-n1 systemd: Unit syslog-ng.service entered failed state.
Feb 15 17:52:42 log-n1 systemd: syslog-ng.service failed.
Feb 15 17:52:42 log-n1 systemd: syslog-ng.service holdoff time over, scheduling restart.
Feb 15 17:52:42 log-n1 systemd: Starting System Logger Daemon...
Feb 15 17:52:42 log-n1 systemd: syslog-ng.service: main process exited, code=exited, status=2/INVALIDARGUMENT
Feb 15 17:52:42 log-n1 systemd: Failed to start System Logger Daemon.
Feb 15 17:52:42 log-n1 systemd: Unit syslog-ng.service entered failed state.
Feb 15 17:52:42 log-n1 systemd: syslog-ng.service failed.
Feb 15 17:52:42 log-n1 systemd: syslog-ng.service holdoff time over, scheduling restart.
Feb 15 17:52:42 log-n1 systemd: start request repeated too quickly for syslog-ng.service
Feb 15 17:52:42 log-n1 systemd: Failed to start System Logger Daemon.
Feb 15 17:52:42 log-n1 systemd: Unit syslog-ng.service entered failed state.
Feb 15 17:52:42 log-n1 systemd: syslog-ng.service failed.
Feb 15 17:52:42 log-n1 systemd: start request repeated too quickly for syslog-ng.service
Feb 15 17:52:42 log-n1 systemd: Failed to start System Logger Daemon.
Feb 15 17:52:42 log-n1 systemd: Unit syslog.socket entered failed state.
Feb 15 17:52:42 log-n1 systemd: syslog-ng.service failed.
Feb 15 17:53:11 log-n1 systemd: Listening on Syslog Socket.
Разобрался, теперь работает, конфиг /etc/syslog-ng/syslog-ng.conf по умолчанию не настроен на принятие логов от удаленных хостов (внезапно!), поэтому в него обязательно необходимо добавить секцию:
===
source net {
udp(ip(0.0.0.0) port(514));
};
===
также возможно придется сделать следующее:
nano /etc/systemd/journald.conf
[Journal]
ForwardToSyslog=yes
$ systemctl restart systemd-journald.service
$ systemctl restart syslog-ng.service
P.S. Пакет syslog-ng.x86_64, @version:3.5.6
большое спасибо!
это:
===
source net {
udp(ip(0.0.0.0) port(514));
};
===
помогло.
Строго говоря, syslog-ng OSE ≠ syslog-ng [Premium Edition].
Я так понимаю что если ставить из исходников, а не через yum, то
"Запускаем syslog-ng и добавляем в автозагрузку:" - не прокатит, там нужно еще что-о сделать?
По идее да, нужно скрипты запуска самим сделать. Обычно в исходниках где-то есть пример под каждую систему.
День добрый, все делаю по инструкции, дохожу до ввода команды:
systemctl start syslog-ng
выдает ошибку:
[root@localhost ~]# systemctl start syslog-ng
Job for syslog-ng.service failed because the control process exited with error code. See "systemctl status syslog-ng.service" and "journalctl -xe" for details.
вот вывод команды
[root@localhost ~]# systemctl status syslog-ng.service
● syslog-ng.service - System Logger Daemon
Loaded: loaded (/usr/lib/systemd/system/syslog-ng.service; enabled; vendor preset: enabled)
Active: failed (Result: start-limit) since Wed 2017-04-12 18:15:11 MSK; 16s ago
Docs: man:syslog-ng(8)
Process: 10813 ExecStart=/usr/sbin/syslog-ng -F -p /var/run/syslogd.pid (code=exited, status=2)
Main PID: 10813 (code=exited, status=2)
Status: "Starting up... (Wed Apr 12 18:15:10 2017"
подскажите в чем может быть проблема?
вроде разобрался сам, служба syslog-ng конфликтует со стандартной службой syslog, поэтому перед запуском первой последнюю нужно отключать:
https://www.centos.org/forums/viewtopic.php?t=57379
my syslog-ng failed on startup because it doesnt play nice with rsyslog (im thinking they both use port 514)
systemctl disable rsyslog
allowed me to systemctl start syslog-ng
syslog-ng-3.5.6-3.el7.x86_64