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

Материал из ARK-HOSTER.RU | Документация хостинга
Перейти к навигации Перейти к поиску
Новая страница: «= Настройка логирования и ротации логов = == 1. Подготовка системы == * Войдите в систему по…»
 
Нет описания правки
 
(не показана 1 промежуточная версия этого же участника)
Строка 6: Строка 6:
* Убедитесь, что у вас есть доступ к серверу через SSH или консоль.
* Убедитесь, что у вас есть доступ к серверу через SSH или консоль.


== 2. Основы логирования в Linux ===
== 2. Основы логирования в Linux ==


=== Система логирования ===
=== Система логирования ===
Строка 19: Строка 19:


1. '''Системные логи''':
1. '''Системные логи''':
<code>
<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
</code>


2. '''Логи приложений''':
2. '''Логи приложений''':
<code>
<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/
</code>


3. '''Логи systemd''':
3. '''Логи systemd''':
<code>
<pre>journalctl</pre>
journalctl
</code>


== 3. Настройка rsyslog ===
== 3. Настройка rsyslog ==


=== Установка и настройка ===
=== Установка и настройка ===


1. Установите rsyslog:
1. Установите rsyslog:
<code>
<pre>sudo apt install rsyslog</pre>
sudo apt install rsyslog
</code>


2. Проверьте статус:
2. Проверьте статус:
<code>
<pre>sudo systemctl status rsyslog</pre>
sudo systemctl status rsyslog
</code>


3. Отредактируйте конфигурацию:
3. Отредактируйте конфигурацию:
<code>
<pre>sudo nano /etc/rsyslog.conf</pre>
sudo nano /etc/rsyslog.conf
</code>


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


1. Настройте основные параметры:
1. Настройте основные параметры:
<code>
<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
</code>


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


1. Добавьте правила логирования:
1. Добавьте правила логирования:
<code>
<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
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 ==


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


1. Отредактируйте конфигурацию journald:
1. Отредактируйте конфигурацию journald:
<code>
<pre>sudo nano /etc/systemd/journald.conf</pre>
sudo nano /etc/systemd/journald.conf
</code>


2. Настройте основные параметры:
2. Настройте основные параметры:
<code>
<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
</code>


3. Перезапустите journald:
3. Перезапустите journald:
<code>
<pre>sudo systemctl restart systemd-journald</pre>
sudo systemctl restart systemd-journald
</code>


=== Управление журналами ===
=== Управление журналами ===


1. Просмотрите все логи:
1. Просмотрите все логи:
<code>
<pre>sudo journalctl</pre>
sudo journalctl
</code>


2. Просмотрите логи за последний час:
2. Просмотрите логи за последний час:
<code>
<pre>sudo journalctl --since "1 hour ago"</pre>
sudo journalctl --since "1 hour ago"
</code>


3. Просмотрите логи службы:
3. Просмотрите логи службы:
<code>
<pre>sudo journalctl -u service_name</pre>
sudo journalctl -u service_name
</code>


4. Просмотрите логи в реальном времени:
4. Просмотрите логи в реальном времени:
<code>
<pre>sudo journalctl -f</pre>
sudo journalctl -f
</code>


== 5. Настройка logrotate ===
== 5. Настройка logrotate ==


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


1. Отредактируйте основной файл конфигурации:
1. Отредактируйте основной файл конфигурации:
<code>
<pre>sudo nano /etc/logrotate.conf</pre>
sudo nano /etc/logrotate.conf
</code>


2. Настройте основные параметры:
2. Настройте основные параметры:
<code>
<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
</code>


=== Создание правил ротации ===
=== Создание правил ротации ===


1. Создайте правило для системных логов:
1. Создайте правило для системных логов:
<code>
<pre>sudo nano /etc/logrotate.d/syslog</pre>
sudo nano /etc/logrotate.d/syslog
</code>


2. Добавьте содержимое:
2. Добавьте содержимое:
<code>
<pre>/var/log/syslog</pre>
/var/log/syslog
<pre>{</pre>
{
<pre>daily</pre>
    daily
<pre>rotate 7</pre>
    rotate 7
<pre>compress</pre>
    compress
<pre>delaycompress</pre>
    delaycompress
<pre>missingok</pre>
    missingok
<pre>notifempty</pre>
    notifempty
<pre>postrotate</pre>
    postrotate
<pre>/usr/lib/rsyslog/rsyslog-rotate</pre>
        /usr/lib/rsyslog/rsyslog-rotate
<pre>endscript</pre>
    endscript
<pre>}</pre>
}
</code>


