· 18 мин чтения

ELK Stack с нуля: централизованное логирование для офиса на 50 серверов

Я Семёнов Евгений Сергеевич, директор АйТи Фреш. Когда у клиента «упал 1С-сервер, и никто не знает почему», первый вопрос — где логи. Если они разбросаны по десяткам серверов и ноутбуков — расследование затянется на дни. Если всё стекается в один Kibana — находите за минуты. У нас на практике ELK — обязательная часть инфраструктуры каждого клиента. Разберём полную установку для средней компании.

Что такое ELK и зачем

ELK — аббревиатура из трёх продуктов: Elasticsearch (хранилище и поиск), Logstash (обработка и обогащение), Kibana (веб-интерфейс). Плюс Beats — лёгкие агенты на источниках. Весь стек от Elastic, есть открытая лицензия.

Что даёт централизация:

Архитектура для 50 серверов

Типовая схема, которую я ставлю клиентам:

Для маленьких инсталляций (до 10 серверов, до 20 ГБ/день) — single-node ES на одной машине. Но без отказоустойчивости, только для тестов.

Установка Elasticsearch на Ubuntu 22.04

wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | \
  sudo gpg --dearmor -o /usr/share/keyrings/elastic.gpg
echo "deb [signed-by=/usr/share/keyrings/elastic.gpg] https://artifacts.elastic.co/packages/8.x/apt stable main" | \
  sudo tee /etc/apt/sources.list.d/elastic-8.x.list
sudo apt update
sudo apt install -y elasticsearch

sudo systemctl daemon-reload
sudo systemctl enable --now elasticsearch

При первом старте ES генерирует пароль для elastic и enrollment-token для Kibana — запишите их, иначе придётся сбрасывать через elasticsearch-reset-password.

Kibana

sudo apt install -y kibana
sudo /usr/share/kibana/bin/kibana-setup --enrollment-token 
sudo systemctl enable --now kibana

Kibana слушает 5601. Ставьте за nginx/haproxy с TLS и basic-auth, если нет корпоративного SSO. В /etc/kibana/kibana.yml:

server.host: "0.0.0.0"
server.publicBaseUrl: "https://kibana.company.ru"
elasticsearch.hosts: ["https://es-01.company.ru:9200"]

Filebeat: сбор логов с Linux-сервера

sudo apt install -y filebeat
sudo filebeat modules enable nginx system auditd

