Настройка логирования и ротации логов — различия между версиями

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

Версия 19:59, 14 октября 2025

Содержание

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

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):

Наши специалисты помогут с настройкой логирования и обеспечением мониторинга вашего сервера!