3. Создайте правило для Apache:
3. Создайте правило для Apache:
<code>
<pre>sudo nano /etc/logrotate.d/apache2</pre>
sudo nano /etc/logrotate.d/apache2
</code>


4. Добавьте содержимое:
4. Добавьте содержимое:
<code>
<pre>/var/log/apache2/*.log</pre>
/var/log/apache2/*.log
<pre>{</pre>
{
<pre>daily</pre>
    daily
<pre>rotate 14</pre>
    rotate 14
<pre>compress</pre>
    compress
<pre>delaycompress</pre>
    delaycompress
<pre>missingok</pre>
    missingok
<pre>notifempty</pre>
    notifempty
<pre>create 644 root root</pre>
    create 644 root root
<pre>postrotate</pre>
    postrotate
<pre>/bin/kill -USR1 `cat /var/run/apache2.pid 2>/dev/null` 2>/dev/null || true</pre>
        /bin/kill -USR1 `cat /var/run/apache2.pid 2>/dev/null` 2>/dev/null || true
<pre>endscript</pre>
    endscript
<pre>}</pre>
}
</code>


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


=== Настройка rsyslog сервера ===
=== Настройка rsyslog сервера ===


1. Отредактируйте конфигурацию сервера:
1. Отредактируйте конфигурацию сервера:
<code>
<pre>sudo nano /etc/rsyslog.conf</pre>
sudo nano /etc/rsyslog.conf
</code>


2. Добавьте настройки для приема логов:
2. Добавьте настройки для приема логов:
<code>
<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
</code>


3. Создайте директорию для удаленных логов:
3. Создайте директорию для удаленных логов:
<code>
<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
</code>


=== Настройка rsyslog клиента ===
=== Настройка rsyslog клиента ===


1. На клиентском сервере отредактируйте конфигурацию:
1. На клиентском сервере отредактируйте конфигурацию:
<code>
<pre>sudo nano /etc/rsyslog.conf</pre>
sudo nano /etc/rsyslog.conf
</code>


2. Добавьте настройки для отправки логов:
2. Добавьте настройки для отправки логов:
<code>
<pre>*.* @@log-server.example.com:514</pre>
# Настройки для отправки логов
*.* @@log-server.example.com:514
</code>


3. Перезапустите rsyslog:
3. Перезапустите rsyslog:
<code>
<pre>sudo systemctl restart rsyslog</pre>
sudo systemctl restart rsyslog
</code>


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


=== Установка и настройка ELK стека ===
=== Установка и настройка ELK стека ===


1. Установите Elasticsearch:
1. Установите Elasticsearch:
<code>
<pre>sudo apt install elasticsearch</pre>
sudo apt install elasticsearch
</code>


2. Установите Logstash:
2. Установите Logstash:
<code>
<pre>sudo apt install logstash</pre>
sudo apt install logstash
</code>


3. Установите Kibana:
3. Установите Kibana:
<code>
<pre>sudo apt install kibana</pre>
sudo apt install kibana
</code>


=== Настройка Logstash ===
=== Настройка Logstash ===


1. Создайте конфигурацию Logstash:
1. Создайте конфигурацию Logstash:
<code>
<pre>sudo nano /etc/logstash/conf.d/syslog.conf</pre>
sudo nano /etc/logstash/conf.d/syslog.conf
</code>


2. Добавьте содержимое:
2. Добавьте содержимое:
<code>
<pre>input {</pre>
input {
<pre>file {</pre>
    file {
<pre>path => "/var/log/syslog"</pre>
        path => "/var/log/syslog"
<pre>type => "syslog"</pre>
        type => "syslog"
<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>


filter {
== 8. Создание скриптов мониторинга ==
    if [type] == "syslog" {
        grok {
            match => { "message" => "%{SYSLOGTIMESTAMP:timestamp} %{IPORHOST:host} %{DATA:program}(?:\[%{POSINT:pid}\])?: %{GREEDYDATA:message}" }
        }
    }
}
 
output {
    elasticsearch {
        hosts => ["localhost:9200"]
    }
}
</code>
 
== 8. Создание скриптов мониторинга ===


=== Скрипт мониторинга логов ===
=== Скрипт мониторинга логов ===


1. Создайте скрипт мониторинга:
1. Создайте скрипт мониторинга:
<code>
<pre>sudo nano /usr/local/bin/log-monitor.sh</pre>
sudo nano /usr/local/bin/log-monitor.sh
</code>


2. Добавьте содержимое:
2. Добавьте содержимое:
<code>
<pre>LOG_DIR="/var/log"</pre>
#!/bin/bash
<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>
    size=$(du -h $log_file | cut -f1)
<pre>if [ $ERROR_COUNT -gt 10 ]; then</pre>
    if [[ $size > $LOG_SIZE_LIMIT ]]; then
<pre>echo "ALERT: High error count in syslog: $ERROR_COUNT" | mail -s "Error Alert" $ALERT_EMAIL</pre>
        echo "ALERT: Large log file: $log_file ($size)" | mail -s "Log Alert" $ALERT_EMAIL
<pre>fi</pre>
    fi
<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
    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>
<pre>sudo chmod +x /usr/local/bin/log-monitor.sh</pre>
sudo chmod +x /usr/local/bin/log-monitor.sh
</code>


=== Скрипт анализа логов ===
=== Скрипт анализа логов ===


1. Создайте скрипт анализа:
1. Создайте скрипт анализа:
<code>
<pre>sudo nano /usr/local/bin/log-analyzer.sh</pre>
sudo nano /usr/local/bin/log-analyzer.sh
</code>


2. Добавьте содержимое:
2. Добавьте содержимое:
<code>
<pre>HOUR_AGO=$(date -d "1 hour ago" "+%b %d %H")</pre>
#!/bin/bash
<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>
# Топ IP адресов
<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
</code>


3. Сделайте скрипт исполняемым:
3. Сделайте скрипт исполняемым:
<code>
<pre>sudo chmod +x /usr/local/bin/log-analyzer.sh</pre>
sudo chmod +x /usr/local/bin/log-analyzer.sh
</code>


== 9. Настройка автоматической ротации ===
== 9. Настройка автоматической ротации ==


=== Создание пользовательских правил ===
=== Создание пользовательских правил ===


1. Создайте правило для пользовательских логов:
1. Создайте правило для пользовательских логов:
<code>
<pre>sudo nano /etc/logrotate.d/custom</pre>
sudo nano /etc/logrotate.d/custom
</code>


2. Добавьте содержимое:
2. Добавьте содержимое:
<code>
<pre>/var/log/custom/*.log</pre>
/var/log/custom/*.log
<pre>{</pre>
{
<pre>daily</pre>
    daily
<pre>rotate 30</pre>
    rotate 30
<pre>compress</pre>
    compress
<pre>delaycompress</pre>
    delaycompress
<pre>missingok</pre>
    missingok
<pre>notifempty</pre>
    notifempty
<pre>create 644 root root</pre>
    create 644 root root
<pre>postrotate</pre>
    postrotate
<pre>/bin/kill -HUP `cat /var/run/rsyslogd.pid 2>/dev/null` 2>/dev/null || true</pre>
        /bin/kill -HUP `cat /var/run/rsyslogd.pid 2>/dev/null` 2>/dev/null || true
<pre>endscript</pre>
    endscript
<pre>}</pre>
}
</code>


=== Настройка cron для ротации ===
=== Настройка cron для ротации ===


1. Добавьте задачу в crontab:
1. Добавьте задачу в crontab:
<code>
<pre>sudo crontab -e</pre>
sudo crontab -e
</code>


2. Добавьте строку:
2. Добавьте строку:
<code>
<pre>0 2 * * * /usr/sbin/logrotate /etc/logrotate.conf</pre>
# Ежедневная ротация логов в 2:00
0 2 * * * /usr/sbin/logrotate /etc/logrotate.conf
</code>


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


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


1. '''Логи не ротируются''':
1. '''Логи не ротируются''':
* Проверьте конфигурацию: <code>sudo logrotate -d /etc/logrotate.conf</code>
* Проверьте конфигурацию: <pre>sudo logrotate -d /etc/logrotate.conf</pre>
* Проверьте права доступа: <code>ls -la /var/log/</code>
* Проверьте права доступа: <pre>ls -la /var/log/</pre>
* Проверьте cron: <code>sudo systemctl status cron</code>
* Проверьте cron: <pre>sudo systemctl status cron</pre>


2. '''Логи занимают много места''':
2. '''Логи занимают много места''':
* Проверьте правила ротации: <code>cat /etc/logrotate.d/*</code>
* Проверьте правила ротации: <pre>cat /etc/logrotate.d/*</pre>
* Очистите старые логи: <code>sudo find /var/log -name "*.log.*" -mtime +30 -delete</code>
* Очистите старые логи: <pre>sudo find /var/log -name "*.log.*" -mtime +30 -delete</pre>
* Настройте более агрессивную ротацию
* Настройте более агрессивную ротацию


3. '''Логи не записываются''':
3. '''Логи не записываются''':
* Проверьте статус rsyslog: <code>sudo systemctl status rsyslog</code>
* Проверьте статус rsyslog: <pre>sudo systemctl status rsyslog</pre>
* Проверьте права на файлы логов
* Проверьте права на файлы логов
* Проверьте конфигурацию rsyslog
* Проверьте конфигурацию rsyslog
Строка 460: Строка 331:


1. Проверьте статус служб логирования:
1. Проверьте статус служб логирования:
<code>
<pre>sudo systemctl status rsyslog</pre>
sudo systemctl status rsyslog
<pre>sudo systemctl status systemd-journald</pre>
sudo systemctl status systemd-journald
</code>


2. Проверьте конфигурацию logrotate:
2. Проверьте конфигурацию logrotate:
<code>
<pre>sudo logrotate -d /etc/logrotate.conf</pre>
sudo logrotate -d /etc/logrotate.conf
</code>


3. Проверьте права доступа:
3. Проверьте права доступа:
<code>
<pre>ls -la /var/log/</pre>
ls -la /var/log/
</code>


4. Проверьте использование диска:
4. Проверьте использование диска:
<code>
<pre>du -sh /var/log/*</pre>
du -sh /var/log/*
</code>


== 11. Оптимизация производительности ===
== 11. Оптимизация производительности ==


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


1. Отредактируйте конфигурацию rsyslog:
1. Отредактируйте конфигурацию rsyslog:
<code>
<pre>sudo nano /etc/rsyslog.conf</pre>
sudo nano /etc/rsyslog.conf
</code>


2. Добавьте настройки производительности:
2. Добавьте настройки производительности:
<code>
<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
</code>


=== Мониторинг производительности ===
=== Мониторинг производительности ===


1. Создайте скрипт мониторинга производительности:
1. Создайте скрипт мониторинга производительности:
<code>
<pre>sudo nano /usr/local/bin/log-performance.sh</pre>
sudo nano /usr/local/bin/log-performance.sh
</code>


2. Добавьте содержимое:
2. Добавьте содержимое:
<code>
<pre>echo "=== Log Performance Statistics ==="</pre>
#!/bin/bash
<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
</code>


3. Сделайте скрипт исполняемым:
3. Сделайте скрипт исполняемым:
<code>
<pre>sudo chmod +x /usr/local/bin/log-performance.sh</pre>
sudo chmod +x /usr/local/bin/log-performance.sh
</code>


== 12. Дополнительные возможности ===
== 12. Дополнительные возможности ==


=== Настройка алертов ===
=== Настройка алертов ===


1. Создайте скрипт алертов:
1. Создайте скрипт алертов:
<code>
<pre>sudo nano /usr/local/bin/log-alerts.sh</pre>
sudo nano /usr/local/bin/log-alerts.sh
</code>


2. Добавьте содержимое:
2. Добавьте содержимое:
<code>
<pre>ALERT_EMAIL="admin@example.com"</pre>
#!/bin/bash
<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>
    echo "ALERT: Critical errors found: $CRITICAL_COUNT" | mail -s "Critical Log Alert" $ALERT_EMAIL
<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
    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>
<pre>sudo chmod +x /usr/local/bin/log-alerts.sh</pre>
sudo chmod +x /usr/local/bin/log-alerts.sh
</code>


4. Добавьте в crontab:
4. Добавьте в crontab:
<code>
<pre>*/15 * * * * /usr/local/bin/log-alerts.sh</pre>
# Проверка алертов каждые 15 минут
*/15 * * * * /usr/local/bin/log-alerts.sh
</code>


== Заключение ==
== Заключение ==

Текущая версия от 10:37, 15 октября 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):

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