Установка свежей версии syslog-ng в CentOS7 из исходных кодов
В CentOS7 в репозитарии имеется версия 3.5.6-3.el7
Последняя open source версия на https://github.com/syslog-ng/syslog-ng - это 3.28. Установим свежую версию syslog-ng с поддержкой redis из исходных кодов.
Удаляем rsyslog и syslog-ng, установленные из репозитация
# yum -y remove rsyslog
# yum -y remove syslog-ng
Устанавливаем необходимые пакеты для сборки syslog-ng из исходных кодов
# yum install git nano net-tools
# yum install automake autoconf-archive libtool redis
# yum install bison flex glib2-devel openssl-devel hiredis-devel.x86_64
Скачиваем syslog-ng из git и производим сборку в директорию /usr/local.
# cd /usr/src/
# git clone https://github.com/syslog-ng/syslog-ng.git
# cd syslog-ng/
# ./autogen.sh
# ./configure --prefix=/usr/local --enable-redis
# make
# make install
Установленная программа будет тут: /usr/local/sbin/syslog-ng, конфигурационный файл тут: /usr/local/etc/syslog-ng.conf
Проверяем установленную версию syslog-ng и модуль redis:
# /usr/local/sbin/syslog-ng -V
syslog-ng 3 (3.28.1.174.g98e5d10)
Config version: 3.29
Installer-Version: 3.28.1.174.g98e5d10
...
Available-Modules: add-contextual-data,affile,afprog,afsocket,afstomp,afuser,appmodel,azure-auth-header,basicfuncs,cef,confgen,cryptofuncs,csvparser,timestamp,dbparser,disk-buffer,examples,tfgetent,graphite,hook-commands,json-plugin,kvformat,linux-kmsg-format,map-value-pairs,pseudofile,redis,secure-logging,stardate,syslogformat,system-source,tags-parser,xml
...
Используем рекомендованный в CentOS конфигурационный файл, который скачался из git вместе с исходными кодами:
# mv /usr/local/etc/syslog-ng.conf /usr/local/etc/syslog-ng.confbackup
# cp /usr/src/syslog-ng/packaging/rhel/syslog-ng.conf /usr/local/etc/syslog-ng.conf
Правим конфигурационный файл.
# nano /usr/local/etc/syslog-ng.conf
Установленная версия syslog ожидает версию конфига 3.29, поэтому исправляем первую строчку в конфигурационном файле с
@version: 3.28
на
@version: 3.29
В разделе опции добавляем строку dns-cache(no), которая требуется в новой версии конфига syslog-ng
options {
flush_lines (0);
time_reopen (10);
log_fifo_size (1000);
chain_hostnames (off);
use_dns (no);
dns-cache(no);
use_fqdn (no);
create_dirs (no);
keep_hostname (yes);
};
Добавляем конфигурацию для прослушивания сети и помещения сообщений в базу redis.
source net { udp(ip(0.0.0.0) port(514) log_msg_size(8000) ); };
destination d_net {
redis(
host(127.0.0.1)
port(6379)
command("rpush" "logs" "${R_YEAR}-${R_MONTH}-${R_DAY} ${R_HOUR}:${R_MIN}:${R_SEC}|${HOST}|${PRIORITY}|$MSGHDR${MSG}")
);
};
filter f_net_10 {
netmask(10.0.0.0/8);
};
filter f_net_172 {
netmask(172.16.0.0/12);
};
log { source(net); filter(f_net_10); destination(d_net); };
log { source(net); filter(f_net_172); destination(d_net); };
Затем комментируем строку, подключения других конфигов (опционально)
#@include "/etc/syslog-ng/conf.d/*.conf"
Запускаем syslog-ng так: # /usr/local/sbin/syslog-ng -f /usr/local/etc/syslog-ng.conf
Проверяем прослушивание порта 514:
# netstat -ltupn | grep syslog
udp 0 0 0.0.0.0:514 0.0.0.0:* 1338/syslog-ng
Проверяем запущенную службу:
# ps ax | grep syslog
1357 ? S 0:00 supervising syslog-ng
1358 ? Ssl 0:00 /usr/local/sbin/syslog-ng -f /usr/local/etc/syslog-ng.conf
При старте сервиса могут быть предупреждения, которые связаны с версией конфигурационного файла. Лечится исправлением первой строчки (@version: 3.28 на @version: 3.29) в конфиг файле:
[2020-08-22T18:01:13.166587] WARNING: Configuration file format is too old, syslog-ng is running in compatibility mode. Please update it to use the syslog-ng 3.29 format at your time of convenience. To upgrade the configuration, please review the warnings about incompatible changes printed by syslog-ng, and once completed change the @version header at the top of the configuration file; config-version='3.28'
[2020-08-22T18:01:13.331169] WARNING: The internal_queue_length stat counter has been renamed to internal_source.queued. The old name will be removed in future versions; config-version='3.28'
При отсутствии строчки dns-cache(no) при запуске будет ошибка:
[2020-08-22T18:01:13.328914] WARNING: With use-dns(no), dns-cache() will be forced to 'no' too!;
При незапущенном REDIS будет выходить ошибка. При запущенном REDIS ошибка не возникает:
[2020-08-22T18:07:41.059045] REDIS server error during connection; driver='d_elis#0', error='Connection refused', time_reopen='10'
Для запуска syslog создадим сервис.
# touch /usr/lib/systemd/system/syslog-ng.service
# chmod 664 /usr/lib/systemd/system/syslog-ng.service
# nano /usr/lib/systemd/system/syslog-ng.service
Содержимое файла:
[Unit]
Description=System Logger Daemon
Documentation=man:syslog-ng(8)
After=network.target redis.service
[Service]
Type=notify
Sockets=syslog.socket
ExecStart=/usr/local/sbin/syslog-ng -F -f /usr/local/etc/syslog-ng.conf -p /var/run/syslogd.pid
ExecReload=/bin/kill -HUP $MAINPID
StandardOutput=journal
StandardError=journal
Restart=on-failure
[Install]
WantedBy=multi-user.target
# systemctl daemon-reload
# systemctl start syslog-ng.service
# systemctl enable syslog-ng.service