# /etc/filebeat/filebeat.yml
filebeat.inputs:
  - type: filestream
    id: app-logs
    paths: [/var/log/myapp/*.log]
    fields:
      service: myapp
      env: production

output.elasticsearch:
  hosts: ["https://es-01.company.ru:9200"]
  username: "elastic"
  password: "${ES_PASS}"
  ssl.certificate_authorities: ["/etc/filebeat/es-ca.crt"]

setup.kibana:
  host: "https://kibana.company.ru"
sudo filebeat setup -e
sudo systemctl enable --now filebeat

Модули (filebeat modules enable) приносят готовые ingest-пайплайны и Kibana-дашборды. Не пишите свой grok, если есть модуль.

Winlogbeat: логи Windows-серверов

На каждом DC, файловом, 1С-сервере:

# PowerShell
Invoke-WebRequest https://artifacts.elastic.co/downloads/beats/winlogbeat/winlogbeat-8.13.0-windows-x86_64.zip -OutFile winlogbeat.zip
Expand-Archive winlogbeat.zip -DestinationPath C:\Program Files\

# winlogbeat.yml
winlogbeat.event_logs:
  - name: Security
    ignore_older: 72h
  - name: System
  - name: Application

output.elasticsearch:
  hosts: ["https://es-01.company.ru:9200"]
  username: "elastic"
  password: "${ES_PASS}"

# Установка службы
cd "C:\Program Files\winlogbeat"
.\install-service-winlogbeat.ps1
Start-Service winlogbeat

Logstash для сложного парсинга

Logstash берёт на себя разбор нестандартных форматов. Пример для access.log от самописного приложения с JSON-структурой:

# /etc/logstash/conf.d/app.conf
input {
  beats {
    port => 5044
    ssl => true
    ssl_certificate => "/etc/logstash/certs/ls.crt"
    ssl_key => "/etc/logstash/certs/ls.key"
  }
}

filter {
  if [fields][service] == "myapp" {
    json { source => "message" }
    date { match => ["timestamp", "ISO8601"] }
    geoip { source => "client_ip" target => "geo" }
    mutate { remove_field => ["message"] }
  }
}

output {
  elasticsearch {
    hosts => ["https://es-01.company.ru:9200"]
    index => "myapp-%{+YYYY.MM.dd}"
    user => "elastic"
    password => "${ES_PASS}"
    ssl => true
  }
}

Ретенция через ILM

ФазаВозрастХранилищеДействие
hot0–7 днейNVMe SSDАктивная индексация, поиск
warm7–30 днейSATA SSDforcemerge, shrink
cold30–90 днейHDDsearchable snapshot
delete>90 днейУдаление

Алертинг в Telegram

В базовой Kibana (open-source) нет алертинга, но есть Watcher в платной. Бесплатная альтернатива — ElastAlert 2. Пример правила — более 10 неудачных входов SSH за 5 минут:

# /opt/elastalert/rules/ssh_brute.yaml
name: SSH brute-force
type: frequency
index: filebeat-*
num_events: 10
timeframe: { minutes: 5 }
filter:
  - query:
      query_string:
        query: 'event.action:"ssh_login" AND event.outcome:"failure"'
alert:
  - telegram
telegram_bot_token: "XXX"
telegram_room_id: "-100YYY"

Реальный кейс: логи для холдинга в Москве

Однажды в 2024 году к нам пришёл клиент — холдинг из 6 компаний, общий офис на 180 человек в Москве. Инфраструктура: 38 серверов (Windows + Linux), 1С, Битрикс, внутренние сервисы. Логи лежали локально, расследование инцидентов занимало дни. Мы развернули ELK на трёх виртуалках на наших Dell Xeon Platinum 8280 в дата-центре МТС Москва — 3 ноды ES + Kibana + Logstash.

За 8 рабочих дней подключили 38 Beats-агентов, настроили парсеры для 1С-трассировки, IIS access-логов, Windows Security, nginx. Создали 6 дашбордов в Kibana и 14 алертов в ElastAlert. Стоимость — 210 000 руб. Через 3 месяца среднее время расследования инцидента упало с 4 часов до 15 минут.

Грабли, на которые наступают

Построим централизованное логирование

У нас 15+ лет опыта внедрения ELK в корпоративных сетях. 8 серверов Dell Xeon Platinum 8280 с 40G Mellanox в дата-центре МТС Москва — под хостинг вашего стека. Аудит источников логов, проектирование ретенции, настройка дашбордов и алертов — за 5–8 дней под ключ.

Телефон: +7 903 729-62-41
Telegram: @ITfresh_Boss
Семёнов Евгений Сергеевич, директор АйТи Фреш

FAQ — ELK Stack

Нужен ли Logstash, или можно Filebeat напрямую в Elasticsearch?
Для простых случаев — Filebeat → Elasticsearch с ingest pipeline. Logstash нужен, если требуется сложный парсинг, enrichment, разделение потоков или буферизация через Kafka/Redis перед ES.
Сколько места занимают логи в ELK?
Сырой текст индексируется в ES с коэффициентом 1,2–1,8x от исходника из-за инвертированных индексов. 100 ГБ сырых логов в день — 150–180 ГБ в ES. Плюс реплики — умножаем на (1 + число реплик).
Какую ретенцию выбрать?
Зависит от регуляторики и бюджета. Типично: 30 дней hot, 90 дней warm, до года cold на HDD. ФСТЭК для госсектора требует минимум 3 года. Для обычного бизнеса 90 дней хватает для расследования инцидентов.
Как собирать Windows Event Logs?
Ставьте Winlogbeat на каждом Windows-сервере. Он читает Event Log через Windows API и отправляет в Logstash или ES. Для DC критично собирать Security log — это аудит входов и доступа.
Чем Kibana отличается от Grafana для логов?
Kibana заточена под ES: Discover для поиска, Lens для визуализации, машинное обучение (в платной). Grafana универсальнее — умеет и ES, и Prometheus, и Loki. Для чистых логов часто удобнее Kibana, для метрик + логов вместе — Grafana.

Подпишитесь на рассылку ITfresh

Раз в неделю — практические гайды для руководителя IT и сисадмина: безопасность, 1С, миграции, резервные копии, лайфхаки из реальных проектов.

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

ООО «АЙТИ-ФРЕШ», ИНН 7719418495, КПП 771901001. Юридический адрес: 105523, г. Москва, Щёлковское шоссе, д. 92, корп. 7. Контакт: info@itfresh.ru, +7 903 729-62-41. Оператор обрабатывает e-mail подписчика в целях рассылки информационных и рекламных материалов до момента отзыва согласия.