Настройка системы логирования rsyslog

Материал из ARK-HOSTER.RU | Документация хостинга
Перейти к: навигация, поиск

Содержание

Настройка системы логирования (rsyslog)

1. Подготовка системы

  • Войдите в систему под учетной записью с правами root или пользователя с правами sudo.
  • Убедитесь, что у вас есть доступ к серверу через SSH или консоль.

2. Установка rsyslog

Обновление системы

1. Обновите систему:

sudo apt update

2. Проверьте, установлен ли rsyslog:

which rsyslog
rsyslogd -v

3. Если не установлен, установите:

sudo apt install -y rsyslog

4. Запустите и включите автозапуск:

sudo systemctl start rsyslog
sudo systemctl enable rsyslog

5. Проверьте статус:

sudo systemctl status rsyslog

3. Базовая конфигурация

Создание резервной копии

1. Создайте резервную копию оригинального файла:

sudo cp /etc/rsyslog.conf /etc/rsyslog.conf.backup

Основная конфигурация

1. Отредактируйте основной конфигурационный файл:

sudo nano /etc/rsyslog.conf

2. Настройте основные параметры:

\# Основные настройки
$ModLoad imuxsock
$ModLoad imklog
$ModLoad immark

\# Настройки маркеров
$MarkMessagePeriod 0
$MarkInterval 20

\# Настройки логирования
$WorkDirectory /var/spool/rsyslog
$ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat

\# Настройки UDP
$UDPServerRun 514
$UDPServerAddress 127.0.0.1

\# Настройки TCP
$InputTCPServerRun 514
$TCPServerAddress 127.0.0.1

\# Настройки производительности
$MainMsgQueueType LinkedList
$MainMsgQueueSize 10000
$MainMsgQueueDiscardMark 9750
$MainMsgQueueDiscardSeverity 4

Настройка правил логирования

1. Добавьте правила логирования:

\# Системные логи
*.info;mail.none;authpriv.none;cron.none                /var/log/messages
authpriv.*                                              /var/log/secure
mail.*                                                  -/var/log/maillog
cron.*                                                  /var/log/cron
*.emerg                                                 *
uucp,news.crit                                          /var/log/spooler
local7.*                                                /var/log/boot.log

\# Apache логи
local0.*                                                /var/log/apache2/access.log
local1.*                                                /var/log/apache2/error.log

\# MySQL логи
local2.*                                                /var/log/mysql/error.log

\# Nginx логи
local3.*                                                /var/log/nginx/access.log
local4.*                                                /var/log/nginx/error.log

4. Настройка централизованного логирования

Настройка сервера логирования

1. Настройте rsyslog как сервер:

sudo nano /etc/rsyslog.d/50-server.conf

2. Добавьте конфигурацию:

\# Настройки сервера
$ModLoad imudp
$UDPServerRun 514
$UDPServerAddress 0.0.0.0

$ModLoad imtcp
$InputTCPServerRun 514
$TCPServerAddress 0.0.0.0

\# Шаблоны для удаленных логов
$template RemoteLogs,"/var/log/remote/%HOSTNAME%/%PROGRAMNAME%.log"
*.* ?RemoteLogs

\# Шаблон для всех удаленных логов
$template AllRemoteLogs,"/var/log/remote/%HOSTNAME%.log"
*.* ?AllRemoteLogs

\# Правила для удаленных логов
:fromhost-ip, isequal, "192.168.1.100" /var/log/remote/server1.log
:fromhost-ip, isequal, "192.168.1.101" /var/log/remote/server2.log

Настройка клиента логирования

1. Настройте rsyslog как клиент:

sudo nano /etc/rsyslog.d/50-client.conf

2. Добавьте конфигурацию:

\# Настройки клиента
$ModLoad imuxsock
$ModLoad imklog

\# Отправка логов на сервер
*.* @@192.168.1.10:514
*.* @@192.168.1.10:514

\# Локальное логирование
*.info;mail.none;authpriv.none;cron.none                /var/log/messages
authpriv.*                                              /var/log/secure

5. Настройка фильтрации логов

Фильтрация по приоритету

1. Создайте правила фильтрации:

