Что такое Beats?

Beats — это семейство легковесных агентов сбора данных от Elastic, предназначенных для отправки данных из различных источников в Elasticsearch или Logstash. Каждый Beat специализируется на определенном типе данных и оптимизирован для минимального потребления ресурсов.

Основные типы Beats

  • Filebeat — сбор и отправка логов из файлов
  • Metricbeat — мониторинг системных и сервисных метрик
  • Packetbeat — анализ сетевого трафика в реальном времени
  • Winlogbeat — сбор событий Windows Event Log
  • Auditbeat — мониторинг файловой системы и процессов
  • Heartbeat — проверка доступности сервисов
  • Functionbeat — сбор данных из serverless окружений

Установка Beats

Установка Filebeat через Docker:

1docker run -d \
2  --name=filebeat \
3  --user=root \
4  --volume="$(pwd)/filebeat.docker.yml:/usr/share/filebeat/filebeat.yml:ro" \
5  --volume="/var/lib/docker/containers:/var/lib/docker/containers:ro" \
6  --volume="/var/run/docker.sock:/var/run/docker.sock:ro" \
7  elastic/filebeat:8.11.0 filebeat -e -strict.perms=false

Установка на Ubuntu/Debian:

1wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -
2echo "deb https://artifacts.elastic.co/packages/8.x/apt stable main" | sudo tee /etc/apt/sources.list.d/elastic-8.x.list
3sudo apt-get update && sudo apt-get install filebeat metricbeat

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

Пример конфигурации для сбора логов Nginx:

 1filebeat.inputs:
 2- type: log
 3  enabled: true
 4  paths:
 5    - /var/log/nginx/*.log
 6  fields:
 7    service: nginx
 8    environment: production
 9  fields_under_root: true
10
11output.elasticsearch:
12  hosts: ["localhost:9200"]
13  index: "nginx-logs-%{+yyyy.MM.dd}"
14
15setup.template.name: "nginx-logs"
16setup.template.pattern: "nginx-logs-*"
17
18processors:
19- add_host_metadata:
20    when.not.contains.tags: forwarded

Конфигурация Metricbeat

Пример для мониторинга системы и Docker:

 1metricbeat.config.modules:
 2  path: ${path.config}/modules.d/*.yml
 3  reload.enabled: false
 4
 5metricbeat.modules:
 6- module: system
 7  metricsets:
 8    - cpu
 9    - load
10    - memory
11    - network
12    - process
13    - process_summary
14  enabled: true
15  period: 10s
16
17- module: docker
18  metricsets:
19    - container
20    - cpu
21    - diskio
22    - memory
23    - network
24  hosts: ["unix:///var/run/docker.sock"]
25  period: 10s
26
27output.elasticsearch:
28  hosts: ["localhost:9200"]

Применение Beats

  • Централизованное логирование — сбор логов с множества серверов
  • Мониторинг инфраструктуры — метрики CPU, памяти, дисков
  • Безопасность — аудит файловой системы и процессов
  • Сетевой мониторинг — анализ трафика и производительности
  • Uptime мониторинг — проверка доступности сервисов

Интеграция с Python

Отправка пользовательских метрик через Python:

 1import json
 2import socket
 3from datetime import datetime
 4
 5def send_custom_metric(metric_name, value, tags=None):
 6    """Отправка кастомной метрики в формате, совместимом с Beats"""
 7    
 8    metric = {
 9        "@timestamp": datetime.utcnow().isoformat(),
10        "metricset": {
11            "name": "custom",
12            "module": "python-app"
13        },
14        metric_name: value,
15        "tags": tags or {}
16    }
17    
18    # Отправка через UDP (требует настройки input в Logstash)
19    sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
20    sock.sendto(json.dumps(metric).encode(), ('localhost', 5959))
21    sock.close()
22
23# Использование
24send_custom_metric("user_registrations", 42, {"app": "web", "env": "prod"})

Преимущества использования

  • Легковесность — минимальное потребление ресурсов
  • Специализация — каждый Beat оптимизирован для своей задачи
  • Надежность — механизмы гарантированной доставки данных
  • Простота — легкая установка и конфигурация
  • Интеграция — бесшовная работа с Elastic Stack

Мониторинг Beats

Проверка статуса и метрик:

1# Проверка статуса Filebeat
2curl -X GET "http://localhost:5066/stats"
3
4# Мониторинг через HTTP endpoint
5curl -X GET "http://localhost:5066/stats?pretty"
6
7# Логи Beats
8journalctl -u filebeat -f

FAQ

Какой Beat выбрать для логов приложений?

Для большинства случаев подойдет Filebeat. Он может собирать логи из файлов, Docker контейнеров и многих других источников.

Можно ли использовать Beats без Elasticsearch?

Да, Beats могут отправлять данные в Logstash, Kafka, Redis и другие системы через различные output плагины.

Как обеспечить высокую доступность Beats?

Можно настроить отправку данных в несколько Elasticsearch кластеров, использовать load balancing и настроить автоматический restart при сбоях.