Skip to content
ClickHouse Docs
ClickHouse DocsClickHouse Docs

Мониторинг журналов хоста EC2 в ClickStack

Интеграция с существующим экземпляром EC2

В этом разделе описано, как установить OpenTelemetry Collector на экземпляры EC2, чтобы собирать системные журналы и отправлять их в ClickStack с автоматическим обогащением метаданными EC2. Эта распределенная архитектура подходит для production и легко масштабируется на несколько экземпляров.

Если вы хотите протестировать интеграцию журналов хоста EC2 перед настройкой production-экземпляра, воспользуйтесь нашей предварительно настроенной конфигурацией и примером данных в разделе "Демо-набор данных".

Предварительные требования
  • Запущенный экземпляр ClickStack (может быть развернут в собственной инфраструктуре, в облаке или локально)
  • Запущенный экземпляр EC2 (Ubuntu, Amazon Linux или другой дистрибутив Linux)
  • У экземпляра EC2 есть сетевой доступ к конечной точке OTLP ClickStack (порт 4318 для HTTP или 4317 для gRPC)
  • Есть доступ к службе метаданных экземпляра EC2 (по умолчанию включена)

Убедитесь, что метаданные EC2 доступны

На экземпляре EC2 убедитесь, что служба метаданных доступна:

# Get metadata token (IMDSv2)
TOKEN=$(curl -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600")

# Verify instance metadata
curl -H "X-aws-ec2-metadata-token: $TOKEN" http://169.254.169.254/latest/meta-data/instance-id
curl -H "X-aws-ec2-metadata-token: $TOKEN" http://169.254.169.254/latest/meta-data/placement/region
curl -H "X-aws-ec2-metadata-token: $TOKEN" http://169.254.169.254/latest/meta-data/instance-type

Вы увидите ID экземпляра, регион и тип инстанса. Если эти команды завершаются ошибкой, проверьте следующее:

  • Сервис метаданных экземпляра включен
  • IMDSv2 не блокируется группами безопасности или сетевыми ACL
  • Вы запускаете эти команды непосредственно из самого экземпляра EC2

Убедитесь, что файлы syslog присутствуют

Убедитесь, что ваш инстанс EC2 записывает файлы syslog:

# Ubuntu instances
ls -la /var/log/syslog

# Amazon Linux / RHEL instances
ls -la /var/log/messages

# View recent entries
tail -20 /var/log/syslog
# or
tail -20 /var/log/messages

Установите OpenTelemetry Collector

Установите дистрибутив OpenTelemetry Collector Contrib на своем экземпляре EC2:

# Download the latest release
wget https://github.com/open-telemetry/opentelemetry-collector-releases/releases/download/v0.114.0/otelcol-contrib_0.114.0_linux_amd64.tar.gz

# Extract and install
tar -xvf otelcol-contrib_0.114.0_linux_amd64.tar.gz
sudo mv otelcol-contrib /usr/local/bin/

# Verify installation
otelcol-contrib --version

Создание конфигурации коллектора

Создайте файл конфигурации для OpenTelemetry Collector по пути /etc/otelcol-contrib/config.yaml:

sudo mkdir -p /etc/otelcol-contrib

Выберите конфигурацию в соответствии с вашим дистрибутивом Linux:

sudo tee /etc/otelcol-contrib/config.yaml > /dev/null << 'EOF'
receivers:
  filelog/syslog:
    include:
      - /var/log/syslog
      - /var/log/**/*.log
    start_at: end
    operators:
      - type: regex_parser
        regex: '^(?P<timestamp>\S+) (?P<hostname>\S+) (?P<unit>\S+?)(?:\[(?P<pid>\d+)\])?: (?P<message>.*)$'
        parse_from: body
        parse_to: attributes
      
      - type: time_parser
        parse_from: attributes.timestamp
        layout_type: gotime
        layout: '2006-01-02T15:04:05.999999-07:00'
      
      - type: add
        field: attributes.source
        value: "ec2-host-logs"

processors:
  resourcedetection:
    detectors: [ec2, system]
    timeout: 5s
    override: false
    ec2:
      tags:
        - ^Name
        - ^Environment
        - ^Team
  
  batch:
    timeout: 10s
    send_batch_size: 10000

exporters:
  otlphttp:
    endpoint: "http://YOUR_CLICKSTACK_HOST:4318"
    headers:
      authorization: "${env:CLICKSTACK_API_KEY}"

service:
  pipelines:
    logs:
      receivers: [filelog/syslog]
      processors: [resourcedetection, batch]
      exporters: [otlphttp]
EOF

Замените следующее в конфигурации:

  • YOUR_CLICKSTACK_HOST: Имя хоста или IP-адрес, по которому доступен ClickStack
  • Для локального тестирования можно использовать SSH-туннель (см. раздел «Устранение неполадок»)

Данная конфигурация:

  • Считывает системные файлы журналов из стандартных путей (/var/log/syslog для Ubuntu, /var/log/messages для Amazon Linux/RHEL)
  • Разбирает формат syslog для извлечения структурированных полей (временная метка, hostname, unit/service, PID, сообщение)
  • Автоматически определяет и добавляет метаданные EC2 с помощью процессора resourcedetection
  • При наличии также может включать теги EC2 (Name, Environment, Team)
  • Отправляет журналы в ClickStack по OTLP HTTP

Задайте API-ключ ClickStack

Экспортируйте API-ключ ClickStack в переменную окружения:

export CLICKSTACK_API_KEY="your-api-key-here"

Чтобы это сохранялось после перезагрузки, добавьте это в профиль оболочки:

echo 'export CLICKSTACK_API_KEY="your-api-key-here"' >> ~/.bashrc
source ~/.bashrc

Запустите коллектор

Запустите OpenTelemetry Collector:

CLICKSTACK_API_KEY="your-api-key-here" /usr/local/bin/otelcol-contrib --config /etc/otelcol-contrib/config.yaml

Проверка журналов в HyperDX

После запуска коллектора войдите в HyperDX и убедитесь, что журналы поступают вместе с метаданными EC2:

  1. Перейдите в представление Search
  2. В поле source выберите Logs
  3. Отфильтруйте по source:ec2-host-logs
  4. Нажмите на запись в журнале, чтобы развернуть её
  5. Убедитесь, что в атрибутах ресурса отображаются метаданные EC2:
    • cloud.provider
    • cloud.region
    • host.id (ID экземпляра)
    • host.type (тип инстанса)
    • cloud.availability_zone
Представление Search для журналов EC2
Подробная информация о журнале EC2 с метаданными

Демо-набор данных

Для пользователей, которые хотят протестировать интеграцию журналов хоста EC2 перед настройкой рабочих экземпляров, мы предоставляем демо-набор данных с имитированными метаданными EC2.

Скачайте пример набора данных

Скачайте пример файла журнала:

curl -O https://datasets-documentation.s3.eu-west-3.amazonaws.com/clickstack-integrations/host-logs/journal.log

Набор данных включает:

  • Последовательность загрузки системы
  • Активность входа по SSH (успешные и неуспешные попытки)
  • Инцидент безопасности (атака методом перебора и реакция fail2ban)
  • Плановое обслуживание (задания cron, anacron)
  • Перезапуски службы (rsyslog)
  • Сообщения ядра и активность межсетевого экрана
  • Сочетание штатных операций и примечательных событий

Создайте тестовую конфигурацию коллектора

Создайте файл ec2-host-logs-demo.yaml со следующей конфигурацией:

cat > ec2-host-logs-demo.yaml << 'EOF'
receivers:
  filelog/journal:
    include:
      - /tmp/host-demo/journal.log
    start_at: beginning
    operators:
      - type: regex_parser
        regex: '^(?P<timestamp>\S+) (?P<hostname>\S+) (?P<unit>\S+?)(?:\[(?P<pid>\d+)\])?: (?P<message>.*)$'
        parse_from: body
        parse_to: attributes
      
      - type: time_parser
        parse_from: attributes.timestamp
        layout: '%Y-%m-%dT%H:%M:%S%z'
      
      - type: add
        field: attributes.source
        value: "ec2-demo"

processors:
  # Simulate EC2 metadata for demo (no real EC2 instance required)
  resource:
    attributes:
      - key: service.name
        value: "ec2-demo"
        action: insert
      - key: cloud.provider
        value: "aws"
        action: insert
      - key: cloud.platform
        value: "aws_ec2"
        action: insert
      - key: cloud.region
        value: "us-east-1"
        action: insert
      - key: cloud.availability_zone
        value: "us-east-1a"
        action: insert
      - key: host.id
        value: "i-0abc123def456789"
        action: insert
      - key: host.type
        value: "t3.medium"
        action: insert
      - key: host.name
        value: "prod-web-01"
        action: insert

service:
  pipelines:
    logs/ec2-demo:
      receivers: [filelog/journal]
      processors:
        - resource
        - memory_limiter
        - transform
        - batch
      exporters:
        - clickhouse
EOF

Запустите ClickStack с демонстрационной конфигурацией

Запустите ClickStack с демонстрационными журналами и демонстрационной конфигурацией:

docker run --name clickstack-demo \
  -p 8080:8080 -p 4317:4317 -p 4318:4318 \
  -e CUSTOM_OTELCOL_CONFIG_FILE=/etc/otelcol-contrib/custom.config.yaml \
  -v "$(pwd)/ec2-host-logs-demo.yaml:/etc/otelcol-contrib/custom.config.yaml:ro" \
  -v "$(pwd)/journal.log:/tmp/host-demo/journal.log:ro" \
  docker.hyperdx.io/hyperdx/hyperdx-all-in-one:latest

Проверьте журналы в HyperDX

После запуска collector:

  1. Откройте HyperDX и войдите в свою учетную запись (возможно, сначала потребуется создать ее)
  2. Перейдите в представление поиска и выберите источник Logs
  3. Установите временной диапазон 2025-11-10 00:00:00 - 2025-11-13 00:00:00
  4. Отфильтруйте по source:ec2-demo
  5. Разверните запись в журнале, чтобы просмотреть метаданные EC2 в атрибутах ресурса
Представление поиска журналов EC2
Подробная информация о журнале EC2 с метаданными

Вы должны увидеть журналы со смоделированным контекстом EC2, включая:

  • ID экземпляра: i-0abc123def456789
  • Регион: us-east-1
  • Зона доступности: us-east-1a
  • Тип инстанса: t3.medium

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

Чтобы вам было проще начать мониторинг журналов хоста EC2 в ClickStack, мы предоставляем базовые визуализации с облачным контекстом.

Скачать конфигурацию панели мониторинга

Импортируйте преднастроенный дашборд

  1. Откройте HyperDX и перейдите в раздел Dashboards
  2. Нажмите Import Dashboard в правом верхнем углу в меню с многоточием
Кнопка импорта панели мониторинга
  1. Загрузите файл host-logs-dashboard.json и нажмите Finish Import
Завершение импорта

Просмотрите панель мониторинга

Панель мониторинга будет создана со всеми преднастроенными визуализациями:

Панель мониторинга журналов EC2

Вы можете фильтровать визуализации на панели мониторинга по контексту EC2:

  • cloud.region:us-east-1 - показать журналы из конкретного региона
  • host.type:t3.medium - фильтровать по типу инстанса
  • host.id:i-0abc123def456 - журналы с конкретного инстанса

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

Метаданные EC2 не отображаются в журналах

Убедитесь, что сервис метаданных EC2 доступен:

# Получить токен метаданных
TOKEN=$(curl -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600")

# Проверить конечную точку метаданных
curl -H "X-aws-ec2-metadata-token: $TOKEN" http://169.254.169.254/latest/meta-data/instance-id

Если это не помогло, проверьте следующее:

  • Служба метаданных экземпляра включена
  • IMDSv2 не блокируется группами безопасности
  • Вы запускаете коллектор на самом экземпляре EC2

Проверьте логи коллектора на наличие ошибок метаданных:

# Если запущено как systemd-сервис
sudo journalctl -u otelcol-contrib -f | grep -i "ec2\|metadata\|resourcedetection"

# Если запущено на переднем плане, проверьте stdout

Журналы не отображаются в HyperDX

Проверьте, что файлы syslog существуют и в них ведётся запись:

ls -la /var/log/syslog /var/log/messages
tail -f /var/log/syslog

Проверьте, может ли коллектор читать файлы журналов:

cat /var/log/syslog | head -20

Проверьте сетевую доступность ClickStack:

# Проверка конечной точки OTLP
curl -v http://YOUR_CLICKSTACK_HOST:4318/v1/logs

# Должен прийти ответ (даже если с ошибкой — это означает, что конечная точка доступна)

Проверьте журналы коллектора на наличие ошибок:

# Если запущен на переднем плане
# Искать сообщения об ошибках в stdout

# Если запущен как сервис systemd
sudo journalctl -u otelcol-contrib -f | grep -i "error\|failed"

Некорректный разбор журналов

Проверьте формат syslog:

Для Ubuntu 24.04+:

# Должен отображаться формат ISO8601: 2025-11-17T20:55:44.826796+00:00
tail -5 /var/log/syslog

Для Amazon Linux 2 / Ubuntu 20.04:

# Должен отображаться традиционный формат: Nov 17 14:16:16
tail -5 /var/log/messages

Если ваш формат отличается, используйте вкладку с подходящей конфигурацией в разделе Создание конфигурации коллектора для вашего дистрибутива.

Коллектор не запускается как служба systemd

Проверьте статус службы:

sudo systemctl status otelcol-contrib

Просмотр подробных журналов:

sudo journalctl -u otelcol-contrib -n 50

Распространённые проблемы:

  • API-ключ задан в переменных окружения некорректно
  • Ошибки синтаксиса в файле конфигурации
  • Проблемы с правами доступа при чтении файлов журнала

Следующие шаги

  • Настройте оповещения о критических системных событиях (сбои сервиса, ошибки аутентификации, предупреждения о проблемах с диском)
  • Фильтруйте по атрибутам метаданных EC2 (регион, тип инстанса, ID экземпляра), чтобы отслеживать конкретные ресурсы
  • Коррелируйте журналы хоста EC2 с журналами приложений для комплексной диагностики
  • Создавайте пользовательские панели мониторинга для мониторинга безопасности (попытки SSH, использование sudo, блокировки межсетевым экраном)

Переход в продакшн

В этом руководстве OpenTelemetry Collector устанавливается непосредственно на экземпляры EC2, что является рекомендуемым вариантом для мониторинга на уровне хоста в продакшн-среде. Для управления коллекторами на множестве экземпляров рассмотрите возможность использования инструментов управления конфигурацией (Ansible, Chef, Puppet) или OpenTelemetry Operator в средах Kubernetes. См. раздел Отправка данных OpenTelemetry с конфигурацией для продакшн-среды.

Navigation