sudo nano /etc/rsyslog.d/30-filter.conf

2. Добавьте правила:

\# Фильтрация критических ошибок
:msg, contains, "CRITICAL" /var/log/critical.log
:msg, contains, "ERROR" /var/log/errors.log
:msg, contains, "WARNING" /var/log/warnings.log

\# Фильтрация по приоритету
*.crit /var/log/critical.log
*.err /var/log/errors.log
*.warning /var/log/warnings.log
*.info /var/log/info.log
*.debug /var/log/debug.log

Фильтрация по источнику

1. Создайте правила по источникам:

sudo nano /etc/rsyslog.d/40-source.conf

2. Добавьте правила:

\# Фильтрация по программе
:programname, isequal, "sshd" /var/log/ssh.log
:programname, isequal, "apache2" /var/log/apache2.log
:programname, isequal, "mysql" /var/log/mysql.log
:programname, isequal, "nginx" /var/log/nginx.log

\# Фильтрация по хосту
:fromhost-ip, isequal, "192.168.1.100" /var/log/server1.log
:fromhost-ip, isequal, "192.168.1.101" /var/log/server2.log

6. Настройка ротации логов

Установка logrotate

1. Установите logrotate:

sudo apt install -y logrotate

2. Проверьте установку:

logrotate --version

Настройка ротации

1. Создайте конфигурацию для rsyslog:

sudo nano /etc/logrotate.d/rsyslog

2. Добавьте настройки:

/var/log/remote/*.log {
    daily
    missingok
    rotate 30
    compress
    delaycompress
    notifempty
    create 644 syslog adm
    postrotate
        systemctl reload rsyslog
    endscript
}

/var/log/critical.log
/var/log/errors.log
/var/log/warnings.log
/var/log/info.log
/var/log/debug.log {
    daily
    missingok
    rotate 7
    compress
    delaycompress
    notifempty
    create 644 syslog adm
    postrotate
        systemctl reload rsyslog
    endscript
}

Тестирование ротации

1. Протестируйте конфигурацию:

sudo logrotate -d /etc/logrotate.d/rsyslog

2. Принудительно запустите ротацию:

sudo logrotate -f /etc/logrotate.d/rsyslog

7. Настройка мониторинга логов

Установка logwatch

1. Установите logwatch:

sudo apt install -y logwatch

2. Настройте logwatch:

sudo nano /etc/logwatch/conf/logwatch.conf

3. Добавьте настройки:

LogDir = /var/log
TmpDir = /var/cache/logwatch
MailTo = admin@example.com
MailFrom = logwatch@example.com
Print = No
Save = /var/log/logwatch/logwatch.log
Range = yesterday
Detail = Med
Service = All

Настройка автоматических отчетов

1. Создайте скрипт для ежедневных отчетов:

sudo nano /usr/local/bin/logwatch-report.sh

2. Добавьте содержимое:

\#!/bin/bash

\# Создание отчета logwatch
/usr/sbin/logwatch --output mail --mailto admin@example.com --format text

\# Создание отчета по критическим ошибкам
grep -i "critical\|error\|fatal" /var/log/syslog | tail -50 > /tmp/critical-errors.log
mail -s "Critical Errors Report" admin@example.com < /tmp/critical-errors.log

\# Очистка временных файлов
rm -f /tmp/critical-errors.log

3. Сделайте скрипт исполняемым:

sudo chmod +x /usr/local/bin/logwatch-report.sh

4. Добавьте в crontab:

sudo crontab -e

5. Добавьте задачу:

0 6 * * * /usr/local/bin/logwatch-report.sh

8. Настройка безопасности

Настройка TLS/SSL

1. Создайте SSL сертификаты:

sudo mkdir -p /etc/rsyslog.d/ssl
sudo openssl req -x509 -newkey rsa:4096 -keyout /etc/rsyslog.d/ssl/rsyslog.key -out /etc/rsyslog.d/ssl/rsyslog.crt -days 365 -nodes -subj "/CN=logserver.example.com"

2. Настройте TLS в конфигурации:

sudo nano /etc/rsyslog.d/50-tls.conf

3. Добавьте настройки:

$DefaultNetstreamDriver gtls
$DefaultNetstreamDriverCAFile /etc/rsyslog.d/ssl/rsyslog.crt
$DefaultNetstreamDriverCertFile /etc/rsyslog.d/ssl/rsyslog.crt
$DefaultNetstreamDriverKeyFile /etc/rsyslog.d/ssl/rsyslog.key

$ActionSendStreamDriverMode 1
$ActionSendStreamDriverAuthMode anon

Настройка аутентификации

1. Создайте пользователей для rsyslog:

sudo htpasswd -c /etc/rsyslog.d/users admin

2. Настройте аутентификацию:

sudo nano /etc/rsyslog.d/50-auth.conf

3. Добавьте настройки:

$ModLoad imtcp
$InputTCPServerStreamDriverMode 1
$InputTCPServerStreamDriverAuthMode anon
$InputTCPServerRun 514

9. Настройка производительности

Оптимизация очередей

1. Настройте очереди сообщений:

sudo nano /etc/rsyslog.d/60-performance.conf

2. Добавьте настройки:

\# Настройки очередей
$MainMsgQueueType LinkedList
$MainMsgQueueSize 10000
$MainMsgQueueDiscardMark 9750
$MainMsgQueueDiscardSeverity 4
$MainMsgQueueSaveOnShutdown on

\# Настройки потоков
$WorkDirectory /var/spool/rsyslog
$ActionQueueType LinkedList
$ActionQueueFileName logqueue
$ActionQueueMaxDiskSpace 1g
$ActionQueueSaveOnShutdown on
$ActionQueueTimeoutEnqueue 0
$ActionQueueDiscardMark 9750
$ActionQueueDiscardSeverity 4

Настройка буферизации

1. Настройте буферизацию:

sudo nano /etc/rsyslog.d/70-buffering.conf

2. Добавьте настройки:

\# Буферизация для удаленных логов
$ActionQueueType LinkedList
$ActionQueueFileName remotequeue
$ActionQueueMaxDiskSpace 1g
$ActionQueueSaveOnShutdown on
$ActionQueueTimeoutEnqueue 0
$ActionQueueDiscardMark 9750
$ActionQueueDiscardSeverity 4

\# Асинхронная отправка
$ActionSendDefaultMode async

10. Мониторинг и диагностика

Создание скрипта мониторинга

1. Создайте скрипт мониторинга:

sudo nano /usr/local/bin/rsyslog-monitor.sh

2. Добавьте содержимое:

\#!/bin/bash

\# Проверка статуса rsyslog
if ! systemctl is-active --quiet rsyslog; then
    echo "Rsyslog is down!" | mail -s "Rsyslog Alert" admin@example.com
fi

\# Проверка размера логов
LOG_SIZE=$(du -sh /var/log/remote/ 2>/dev/null | awk '{print $1}')
if [ "$LOG_SIZE" != "" ]; then
    echo "Remote logs size: $LOG_SIZE" | mail -s "Rsyslog Report" admin@example.com
fi

\# Проверка критических ошибок
CRITICAL_COUNT=$(grep -c "CRITICAL" /var/log/syslog 2>/dev/null || echo 0)
if [ $CRITICAL_COUNT -gt 10 ]; then
    echo "High number of critical errors: $CRITICAL_COUNT" | mail -s "Rsyslog Alert" admin@example.com
fi

\# Проверка подключений
CONNECTIONS=$(netstat -an | grep :514 | wc -l)
echo "Active rsyslog connections: $CONNECTIONS" | mail -s "Rsyslog Report" admin@example.com

3. Сделайте скрипт исполняемым:

sudo chmod +x /usr/local/bin/rsyslog-monitor.sh

4. Добавьте в crontab:

sudo crontab -e

5. Добавьте задачу:

*/10 * * * * /usr/local/bin/rsyslog-monitor.sh

Диагностика проблем

1. Проверка статуса:

sudo systemctl status rsyslog

2. Проверка конфигурации:

sudo rsyslogd -N1

3. Проверка логов:

sudo tail -f /var/log/syslog

4. Проверка подключений:

sudo netstat -tlnp | grep :514

