Log-сервер — централизованная система сбора и хранения логов с нескольких серверов. Позволяет искать по логам всей инфраструктуры из одного места, коррелировать события и хранить историю дольше, чем позволяет дисковое пространство отдельного сервера.
Как работает
Каждый сервер запускает агент-коллектор (Filebeat, Promtail, rsyslog, Fluentd), который читает лог-файлы и отправляет записи на центральный log-сервер. Коллектор добавляет метаданные: имя хоста, метку сервиса, временную метку. Log-сервер индексирует данные для быстрого поиска и хранит в сжатом виде.
Популярные стеки
ELK Stack: Elasticsearch (хранение и поиск) + Logstash (обработка) + Kibana (визуализация). Мощный, но ресурсоёмкий: минимум 4 GB RAM для Elasticsearch. Стандарт в больших командах.
Grafana Loki: хранит не индексированные данные, а только метки (labels). В 10 раз дешевле Elasticsearch по хранилищу. Интегрируется с Grafana — логи и метрики в одном дашборде. Подходит для начала.
Graylog: MongoDB + Elasticsearch, веб-интерфейс с возможностью алертинга по паттернам в логах. Промежуточное решение.
История
Централизованный syslog появился в 1980-х: демон syslogd принимал UDP-сообщения от сетевых устройств на порту 514. С ростом масштаба (сотни серверов) простой syslog не справлялся: нет сжатия, индексации, поиска. Elasticsearch (2010) от Shay Banon стал базой для первого ELK-стека. Grafana Loki (2018) предложил более экономичный подход, вдохновлённый Prometheus. В 2020-х log-серверы стали обязательным элементом SRE-практик.
Grafana Loki + Promtail
# promtail config.yml
server:
http_listen_port: 9080
positions:
filename: /tmp/positions.yaml
clients:
- url: http://loki:3100/loki/api/v1/push
scrape_configs:
- job_name: nginx
static_configs:
- targets: [localhost]
labels:
job: nginx
host: web01
__path__: /var/log/nginx/*.log
После настройки логи Nginx доступны в Grafana через LogQL-запросы: {job="nginx"} |= "error"
На что обращать внимание
Логи содержат персональные данные: IP-адреса, user-agent, пути запросов. Настройте retention-политику (удалять логи старше 90 дней) и маскирование чувствительных полей. На малых инфраструктурах (2-5 серверов) log-сервер избыточен — достаточно journalctl + syslog-форвардинга на один сервер. Log-сервер окупается при анализе инцидентов, когда нужно искать по логам 20+ хостов одновременно.
Retention и управление объёмом
Логи растут непрерывно — без retention-политики диск переполнится. Loki: retention_period: 744h (31 день) в конфиге. Elasticsearch ILM (Index Lifecycle Management): горячая фаза — 7 дней на SSD, тёплая — 30 дней на HDD, удаление через 90 дней. Logrotate для файловых логов: /var/log/nginx/*.log { daily rotate 30 compress missingok notifempty }.
Безопасность log-сервера
Log-сервер содержит историю всех действий в инфраструктуре — критически важный ресурс. Изолируйте его: доступ только с определённых IP через UFW, SSH только по ключу, write-once режим для хранилища (атакующий не сможет удалить улики). Для compliance (PCI DSS, ISO 27001) целостность логов подтверждается HMAC-подписью или хранением в неизменяемом S3.
Полезные LogQL-запросы
# Все ошибки Nginx за последний час
{job="nginx"} |= "error" | json
# Rate запросов 5xx
rate({job="nginx"} |~ "HTTP/[0-9.]+ 5[0-9][0-9]" [5m])
# Топ IP по числу запросов
topk(10, sum by (remote_addr) (count_over_time({job="nginx"}[1h])))