Настройка логирования и ротации логов — различия между версиями
Admin (обсуждение | вклад) (Новая страница: «= Настройка логирования и ротации логов = == 1. Подготовка системы == * Войдите в систему по…») |
Admin (обсуждение | вклад) |
||
(не показана 1 промежуточная версия этого же участника) | |||
Строка 6: | Строка 6: | ||
* Убедитесь, что у вас есть доступ к серверу через SSH или консоль. | * Убедитесь, что у вас есть доступ к серверу через SSH или консоль. | ||
− | == 2. Основы логирования в Linux | + | == 2. Основы логирования в Linux == |
=== Система логирования === | === Система логирования === | ||
Строка 19: | Строка 19: | ||
1. '''Системные логи''': | 1. '''Системные логи''': | ||
− | < | + | <pre>/var/log/syslog</pre> |
− | /var/log/syslog | + | <pre>/var/log/auth.log</pre> |
− | /var/log/auth.log | + | <pre>/var/log/kern.log</pre> |
− | /var/log/kern.log | + | <pre>/var/log/mail.log</pre> |
− | /var/log/mail.log | ||
− | </ | ||
2. '''Логи приложений''': | 2. '''Логи приложений''': | ||
− | < | + | <pre>/var/log/apache2/</pre> |
− | /var/log/apache2/ | + | <pre>/var/log/nginx/</pre> |
− | /var/log/nginx/ | + | <pre>/var/log/mysql/</pre> |
− | /var/log/mysql/ | + | <pre>/var/log/postfix/</pre> |
− | /var/log/postfix/ | ||
− | </ | ||
3. '''Логи systemd''': | 3. '''Логи systemd''': | ||
− | < | + | <pre>journalctl</pre> |
− | journalctl | ||
− | </ | ||
− | == 3. Настройка rsyslog | + | == 3. Настройка rsyslog == |
=== Установка и настройка === | === Установка и настройка === | ||
1. Установите rsyslog: | 1. Установите rsyslog: | ||
− | < | + | <pre>sudo apt install rsyslog</pre> |
− | sudo apt install rsyslog | ||
− | </ | ||
2. Проверьте статус: | 2. Проверьте статус: | ||
− | < | + | <pre>sudo systemctl status rsyslog</pre> |
− | sudo systemctl status rsyslog | ||
− | </ | ||
3. Отредактируйте конфигурацию: | 3. Отредактируйте конфигурацию: | ||
− | < | + | <pre>sudo nano /etc/rsyslog.conf</pre> |
− | sudo nano /etc/rsyslog.conf | ||
− | </ | ||
=== Основная конфигурация === | === Основная конфигурация === | ||
1. Настройте основные параметры: | 1. Настройте основные параметры: | ||
− | < | + | <pre>$ModLoad imuxsock</pre> |
− | + | <pre>$ModLoad imklog</pre> | |
− | $ModLoad imuxsock | + | <pre>$ModLoad immark</pre> |
− | $ModLoad imklog | + | <pre>$FileCreateMode 0640</pre> |
− | $ModLoad immark | + | <pre>$DirCreateMode 0755</pre> |
− | + | <pre>$Umask 0022</pre> | |
− | + | <pre>$WorkDirectory /var/spool/rsyslog</pre> | |
− | $FileCreateMode 0640 | + | <pre>$ActionQueueType LinkedList</pre> |
− | $DirCreateMode 0755 | + | <pre>$ActionQueueFileName srvrfwd</pre> |
− | $Umask 0022 | + | <pre>$ActionResumeRetryCount -1</pre> |
− | + | <pre>$ActionQueueSaveOnShutdown on</pre> | |
− | |||
− | $WorkDirectory /var/spool/rsyslog | ||
− | $ActionQueueType LinkedList | ||
− | $ActionQueueFileName srvrfwd | ||
− | $ActionResumeRetryCount -1 | ||
− | $ActionQueueSaveOnShutdown on | ||
− | </ | ||
=== Настройка правил логирования === | === Настройка правил логирования === | ||
1. Добавьте правила логирования: | 1. Добавьте правила логирования: | ||
− | < | + | <pre>auth,authpriv.* /var/log/auth.log</pre> |
− | + | <pre>kern.* /var/log/kern.log</pre> | |
− | auth,authpriv.* /var/log/auth.log | + | <pre>mail.* /var/log/mail.log</pre> |
− | + | <pre>cron.* /var/log/cron.log</pre> | |
− | + | <pre>*.info;mail.none;authpriv.none;cron.none /var/log/syslog</pre> | |
− | kern.* /var/log/kern.log | + | <pre>*.err /var/log/errors.log</pre> |
− | |||
− | |||
− | mail.* /var/log/mail.log | ||
− | |||
− | |||
− | cron.* /var/log/cron.log | ||
− | |||
− | |||
− | *.info;mail.none;authpriv.none;cron.none /var/log/syslog | ||
− | |||
− | |||
− | *.err /var/log/errors.log | ||
− | </ | ||
− | == 4. Настройка systemd-journald | + | == 4. Настройка systemd-journald == |
=== Основная конфигурация === | === Основная конфигурация === | ||
1. Отредактируйте конфигурацию journald: | 1. Отредактируйте конфигурацию journald: | ||
− | < | + | <pre>sudo nano /etc/systemd/journald.conf</pre> |
− | sudo nano /etc/systemd/journald.conf | ||
− | </ | ||
2. Настройте основные параметры: | 2. Настройте основные параметры: | ||
− | < | + | <pre>[Journal]</pre> |
− | [Journal] | + | <pre>Storage=persistent</pre> |
− | Storage=persistent | + | <pre>SystemMaxUse=1G</pre> |
− | SystemMaxUse=1G | + | <pre>SystemMaxFileSize=100M</pre> |
− | SystemMaxFileSize=100M | + | <pre>SystemMaxFiles=10</pre> |
− | SystemMaxFiles=10 | + | <pre>RuntimeMaxUse=100M</pre> |
− | RuntimeMaxUse=100M | + | <pre>RuntimeMaxFileSize=10M</pre> |
− | RuntimeMaxFileSize=10M | + | <pre>RuntimeMaxFiles=5</pre> |
− | RuntimeMaxFiles=5 | + | <pre>MaxRetentionSec=1month</pre> |
− | MaxRetentionSec=1month | ||
− | </ | ||
3. Перезапустите journald: | 3. Перезапустите journald: | ||
− | < | + | <pre>sudo systemctl restart systemd-journald</pre> |
− | sudo systemctl restart systemd-journald | ||
− | </ | ||
=== Управление журналами === | === Управление журналами === | ||
1. Просмотрите все логи: | 1. Просмотрите все логи: | ||
− | < | + | <pre>sudo journalctl</pre> |
− | sudo journalctl | ||
− | </ | ||
2. Просмотрите логи за последний час: | 2. Просмотрите логи за последний час: | ||
− | < | + | <pre>sudo journalctl --since "1 hour ago"</pre> |
− | sudo journalctl --since "1 hour ago" | ||
− | </ | ||
3. Просмотрите логи службы: | 3. Просмотрите логи службы: | ||
− | < | + | <pre>sudo journalctl -u service_name</pre> |
− | sudo journalctl -u service_name | ||
− | </ | ||
4. Просмотрите логи в реальном времени: | 4. Просмотрите логи в реальном времени: | ||
− | < | + | <pre>sudo journalctl -f</pre> |
− | sudo journalctl -f | ||
− | </ | ||
− | == 5. Настройка logrotate | + | == 5. Настройка logrotate == |
=== Основная конфигурация === | === Основная конфигурация === | ||
1. Отредактируйте основной файл конфигурации: | 1. Отредактируйте основной файл конфигурации: | ||
− | < | + | <pre>sudo nano /etc/logrotate.conf</pre> |
− | sudo nano /etc/logrotate.conf | ||
− | </ | ||
2. Настройте основные параметры: | 2. Настройте основные параметры: | ||
− | < | + | <pre>weekly</pre> |
− | + | <pre>rotate 4</pre> | |
− | weekly | + | <pre>create</pre> |
− | rotate 4 | + | <pre>dateext</pre> |
− | create | + | <pre>compress</pre> |
− | dateext | + | <pre>delaycompress</pre> |
− | compress | + | <pre>missingok</pre> |
− | delaycompress | + | <pre>notifempty</pre> |
− | missingok | + | <pre>include /etc/logrotate.d</pre> |
− | notifempty | ||
− | include /etc/logrotate.d | ||
− | </ | ||
=== Создание правил ротации === | === Создание правил ротации === | ||
1. Создайте правило для системных логов: | 1. Создайте правило для системных логов: | ||
− | < | + | <pre>sudo nano /etc/logrotate.d/syslog</pre> |
− | sudo nano /etc/logrotate.d/syslog | ||
− | </ | ||
2. Добавьте содержимое: | 2. Добавьте содержимое: | ||
− | < | + | <pre>/var/log/syslog</pre> |
− | /var/log/syslog | + | <pre>{</pre> |
− | { | + | <pre>daily</pre> |
− | + | <pre>rotate 7</pre> | |
− | + | <pre>compress</pre> | |
− | + | <pre>delaycompress</pre> | |
− | + | <pre>missingok</pre> | |
− | + | <pre>notifempty</pre> | |
− | + | <pre>postrotate</pre> | |
− | + | <pre>/usr/lib/rsyslog/rsyslog-rotate</pre> | |
− | + | <pre>endscript</pre> | |
− | + | <pre>}</pre> | |
− | } | ||
− | </ | ||
3. Создайте правило для Apache: | 3. Создайте правило для Apache: | ||
− | < | + | <pre>sudo nano /etc/logrotate.d/apache2</pre> |
− | sudo nano /etc/logrotate.d/apache2 | ||
− | </ | ||
4. Добавьте содержимое: | 4. Добавьте содержимое: | ||
− | < | + | <pre>/var/log/apache2/*.log</pre> |
− | /var/log/apache2/*.log | + | <pre>{</pre> |
− | { | + | <pre>daily</pre> |
− | + | <pre>rotate 14</pre> | |
− | + | <pre>compress</pre> | |
− | + | <pre>delaycompress</pre> | |
− | + | <pre>missingok</pre> | |
− | + | <pre>notifempty</pre> | |
− | + | <pre>create 644 root root</pre> | |
− | + | <pre>postrotate</pre> | |
− | + | <pre>/bin/kill -USR1 `cat /var/run/apache2.pid 2>/dev/null` 2>/dev/null || true</pre> | |
− | + | <pre>endscript</pre> | |
− | + | <pre>}</pre> | |
− | } | ||
− | </ | ||
− | == 6. Настройка централизованного логирования | + | == 6. Настройка централизованного логирования == |
=== Настройка rsyslog сервера === | === Настройка rsyslog сервера === | ||
1. Отредактируйте конфигурацию сервера: | 1. Отредактируйте конфигурацию сервера: | ||
− | < | + | <pre>sudo nano /etc/rsyslog.conf</pre> |
− | sudo nano /etc/rsyslog.conf | ||
− | </ | ||
2. Добавьте настройки для приема логов: | 2. Добавьте настройки для приема логов: | ||
− | < | + | <pre>$ModLoad imudp</pre> |
− | + | <pre>$UDPServerRun 514</pre> | |
− | $ModLoad imudp | + | <pre>$ModLoad imtcp</pre> |
− | $UDPServerRun 514 | + | <pre>$InputTCPServerRun 514</pre> |
− | $ModLoad imtcp | + | <pre>$template RemoteLogs,"/var/log/remote/%HOSTNAME%/%PROGRAMNAME%.log"</pre> |
− | $InputTCPServerRun 514 | + | <pre>*.* ?RemoteLogs</pre> |
− | |||
− | |||
− | $template RemoteLogs,"/var/log/remote/%HOSTNAME%/%PROGRAMNAME%.log" | ||
− | *.* ?RemoteLogs | ||
− | </ | ||
3. Создайте директорию для удаленных логов: | 3. Создайте директорию для удаленных логов: | ||
− | < | + | <pre>sudo mkdir -p /var/log/remote</pre> |
− | sudo mkdir -p /var/log/remote | + | <pre>sudo chown syslog:syslog /var/log/remote</pre> |
− | sudo chown syslog:syslog /var/log/remote | ||
− | </ | ||
=== Настройка rsyslog клиента === | === Настройка rsyslog клиента === | ||
1. На клиентском сервере отредактируйте конфигурацию: | 1. На клиентском сервере отредактируйте конфигурацию: | ||
− | < | + | <pre>sudo nano /etc/rsyslog.conf</pre> |
− | sudo nano /etc/rsyslog.conf | ||
− | </ | ||
2. Добавьте настройки для отправки логов: | 2. Добавьте настройки для отправки логов: | ||
− | < | + | <pre>*.* @@log-server.example.com:514</pre> |
− | |||
− | *.* @@log-server.example.com:514 | ||
− | </ | ||
3. Перезапустите rsyslog: | 3. Перезапустите rsyslog: | ||
− | < | + | <pre>sudo systemctl restart rsyslog</pre> |
− | sudo systemctl restart rsyslog | ||
− | </ | ||
− | == 7. Настройка мониторинга логов | + | == 7. Настройка мониторинга логов == |
=== Установка и настройка ELK стека === | === Установка и настройка ELK стека === | ||
1. Установите Elasticsearch: | 1. Установите Elasticsearch: | ||
− | < | + | <pre>sudo apt install elasticsearch</pre> |
− | sudo apt install elasticsearch | ||
− | </ | ||
2. Установите Logstash: | 2. Установите Logstash: | ||
− | < | + | <pre>sudo apt install logstash</pre> |
− | sudo apt install logstash | ||
− | </ | ||
3. Установите Kibana: | 3. Установите Kibana: | ||
− | < | + | <pre>sudo apt install kibana</pre> |
− | sudo apt install kibana | ||
− | </ | ||
=== Настройка Logstash === | === Настройка Logstash === | ||
1. Создайте конфигурацию Logstash: | 1. Создайте конфигурацию Logstash: | ||
− | < | + | <pre>sudo nano /etc/logstash/conf.d/syslog.conf</pre> |
− | sudo nano /etc/logstash/conf.d/syslog.conf | ||
− | </ | ||
2. Добавьте содержимое: | 2. Добавьте содержимое: | ||
− | < | + | <pre>input {</pre> |
− | input { | + | <pre>file {</pre> |
− | + | <pre>path => "/var/log/syslog"</pre> | |
− | + | <pre>type => "syslog"</pre> | |
− | + | <pre>}</pre> | |
− | + | <pre>}</pre> | |
− | } | + | <pre>filter {</pre> |
+ | <pre>if [type] == "syslog" {</pre> | ||
+ | <pre>grok {</pre> | ||
+ | <pre>match => { "message" => "%{SYSLOGTIMESTAMP:timestamp} %{IPORHOST:host} %{DATA:program}(?:\[%{POSINT:pid}\])?: %{GREEDYDATA:message}" }</pre> | ||
+ | <pre>}</pre> | ||
+ | <pre>}</pre> | ||
+ | <pre>}</pre> | ||
+ | <pre>output {</pre> | ||
+ | <pre>elasticsearch {</pre> | ||
+ | <pre>hosts => ["localhost:9200"]</pre> | ||
+ | <pre>}</pre> | ||
+ | <pre>}</pre> | ||
− | + | == 8. Создание скриптов мониторинга == | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | == 8. Создание скриптов мониторинга | ||
=== Скрипт мониторинга логов === | === Скрипт мониторинга логов === | ||
1. Создайте скрипт мониторинга: | 1. Создайте скрипт мониторинга: | ||
− | < | + | <pre>sudo nano /usr/local/bin/log-monitor.sh</pre> |
− | sudo nano /usr/local/bin/log-monitor.sh | ||
− | </ | ||
2. Добавьте содержимое: | 2. Добавьте содержимое: | ||
− | < | + | <pre>LOG_DIR="/var/log"</pre> |
− | + | <pre>ALERT_EMAIL="admin@example.com"</pre> | |
− | + | <pre>LOG_SIZE_LIMIT=100M</pre> | |
− | + | <pre>for log_file in $(find $LOG_DIR -name "*.log" -type f); do</pre> | |
− | LOG_DIR="/var/log" | + | <pre>size=$(du -h $log_file | cut -f1)</pre> |
− | ALERT_EMAIL="admin@example.com" | + | <pre>if [[ $size > $LOG_SIZE_LIMIT ]]; then</pre> |
− | LOG_SIZE_LIMIT=100M | + | <pre>echo "ALERT: Large log file: $log_file ($size)" | mail -s "Log Alert" $ALERT_EMAIL</pre> |
− | + | <pre>fi</pre> | |
− | + | <pre>done</pre> | |
− | for log_file in $(find $LOG_DIR -name "*.log" -type f); do | + | <pre>ERROR_COUNT=$(grep -c "ERROR\|FATAL\|CRITICAL" $LOG_DIR/syslog 2>/dev/null || echo "0")</pre> |
− | + | <pre>if [ $ERROR_COUNT -gt 10 ]; then</pre> | |
− | + | <pre>echo "ALERT: High error count in syslog: $ERROR_COUNT" | mail -s "Error Alert" $ALERT_EMAIL</pre> | |
− | + | <pre>fi</pre> | |
− | + | <pre>if [ ! -f $LOG_DIR/syslog ]; then</pre> | |
− | done | + | <pre>echo "ALERT: syslog file not found" | mail -s "Log Alert" $ALERT_EMAIL</pre> |
− | + | <pre>fi</pre> | |
− | |||
− | ERROR_COUNT=$(grep -c "ERROR\|FATAL\|CRITICAL" $LOG_DIR/syslog 2>/dev/null || echo "0") | ||
− | if [ $ERROR_COUNT -gt 10 ]; then | ||
− | |||
− | fi | ||
− | |||
− | |||
− | if [ ! -f $LOG_DIR/syslog ]; then | ||
− | |||
− | fi | ||
− | </ | ||
3. Сделайте скрипт исполняемым: | 3. Сделайте скрипт исполняемым: | ||
− | < | + | <pre>sudo chmod +x /usr/local/bin/log-monitor.sh</pre> |
− | sudo chmod +x /usr/local/bin/log-monitor.sh | ||
− | </ | ||
=== Скрипт анализа логов === | === Скрипт анализа логов === | ||
1. Создайте скрипт анализа: | 1. Создайте скрипт анализа: | ||
− | < | + | <pre>sudo nano /usr/local/bin/log-analyzer.sh</pre> |
− | sudo nano /usr/local/bin/log-analyzer.sh | ||
− | </ | ||
2. Добавьте содержимое: | 2. Добавьте содержимое: | ||
− | < | + | <pre>HOUR_AGO=$(date -d "1 hour ago" "+%b %d %H")</pre> |
− | + | <pre>echo "=== Log Analysis for the last hour ==="</pre> | |
− | + | <pre>echo "Time: $(date)"</pre> | |
− | + | <pre>echo ""</pre> | |
− | HOUR_AGO=$(date -d "1 hour ago" "+%b %d %H") | + | <pre>echo "Top IP addresses:"</pre> |
− | + | <pre>grep "$HOUR_AGO" /var/log/auth.log | awk '{print $11}' | sort | uniq -c | sort -nr | head -10</pre> | |
− | echo "=== Log Analysis for the last hour ===" | + | <pre>echo "Top users:"</pre> |
− | echo "Time: $(date)" | + | <pre>grep "$HOUR_AGO" /var/log/auth.log | awk '{print $9}' | sort | uniq -c | sort -nr | head -10</pre> |
− | echo "" | + | <pre>echo "Error count:"</pre> |
− | + | <pre>grep -c "ERROR\|FATAL\|CRITICAL" /var/log/syslog</pre> | |
− | + | <pre>echo "Warning count:"</pre> | |
− | echo "Top IP addresses:" | + | <pre>grep -c "WARNING\|WARN" /var/log/syslog</pre> |
− | grep "$HOUR_AGO" /var/log/auth.log | awk '{print $11}' | sort | uniq -c | sort -nr | head -10 | ||
− | |||
− | |||
− | echo "Top users:" | ||
− | grep "$HOUR_AGO" /var/log/auth.log | awk '{print $9}' | sort | uniq -c | sort -nr | head -10 | ||
− | |||
− | |||
− | echo "Error count:" | ||
− | grep -c "ERROR\|FATAL\|CRITICAL" /var/log/syslog | ||
− | |||
− | |||
− | echo "Warning count:" | ||
− | grep -c "WARNING\|WARN" /var/log/syslog | ||
− | </ | ||
3. Сделайте скрипт исполняемым: | 3. Сделайте скрипт исполняемым: | ||
− | < | + | <pre>sudo chmod +x /usr/local/bin/log-analyzer.sh</pre> |
− | sudo chmod +x /usr/local/bin/log-analyzer.sh | ||
− | </ | ||
− | == 9. Настройка автоматической ротации | + | == 9. Настройка автоматической ротации == |
=== Создание пользовательских правил === | === Создание пользовательских правил === | ||
1. Создайте правило для пользовательских логов: | 1. Создайте правило для пользовательских логов: | ||
− | < | + | <pre>sudo nano /etc/logrotate.d/custom</pre> |
− | sudo nano /etc/logrotate.d/custom | ||
− | </ | ||
2. Добавьте содержимое: | 2. Добавьте содержимое: | ||
− | < | + | <pre>/var/log/custom/*.log</pre> |
− | /var/log/custom/*.log | + | <pre>{</pre> |
− | { | + | <pre>daily</pre> |
− | + | <pre>rotate 30</pre> | |
− | + | <pre>compress</pre> | |
− | + | <pre>delaycompress</pre> | |
− | + | <pre>missingok</pre> | |
− | + | <pre>notifempty</pre> | |
− | + | <pre>create 644 root root</pre> | |
− | + | <pre>postrotate</pre> | |
− | + | <pre>/bin/kill -HUP `cat /var/run/rsyslogd.pid 2>/dev/null` 2>/dev/null || true</pre> | |
− | + | <pre>endscript</pre> | |
− | + | <pre>}</pre> | |
− | } | ||
− | </ | ||
=== Настройка cron для ротации === | === Настройка cron для ротации === | ||
1. Добавьте задачу в crontab: | 1. Добавьте задачу в crontab: | ||
− | < | + | <pre>sudo crontab -e</pre> |
− | sudo crontab -e | ||
− | </ | ||
2. Добавьте строку: | 2. Добавьте строку: | ||
− | < | + | <pre>0 2 * * * /usr/sbin/logrotate /etc/logrotate.conf</pre> |
− | |||
− | 0 2 * * * /usr/sbin/logrotate /etc/logrotate.conf | ||
− | </ | ||
− | == 10. Устранение неполадок | + | == 10. Устранение неполадок == |
=== Частые проблемы === | === Частые проблемы === | ||
1. '''Логи не ротируются''': | 1. '''Логи не ротируются''': | ||
− | * Проверьте конфигурацию: < | + | * Проверьте конфигурацию: <pre>sudo logrotate -d /etc/logrotate.conf</pre> |
− | * Проверьте права доступа: < | + | * Проверьте права доступа: <pre>ls -la /var/log/</pre> |
− | * Проверьте cron: < | + | * Проверьте cron: <pre>sudo systemctl status cron</pre> |
2. '''Логи занимают много места''': | 2. '''Логи занимают много места''': | ||
− | * Проверьте правила ротации: < | + | * Проверьте правила ротации: <pre>cat /etc/logrotate.d/*</pre> |
− | * Очистите старые логи: < | + | * Очистите старые логи: <pre>sudo find /var/log -name "*.log.*" -mtime +30 -delete</pre> |
* Настройте более агрессивную ротацию | * Настройте более агрессивную ротацию | ||
3. '''Логи не записываются''': | 3. '''Логи не записываются''': | ||
− | * Проверьте статус rsyslog: < | + | * Проверьте статус rsyslog: <pre>sudo systemctl status rsyslog</pre> |
* Проверьте права на файлы логов | * Проверьте права на файлы логов | ||
* Проверьте конфигурацию rsyslog | * Проверьте конфигурацию rsyslog | ||
Строка 460: | Строка 331: | ||
1. Проверьте статус служб логирования: | 1. Проверьте статус служб логирования: | ||
− | < | + | <pre>sudo systemctl status rsyslog</pre> |
− | sudo systemctl status rsyslog | + | <pre>sudo systemctl status systemd-journald</pre> |
− | sudo systemctl status systemd-journald | ||
− | </ | ||
2. Проверьте конфигурацию logrotate: | 2. Проверьте конфигурацию logrotate: | ||
− | < | + | <pre>sudo logrotate -d /etc/logrotate.conf</pre> |
− | sudo logrotate -d /etc/logrotate.conf | ||
− | </ | ||
3. Проверьте права доступа: | 3. Проверьте права доступа: | ||
− | < | + | <pre>ls -la /var/log/</pre> |
− | ls -la /var/log/ | ||
− | </ | ||
4. Проверьте использование диска: | 4. Проверьте использование диска: | ||
− | < | + | <pre>du -sh /var/log/*</pre> |
− | du -sh /var/log/* | ||
− | </ | ||
− | == 11. Оптимизация производительности | + | == 11. Оптимизация производительности == |
=== Настройки производительности === | === Настройки производительности === | ||
1. Отредактируйте конфигурацию rsyslog: | 1. Отредактируйте конфигурацию rsyslog: | ||
− | < | + | <pre>sudo nano /etc/rsyslog.conf</pre> |
− | sudo nano /etc/rsyslog.conf | ||
− | </ | ||
2. Добавьте настройки производительности: | 2. Добавьте настройки производительности: | ||
− | < | + | <pre>$WorkDirectory /var/spool/rsyslog</pre> |
− | + | <pre>$ActionQueueType LinkedList</pre> | |
− | $WorkDirectory /var/spool/rsyslog | + | <pre>$ActionQueueFileName srvrfwd</pre> |
− | $ActionQueueType LinkedList | + | <pre>$ActionResumeRetryCount -1</pre> |
− | $ActionQueueFileName srvrfwd | + | <pre>$ActionQueueSaveOnShutdown on</pre> |
− | $ActionResumeRetryCount -1 | + | <pre>$ActionQueueMaxDiskSpace 1g</pre> |
− | $ActionQueueSaveOnShutdown on | + | <pre>$ActionQueueSize 10000</pre> |
− | $ActionQueueMaxDiskSpace 1g | ||
− | $ActionQueueSize 10000 | ||
− | </ | ||
=== Мониторинг производительности === | === Мониторинг производительности === | ||
1. Создайте скрипт мониторинга производительности: | 1. Создайте скрипт мониторинга производительности: | ||
− | < | + | <pre>sudo nano /usr/local/bin/log-performance.sh</pre> |
− | sudo nano /usr/local/bin/log-performance.sh | ||
− | </ | ||
2. Добавьте содержимое: | 2. Добавьте содержимое: | ||
− | < | + | <pre>echo "=== Log Performance Statistics ==="</pre> |
− | + | <pre>echo "Date: $(date)"</pre> | |
− | + | <pre>echo ""</pre> | |
− | echo "=== Log Performance Statistics ===" | + | <pre>echo "Log directory sizes:"</pre> |
− | echo "Date: $(date)" | + | <pre>du -sh /var/log/* | sort -hr</pre> |
− | echo "" | + | <pre>echo "Number of log files:"</pre> |
− | + | <pre>find /var/log -name "*.log" -type f | wc -l</pre> | |
− | + | <pre>echo "Logging services status:"</pre> | |
− | echo "Log directory sizes:" | + | <pre>systemctl is-active rsyslog</pre> |
− | du -sh /var/log/* | sort -hr | + | <pre>systemctl is-active systemd-journald</pre> |
− | + | <pre>echo "Memory usage:"</pre> | |
− | + | <pre>ps aux | grep -E "(rsyslog|journald)" | grep -v grep</pre> | |
− | echo "Number of log files:" | ||
− | find /var/log -name "*.log" -type f | wc -l | ||
− | |||
− | |||
− | echo "Logging services status:" | ||
− | systemctl is-active rsyslog | ||
− | systemctl is-active systemd-journald | ||
− | |||
− | |||
− | echo "Memory usage:" | ||
− | ps aux | grep -E "(rsyslog|journald)" | grep -v grep | ||
− | </ | ||
3. Сделайте скрипт исполняемым: | 3. Сделайте скрипт исполняемым: | ||
− | < | + | <pre>sudo chmod +x /usr/local/bin/log-performance.sh</pre> |
− | sudo chmod +x /usr/local/bin/log-performance.sh | ||
− | </ | ||
− | == 12. Дополнительные возможности | + | == 12. Дополнительные возможности == |
=== Настройка алертов === | === Настройка алертов === | ||
1. Создайте скрипт алертов: | 1. Создайте скрипт алертов: | ||
− | < | + | <pre>sudo nano /usr/local/bin/log-alerts.sh</pre> |
− | sudo nano /usr/local/bin/log-alerts.sh | ||
− | </ | ||
2. Добавьте содержимое: | 2. Добавьте содержимое: | ||
− | < | + | <pre>ALERT_EMAIL="admin@example.com"</pre> |
− | + | <pre>LOG_FILE="/var/log/syslog"</pre> | |
− | + | <pre>CRITICAL_COUNT=$(grep -c "CRITICAL\|FATAL" $LOG_FILE 2>/dev/null || echo "0")</pre> | |
− | + | <pre>if [ $CRITICAL_COUNT -gt 0 ]; then</pre> | |
− | ALERT_EMAIL="admin@example.com" | + | <pre>echo "ALERT: Critical errors found: $CRITICAL_COUNT" | mail -s "Critical Log Alert" $ALERT_EMAIL</pre> |
− | LOG_FILE="/var/log/syslog" | + | <pre>fi</pre> |
− | + | <pre>FAILED_LOGINS=$(grep -c "Failed password" $LOG_FILE 2>/dev/null || echo "0")</pre> | |
− | + | <pre>if [ $FAILED_LOGINS -gt 10 ]; then</pre> | |
− | CRITICAL_COUNT=$(grep -c "CRITICAL\|FATAL" $LOG_FILE 2>/dev/null || echo "0") | + | <pre>echo "ALERT: High number of failed logins: $FAILED_LOGINS" | mail -s "Security Alert" $ALERT_EMAIL</pre> |
− | if [ $CRITICAL_COUNT -gt 0 ]; then | + | <pre>fi</pre> |
− | + | <pre>LOG_SIZE=$(du -h $LOG_FILE | cut -f1)</pre> | |
− | fi | + | <pre>if [[ $LOG_SIZE > "100M" ]]; then</pre> |
− | + | <pre>echo "ALERT: Large log file: $LOG_FILE ($LOG_SIZE)" | mail -s "Log Size Alert" $ALERT_EMAIL</pre> | |
− | + | <pre>fi</pre> | |
− | FAILED_LOGINS=$(grep -c "Failed password" $LOG_FILE 2>/dev/null || echo "0") | ||
− | if [ $FAILED_LOGINS -gt 10 ]; then | ||
− | |||
− | fi | ||
− | |||
− | |||
− | LOG_SIZE=$(du -h $LOG_FILE | cut -f1) | ||
− | if [[ $LOG_SIZE > "100M" ]]; then | ||
− | |||
− | fi | ||
− | </ | ||
3. Сделайте скрипт исполняемым: | 3. Сделайте скрипт исполняемым: | ||
− | < | + | <pre>sudo chmod +x /usr/local/bin/log-alerts.sh</pre> |
− | sudo chmod +x /usr/local/bin/log-alerts.sh | ||
− | </ | ||
4. Добавьте в crontab: | 4. Добавьте в crontab: | ||
− | < | + | <pre>*/15 * * * * /usr/local/bin/log-alerts.sh</pre> |
− | |||
− | */15 * * * * /usr/local/bin/log-alerts.sh | ||
− | </ | ||
== Заключение == | == Заключение == |
Текущая версия на 10:37, 15 октября 2025
Содержание
- 1 Настройка логирования и ротации логов
- 1.1 1. Подготовка системы
- 1.2 2. Основы логирования в Linux
- 1.3 3. Настройка rsyslog
- 1.4 4. Настройка systemd-journald
- 1.5 5. Настройка logrotate
- 1.6 6. Настройка централизованного логирования
- 1.7 7. Настройка мониторинга логов
- 1.8 8. Создание скриптов мониторинга
- 1.9 9. Настройка автоматической ротации
- 1.10 10. Устранение неполадок
- 1.11 11. Оптимизация производительности
- 1.12 12. Дополнительные возможности
- 1.13 Заключение
Настройка логирования и ротации логов
1. Подготовка системы
- Войдите в систему под учетной записью с правами root или пользователя с правами sudo.
- Убедитесь, что у вас есть доступ к серверу через SSH или консоль.
2. Основы логирования в Linux
Система логирования
Linux использует несколько систем логирования:
- systemd-journald - системные логи
- rsyslog - традиционная система логирования
- syslog-ng - альтернативная система логирования
- logrotate - ротация логов
Основные директории логов
1. Системные логи:
/var/log/syslog
/var/log/auth.log
/var/log/kern.log
/var/log/mail.log
2. Логи приложений:
/var/log/apache2/
/var/log/nginx/
/var/log/mysql/
/var/log/postfix/
3. Логи systemd:
journalctl
3. Настройка rsyslog
Установка и настройка
1. Установите rsyslog:
sudo apt install rsyslog
2. Проверьте статус:
sudo systemctl status rsyslog
3. Отредактируйте конфигурацию:
sudo nano /etc/rsyslog.conf
Основная конфигурация
1. Настройте основные параметры:
$ModLoad imuxsock
$ModLoad imklog
$ModLoad immark
$FileCreateMode 0640
$DirCreateMode 0755
$Umask 0022
$WorkDirectory /var/spool/rsyslog
$ActionQueueType LinkedList
$ActionQueueFileName srvrfwd
$ActionResumeRetryCount -1
$ActionQueueSaveOnShutdown on
Настройка правил логирования
1. Добавьте правила логирования:
auth,authpriv.* /var/log/auth.log
kern.* /var/log/kern.log
mail.* /var/log/mail.log
cron.* /var/log/cron.log
*.info;mail.none;authpriv.none;cron.none /var/log/syslog
*.err /var/log/errors.log
4. Настройка systemd-journald
Основная конфигурация
1. Отредактируйте конфигурацию journald:
sudo nano /etc/systemd/journald.conf
2. Настройте основные параметры:
[Journal]
Storage=persistent
SystemMaxUse=1G
SystemMaxFileSize=100M
SystemMaxFiles=10
RuntimeMaxUse=100M
RuntimeMaxFileSize=10M
RuntimeMaxFiles=5
MaxRetentionSec=1month
3. Перезапустите journald:
sudo systemctl restart systemd-journald
Управление журналами
1. Просмотрите все логи:
sudo journalctl
2. Просмотрите логи за последний час:
sudo journalctl --since "1 hour ago"
3. Просмотрите логи службы:
sudo journalctl -u service_name
4. Просмотрите логи в реальном времени:
sudo journalctl -f
5. Настройка logrotate
Основная конфигурация
1. Отредактируйте основной файл конфигурации:
sudo nano /etc/logrotate.conf
2. Настройте основные параметры:
weekly
rotate 4
create
dateext
compress
delaycompress
missingok
notifempty
include /etc/logrotate.d
Создание правил ротации
1. Создайте правило для системных логов:
sudo nano /etc/logrotate.d/syslog
2. Добавьте содержимое:
/var/log/syslog
{
daily
rotate 7
compress
delaycompress
missingok
notifempty
postrotate
/usr/lib/rsyslog/rsyslog-rotate
endscript
}
3. Создайте правило для Apache:
sudo nano /etc/logrotate.d/apache2
4. Добавьте содержимое:
/var/log/apache2/*.log
{
daily
rotate 14
compress
delaycompress
missingok
notifempty
create 644 root root
postrotate
/bin/kill -USR1 `cat /var/run/apache2.pid 2>/dev/null` 2>/dev/null || true
endscript
}
6. Настройка централизованного логирования
Настройка rsyslog сервера
1. Отредактируйте конфигурацию сервера:
sudo nano /etc/rsyslog.conf
2. Добавьте настройки для приема логов:
$ModLoad imudp
$UDPServerRun 514
$ModLoad imtcp
$InputTCPServerRun 514
$template RemoteLogs,"/var/log/remote/%HOSTNAME%/%PROGRAMNAME%.log"
*.* ?RemoteLogs
3. Создайте директорию для удаленных логов:
sudo mkdir -p /var/log/remote
sudo chown syslog:syslog /var/log/remote
Настройка rsyslog клиента
1. На клиентском сервере отредактируйте конфигурацию:
sudo nano /etc/rsyslog.conf
2. Добавьте настройки для отправки логов:
*.* @@log-server.example.com:514
3. Перезапустите rsyslog:
sudo systemctl restart rsyslog
7. Настройка мониторинга логов
Установка и настройка ELK стека
1. Установите Elasticsearch:
sudo apt install elasticsearch
2. Установите Logstash:
sudo apt install logstash
3. Установите Kibana:
sudo apt install kibana
Настройка Logstash
1. Создайте конфигурацию Logstash:
sudo nano /etc/logstash/conf.d/syslog.conf
2. Добавьте содержимое:
input {
file {
path => "/var/log/syslog"
type => "syslog"
}
}
filter {
if [type] == "syslog" {
grok {
match => { "message" => "%{SYSLOGTIMESTAMP:timestamp} %{IPORHOST:host} %{DATA:program}(?:\[%{POSINT:pid}\])?: %{GREEDYDATA:message}" }
}
}
}
output {
elasticsearch {
hosts => ["localhost:9200"]
}
}
8. Создание скриптов мониторинга
Скрипт мониторинга логов
1. Создайте скрипт мониторинга:
sudo nano /usr/local/bin/log-monitor.sh
2. Добавьте содержимое:
LOG_DIR="/var/log"
ALERT_EMAIL="admin@example.com"
LOG_SIZE_LIMIT=100M
for log_file in $(find $LOG_DIR -name "*.log" -type f); do
size=$(du -h $log_file | cut -f1)
if [[ $size > $LOG_SIZE_LIMIT ]]; then
echo "ALERT: Large log file: $log_file ($size)" | mail -s "Log Alert" $ALERT_EMAIL
fi
done
ERROR_COUNT=$(grep -c "ERROR\|FATAL\|CRITICAL" $LOG_DIR/syslog 2>/dev/null || echo "0")
if [ $ERROR_COUNT -gt 10 ]; then
echo "ALERT: High error count in syslog: $ERROR_COUNT" | mail -s "Error Alert" $ALERT_EMAIL
fi
if [ ! -f $LOG_DIR/syslog ]; then
echo "ALERT: syslog file not found" | mail -s "Log Alert" $ALERT_EMAIL
fi
3. Сделайте скрипт исполняемым:
sudo chmod +x /usr/local/bin/log-monitor.sh
Скрипт анализа логов
1. Создайте скрипт анализа:
sudo nano /usr/local/bin/log-analyzer.sh
2. Добавьте содержимое:
HOUR_AGO=$(date -d "1 hour ago" "+%b %d %H")
echo "=== Log Analysis for the last hour ==="
echo "Time: $(date)"
echo ""
echo "Top IP addresses:"
grep "$HOUR_AGO" /var/log/auth.log | awk '{print $11}' | sort | uniq -c | sort -nr | head -10
echo "Top users:"
grep "$HOUR_AGO" /var/log/auth.log | awk '{print $9}' | sort | uniq -c | sort -nr | head -10
echo "Error count:"
grep -c "ERROR\|FATAL\|CRITICAL" /var/log/syslog
echo "Warning count:"
grep -c "WARNING\|WARN" /var/log/syslog
3. Сделайте скрипт исполняемым:
sudo chmod +x /usr/local/bin/log-analyzer.sh
9. Настройка автоматической ротации
Создание пользовательских правил
1. Создайте правило для пользовательских логов:
sudo nano /etc/logrotate.d/custom
2. Добавьте содержимое:
/var/log/custom/*.log
{
daily
rotate 30
compress
delaycompress
missingok
notifempty
create 644 root root
postrotate
/bin/kill -HUP `cat /var/run/rsyslogd.pid 2>/dev/null` 2>/dev/null || true
endscript
}
Настройка cron для ротации
1. Добавьте задачу в crontab:
sudo crontab -e
2. Добавьте строку:
0 2 * * * /usr/sbin/logrotate /etc/logrotate.conf
10. Устранение неполадок
Частые проблемы
1. Логи не ротируются:
- Проверьте конфигурацию:
sudo logrotate -d /etc/logrotate.conf
- Проверьте права доступа:
ls -la /var/log/
- Проверьте cron:
sudo systemctl status cron
2. Логи занимают много места:
- Проверьте правила ротации:
cat /etc/logrotate.d/*
- Очистите старые логи:
sudo find /var/log -name "*.log.*" -mtime +30 -delete
- Настройте более агрессивную ротацию
3. Логи не записываются:
- Проверьте статус rsyslog:
sudo systemctl status rsyslog
- Проверьте права на файлы логов
- Проверьте конфигурацию rsyslog
Диагностика
1. Проверьте статус служб логирования:
sudo systemctl status rsyslog
sudo systemctl status systemd-journald
2. Проверьте конфигурацию logrotate:
sudo logrotate -d /etc/logrotate.conf
3. Проверьте права доступа:
ls -la /var/log/
4. Проверьте использование диска:
du -sh /var/log/*
11. Оптимизация производительности
Настройки производительности
1. Отредактируйте конфигурацию rsyslog:
sudo nano /etc/rsyslog.conf
2. Добавьте настройки производительности:
$WorkDirectory /var/spool/rsyslog
$ActionQueueType LinkedList
$ActionQueueFileName srvrfwd
$ActionResumeRetryCount -1
$ActionQueueSaveOnShutdown on
$ActionQueueMaxDiskSpace 1g
$ActionQueueSize 10000
Мониторинг производительности
1. Создайте скрипт мониторинга производительности:
sudo nano /usr/local/bin/log-performance.sh
2. Добавьте содержимое:
echo "=== Log Performance Statistics ==="
echo "Date: $(date)"
echo ""
echo "Log directory sizes:"
du -sh /var/log/* | sort -hr
echo "Number of log files:"
find /var/log -name "*.log" -type f | wc -l
echo "Logging services status:"
systemctl is-active rsyslog
systemctl is-active systemd-journald
echo "Memory usage:"
ps aux | grep -E "(rsyslog|journald)" | grep -v grep
3. Сделайте скрипт исполняемым:
sudo chmod +x /usr/local/bin/log-performance.sh
12. Дополнительные возможности
Настройка алертов
1. Создайте скрипт алертов:
sudo nano /usr/local/bin/log-alerts.sh
2. Добавьте содержимое:
ALERT_EMAIL="admin@example.com"
LOG_FILE="/var/log/syslog"
CRITICAL_COUNT=$(grep -c "CRITICAL\|FATAL" $LOG_FILE 2>/dev/null || echo "0")
if [ $CRITICAL_COUNT -gt 0 ]; then
echo "ALERT: Critical errors found: $CRITICAL_COUNT" | mail -s "Critical Log Alert" $ALERT_EMAIL
fi
FAILED_LOGINS=$(grep -c "Failed password" $LOG_FILE 2>/dev/null || echo "0")
if [ $FAILED_LOGINS -gt 10 ]; then
echo "ALERT: High number of failed logins: $FAILED_LOGINS" | mail -s "Security Alert" $ALERT_EMAIL
fi
LOG_SIZE=$(du -h $LOG_FILE | cut -f1)
if [[ $LOG_SIZE > "100M" ]]; then
echo "ALERT: Large log file: $LOG_FILE ($LOG_SIZE)" | mail -s "Log Size Alert" $ALERT_EMAIL
fi
3. Сделайте скрипт исполняемым:
sudo chmod +x /usr/local/bin/log-alerts.sh
4. Добавьте в crontab:
*/15 * * * * /usr/local/bin/log-alerts.sh
Заключение
Система логирования и ротации логов настроена! Теперь ваши логи организованы и автоматически управляются.
Для размещения ваших проектов с настроенным логированием на надежном хостинге рекомендуем воспользоваться услугами [ARK-HOSTER.RU](https://ark-hoster.ru):
- [Выделенные серверы](https://ark-hoster.ru/dedicated/) - для проектов с большими объемами логов
- [VPS/VDS серверы](https://ark-hoster.ru/vpsgame/) - для небольших и средних проектов
Наши специалисты помогут с настройкой логирования и обеспечением мониторинга вашего сервера!