5. Тестирование правил:

sudo rsyslogd -N1 -f /etc/rsyslog.conf

11. Настройка интеграций

Интеграция с Elasticsearch

1. Установите модуль для Elasticsearch:

sudo apt install -y rsyslog-elasticsearch

2. Настройте отправку в Elasticsearch:

sudo nano /etc/rsyslog.d/80-elasticsearch.conf

3. Добавьте конфигурацию:

$ModLoad omelasticsearch

\# Шаблон для Elasticsearch
$template es-template,"{\"@timestamp\":\"%timereported:::date-rfc3339%\",\"host\":\"%hostname%\",\"severity\":\"%syslogseverity%\",\"facility\":\"%syslogfacility%\",\"program\":\"%programname%\",\"message\":\"%msg%\"}"

\# Отправка в Elasticsearch
*.* :omelasticsearch:localhost:9200;es-template

Интеграция с базами данных

1. Установите модуль для MySQL:

sudo apt install -y rsyslog-mysql

2. Настройте отправку в MySQL:

sudo nano /etc/rsyslog.d/80-mysql.conf

3. Добавьте конфигурацию:

$ModLoad ommysql

\# Настройки подключения к MySQL
$ActionMySQLServer localhost
$ActionMySQLDBName Syslog
$ActionMySQLUserName rsyslog
$ActionMySQLPassword password

\# Отправка в MySQL
*.* :ommysql:localhost,Syslog,rsyslog,password

12. Резервное копирование

Создание скрипта резервного копирования

1. Создайте скрипт резервного копирования:

sudo nano /usr/local/bin/rsyslog-backup.sh

2. Добавьте содержимое:

\#!/bin/bash

BACKUP_DIR="/backup/rsyslog"
DATE=$(date +%Y%m%d_%H%M%S)

\# Создание директории для бэкапа
mkdir -p $BACKUP_DIR

\# Резервное копирование конфигурации
tar -czf $BACKUP_DIR/rsyslog-config-$DATE.tar.gz -C /etc rsyslog.d

\# Резервное копирование логов
tar -czf $BACKUP_DIR/rsyslog-logs-$DATE.tar.gz -C /var/log remote

\# Резервное копирование конфигурации logrotate
cp /etc/logrotate.d/rsyslog $BACKUP_DIR/logrotate-rsyslog-$DATE.conf

\# Удаление старых бэкапов (старше 7 дней)
find $BACKUP_DIR -name "rsyslog-*" -mtime +7 -delete

echo "Rsyslog backup completed: $DATE"

3. Сделайте скрипт исполняемым:

sudo chmod +x /usr/local/bin/rsyslog-backup.sh

4. Добавьте в crontab:

sudo crontab -e

5. Добавьте задачу:

0 2 * * * /usr/local/bin/rsyslog-backup.sh

13. Устранение неполадок

Частые проблемы

1. Rsyslog не запускается:

  • Проверьте конфигурацию:
    sudo rsyslogd -N1
  • Проверьте права доступа к файлам
  • Проверьте логи:
    sudo journalctl -u rsyslog

2. Логи не поступают:

  • Проверьте сетевые настройки
  • Проверьте файрвол
  • Проверьте конфигурацию клиента

3. Проблемы с производительностью:

  • Настройте очереди сообщений
  • Оптимизируйте правила фильтрации
  • Проверьте использование диска

Диагностика

1. Проверка статуса:

sudo systemctl status rsyslog

2. Проверка конфигурации:

sudo rsyslogd -N1

3. Проверка логов:

sudo tail -f /var/log/syslog

4. Проверка подключений:

sudo netstat -tlnp | grep :514

5. Тестирование правил:

sudo rsyslogd -N1 -f /etc/rsyslog.conf

Заключение

Rsyslog успешно настроен и готов к работе! Теперь у вас есть мощная система централизованного логирования с возможностями фильтрации, ротации и мониторинга.

Для размещения ваших систем логирования на надежном хостинге рекомендуем воспользоваться услугами [ARK-HOSTER.RU](https://ark-hoster.ru):

Наши специалисты помогут с настройкой rsyslog и оптимизацией производительности ваших систем логирования!