NPV-AM

← Все статьи

ELK Stack: сбор и анализ логов

20 мар 2026 · 12 мин чтения

Компоненты ELK

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

Docker Compose развертывание

# docker-compose.yml
version: '3.8'
services:
  elasticsearch:
    image: docker.elastic.co/elasticsearch/elasticsearch:8.13.0
    environment:
      - discovery.type=single-node
      - xpack.security.enabled=false
      - "ES_JAVA_OPTS=-Xms1g -Xmx1g"
    volumes:
      - es-data:/usr/share/elasticsearch/data
    ports:
      - 9200:9200

  logstash:
    image: docker.elastic.co/logstash/logstash:8.13.0
    volumes:
      - ./logstash/pipeline:/usr/share/logstash/pipeline
    ports:
      - 5044:5044
    depends_on:
      - elasticsearch

  kibana:
    image: docker.elastic.co/kibana/kibana:8.13.0
    ports:
      - 5601:5601
    environment:
      - ELASTICSEARCH_HOSTS=http://elasticsearch:9200
    depends_on:
      - elasticsearch

  filebeat:
    image: docker.elastic.co/beats/filebeat:8.13.0
    user: root
    volumes:
      - /var/log:/var/log:ro
      - ./filebeat.yml:/usr/share/filebeat/filebeat.yml:ro

volumes:
  es-data:

Logstash pipeline

# logstash/pipeline/nginx.conf
input {
  beats {
    port => 5044
  }
}

filter {
  if [fields][log_type] == "nginx" {
    grok {
      match => {
        "message" => '%{IPORHOST:remote_ip} - %{DATA:user} \[%{HTTPDATE:timestamp}\] "%{WORD:method} %{DATA:request} HTTP/%{NUMBER:http_version}" %{NUMBER:status} %{NUMBER:bytes} "%{DATA:referrer}" "%{DATA:agent}"'
      }
    }

    date {
      match => ["timestamp", "dd/MMM/yyyy:HH:mm:ss Z"]
      target => "@timestamp"
    }

    geoip {
      source => "remote_ip"
    }

    useragent {
      source => "agent"
      target => "user_agent"
    }

    mutate {
      convert => {
        "status" => "integer"
        "bytes" => "integer"
      }
    }
  }
}

output {
  elasticsearch {
    hosts => ["http://elasticsearch:9200"]
    index => "nginx-%{+YYYY.MM.dd}"
  }
}

Filebeat конфигурация

# filebeat.yml
filebeat.inputs:
- type: log
  enabled: true
  paths:
    - /var/log/nginx/access.log
  fields:
    log_type: nginx
  fields_under_root: true

- type: log
  enabled: true
  paths:
    - /var/log/syslog
  fields:
    log_type: syslog
  fields_under_root: true

output.logstash:
  hosts: ["logstash:5044"]
Filebeat потребляет всего 10-20 МБ памяти и отправляет логи батчами, что делает его идеальным для серверов с ограниченными ресурсами.

Запросы к Elasticsearch

# Поиск ошибок за последние 24 часа
curl -X GET "localhost:9200/nginx-*/_search" -H 'Content-Type: application/json' -d'
{
  "query": {
    "bool": {
      "must": [
        { "match": { "status": 500 } },
        { "range": { "@timestamp": { "gte": "now-24h" } } }
      ]
    }
  },
  "size": 50,
  "sort": [{ "@timestamp": { "order": "desc" } }]
}'

# Агрегация: топ-10 IP по количеству запросов
curl -X GET "localhost:9200/nginx-*/_search" -H 'Content-Type: application/json' -d'
{
  "size": 0,
  "aggs": {
    "top_ips": {
      "terms": { "field": "remote_ip.keyword", "size": 10 }
    }
  }
}'

Индексация и.lifecycle management

<# Шаблон индекса для автоматического lifecycle management
curl -X PUT "localhost:9200/_index_template/nginx" -H 'Content-Type: application/json' -d'
{
  "index_patterns": ["nginx-*"],
  "template": {
    "settings": {
      "number_of_shards": 2,
      "number_of_replicas": 1,
      "index.lifecycle.name": "nginx-policy",
      "index.lifecycle.rollover_alias": "nginx"
    }
  }
}'

# Политика: горячие данные 7 дней, warm 30 дней, удаление через 90 дней
curl -X PUT "localhost:9200/_ilm/policy/nginx-policy" -H 'Content-Type: application/json' -d'
{
  "policy": {
    "phases": {
      "hot": {
        "actions": {
          "rollover": { "max_size": "10gb", "max_age": "7d" }
        }
      },
      "warm": {
        "min_age": "7d",
        "actions": {
          "shrink": { "number_of_shards": 1 },
          "forcemerge": { "max_num_segments": 1 }
        }
      },
      "delete": {
        "min_age": "90d",
        "actions": { "delete": {} }
      }
    }
  }
}'

Kibana дашборды

После настройки индексов в Kibana можно создать дашборды с метриками: количество запросов в секунду, распределение по статус-кодам, топ эндпоинтов, география запросов. Kibana поддерживает Lens для drag-and-drop визуализаций и Dashboard для сборки полных обзоров.

Производительность

Вывод

ELK Stack — это мощная платформа для централизованного сбора логов. Начните с минимального развертывания через Docker Compose, настройте Filebeat для сбора логов, Logstash для обработки и Kibana для визуализации. Масштабируйте кластер по мере роста объемов данных.