We detected you are likely not from a Russian-speaking region. Would you like to switch to the international version of the site?

  Назад к списку статей

Автоматизированный сбор и корреляция логов из системных сервисов Android с использованием Elastic Stack (Filebeat, Logstash, Kibana) в Termux

Termux — удобная среда для администрирования и диагностики на Android. При этом системные логи, события от сервисов и активность приложений могут быть распределены по разным источникам. Задача усложняется необходимостью автоматизации, нормализации форматов, объединения по корреляционным ключам (время, PID, package name, трассировки) и построения поисковых/аналитических сценариев в едином контуре.

В этой статье предлагается практическая архитектура автоматизированного сбора и корреляции логов из системных сервисов Android с использованием Elastic Stack: Filebeat (агрегация/пересылка), Logstash (парсинг, нормализация, обогащение и корреляция), Kibana (визуализация и расследования). Особое внимание уделяется реалистичным ограничениям Android и безопасной настройке на стороне хранения данных.

Цели и ожидаемый результат

  • Автоматически собирать логи в Termux (из доступных источников) в файл(ы) с ротацией.
  • Транспортировать логи в Elastic Stack через Filebeat.
  • Нормализовать поля, привести timestamp к единому виду, выделить ключевые параметры.
  • Обогащать события (например, package name, тип источника, host/устройство, окружение).
  • Настраивать корреляцию в Logstash (например, связывать события по UID/trace id/временным окнам или по ключам приложения).
  • Создать дашборды и поисковые запросы в Kibana для мониторинга и расследований.

Нормативно-правовые и практические ограничения

При проектировании важно учитывать, что на Android доступ к некоторым журналам ограничен политиками ОС и правами приложений. Автоматизация должна выполняться только в рамках законного использования и с учетом ограничений доступа. Не следует пытаться обходить системные ограничения или получать недоступные данные незаконными методами.

В типовом сценарии Termux работает с теми логами и интерфейсами, которые доступны приложению Termux или компонентам, настроенным пользователем на устройстве (например, через собственные журналы приложений, логи файловых путей, либо доступные системные источники в пределах прав).

Архитектура решения

Ниже показан поток данных:

  1. Termux: сбор логов и запись в файлы (с ротацией).
  2. Filebeat (может работать на том же узле, где доступны логи; либо на отдельной машине/шлюзе): чтение файлов и отправка в Elasticsearch через Logstash или напрямую.
  3. Logstash: парсинг (grok/dissect), перевод timestamp, нормализация полей, добавление метаданных, корреляционные механизмы.
  4. Elasticsearch: индексирование и хранение.
  5. Kibana: поиск, визуализация и расследование по временным шкалам.

Ключевой принцип — разделить ответственность: Termux отвечает за сбор и первичную структуру/форматирование, Elastic Stack — за логику нормализации, аналитики и корреляции.

Подготовка окружения

Рекомендуется заранее определить:

  • Формат логов на выходе Termux (JSON Lines предпочтительнее для дальнейшего парсинга).
  • Именование файлов (например, по источнику: /var/log/android/*.log либо /sdcard/termux-logs с масками).
  • Частоту ротации и объем (чтобы устройство не исчерпало хранилище).
  • Схему корреляции (trace id / session id / package name / PID / UID / timestamp window).

Сбор логов в Termux: практический шаблон

Ниже приведен пример подхода, где Termux формирует “линейные” записи и складывает их в файлы. В зависимости от возможностей устройства вы можете собирать разные категории логов (например, логи приложений и/или доступные системные события).

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

Создание структуры каталогов

pkg update
pkg install termux-tools coreutils
mkdir -p $HOME/logs/android
mkdir -p $HOME/logs/state

Скрипт-агрегатор для логов

Пример “заглушки” под источники: скрипт читает доступные команды/события и пишет в файл. На вашей стороне нужно подставить конкретный источник логов, который доступен в рамках прав на устройстве.

cat > $HOME/logs/android/collect.sh <<'EOF'
#!/data/data/com.termux/files/usr/bin/bash
set -euo pipefail

OUT_DIR="$HOME/logs/android"
STATE_DIR="$HOME/logs/state"
OUT_FILE="$OUT_DIR/events.log"
PID_FILE="$STATE_DIR/collector.pid"

# Простейшая защита от двойного запуска
if [ -f "$PID_FILE" ]; then
  echo "Collector already started"
  exit 0
fi

# Функция записи в JSON Lines (удобно для дальнейшего парсинга)
emit_json_line() {
  local ts
  ts="$(date -u +"%Y-%m-%dT%H:%M:%SZ")"
  # Пример полей: подставьте реальные данные
  # source, level, message, package, pid, trace_id и т.д.
  local source="$1"
  local level="$2"
  local message="$3"
  local package="${4:-unknown}"
  local pid="${5:-unknown}"
  local trace_id="${6:-unknown}"

  printf '{"@timestamp":"%s","source":"%s","level":"%s","message":"%s","package":"%s","pid":"%s","trace_id":"%s"}
' 
    "$ts" "$source" "$level" "$message" "$package" "$pid" "$trace_id" >> "$OUT_FILE"
}

# === ВАЖНО ===
# Здесь должен быть ваш доступный источник логов.
# Ниже — демонстрация: периодическая запись “событий”.
# Замените этот блок на реальный сбор в пределах доступных интерфейсов.
while true; do
  emit_json_line "termux-demo" "INFO" "heartbeat event from Termux" "com.example.app" "1234" "trace-0001"
  sleep 10
done
EOF

chmod +x $HOME/logs/android/collect.sh

Запуск сборщика как фонового процесса

$HOME/logs/android/collect.sh & echo $! > $HOME/logs/state/collector.pid

Для длительной работы на Termux можно интегрировать планировщик (например, через штатные средства/скрипты автозапуска в рамках вашего процесса управления устройством). Главная цель — гарантировать непрерывность сбора и контроль ротации.

Ротация и контроль размера

Один из практичных подходов — внешняя ротация (например, на стороне файловой системы/шлюза) или встроенная ротация скриптом. Термины ротации и retention задаются под ваши требования.

Если вы используете JSON Lines, важно не “ломать” строки. Логи должны быть построчными, каждое событие — одной строкой.

Filebeat: доставка логов в Elastic

Filebeat обычно запускают там, где физически доступны файлы логов (часто это отдельный сервер-шлюз в локальной сети, куда Termux передает данные, либо напрямую с узла, на котором развернуты логи). Практически корректная схема:

  • Termux записывает файлы.
  • Далее эти файлы читает Filebeat (либо по сетевому доступу, либо если Filebeat работает на той же среде/узле).

Вариант с локальной сетью (для доставки данных) допускается как создание локальной сети для обмена, но без использования VPN для обхода блокировок.

Пример конфигурации Filebeat (YAML)

filebeat.inputs:
  - type: filestream
    id: android_events
    enabled: true
    paths:
      - /path/to/android/events.log
    parsers:
      - ndjson:
          target: ""
          message_key: ""
          add_error_key: true

processors:
  - add_fields:
      target: ''
      fields:
        service.name: android-termux
        event.dataset: android.events

output.logstash:
  hosts: ["<LOGSTASH_HOST>:5044"]

Если Filebeat читает JSON Lines, парсер ndjson поможет сразу выделить поля. При отсутствии NDJSON можно сначала отправлять сырые строки и парсить в Logstash.

Logstash: нормализация и корреляция

Logstash — центр логической обработки: приведение timestamp, выделение полей, тегирование источников, а также механизмы корреляции (в зависимости от того, какие ключи доступны в событиях).

Подготовка индекса и шаблона данных

Часто удобно разделять индексы по dataset’ам (например, android.events) и следить за тем, чтобы типы полей соответствовали ожиданиям Kibana.

Пример pipeline.conf

input {
  beats {
    port => 5044
  }
}

filter {
  # Убедимся, что timestamp распарсится корректно
  # Если в Termux вы формируете @timestamp, то используйте его напрямую.
  if [@timestamp] {
    date {
      match => [ "@timestamp", "ISO8601" ]
      target => "@timestamp"
    }
  }

  # Пример: нормализуем level
  if [level] {
    mutate { lowercase => ["level"] }
  }

  # Пример обогащения полями устройства/окружения (подставьте свои значения)
  mutate {
    add_field => { "observer.type" => "termux-collection" }
  }

  # Пример корреляции:
  # Допустим, у нас есть trace_id, и мы хотим привязать события к “сессии”.
  # Минимальный вариант корреляции: создать composite key.
  if [trace_id] and [package] {
    mutate {
      add_field => {
        "correlation.id" => "%{[package]}|%{[trace_id]}"
      }
    }
  }

  # Пример выделения полей из message при необходимости:
  # Если сообщение было строковым и вы хотите распарсить grok-выражениями — добавьте фильтры grok/dissect.
  # Пример-заглушка:
  # grok {
  #   match => { "message" => "%{LOGLEVEL:level} %{GREEDYDATA:msg}" }
  # }

  # Санитайзинг: не индексировать лишние поля при необходимости
  # mutate { remove_field => ["event.original"] }
}

output {
  elasticsearch {
    hosts => ["<ELASTIC_HOST>:9200"]
    index => "android-logs-%{+YYYY.MM.dd}"
  }
  # Для отладки можно временно подключить stdout
  # stdout { codec => rubydebug }
}

Важно: “корреляция” может пониматься по-разному. В Logstash можно:

  • Создавать корреляционные ключи (correlation.id) из доступных полей.
  • Добавлять обогащенные метаданные.
  • В более продвинутом сценарии использовать фильтры, способные удерживать состояние в пределах пайплайна (при необходимости). Однако для сложных корреляций часто рациональнее переносить часть логики в Elasticsearch/Kibana (например, через runtime fields, ES queries, EQL, агрегаты) — в зависимости от требований.

Почему лучше JSON Lines в Termux

Если Termux формирует события в формате JSON Lines, вы существенно упрощаете:

  • парсинг в Filebeat/Logstash;
  • корректную типизацию (строки/числа);
  • построение корреляций в Kibana (по полям, а не регулярками);
  • устойчивость к форматным вариациям.

Kibana: поиск, дашборды и расследования

После индексации данных вы можете:

  • Проверить индекс шаблонов и поля (Data Views в Kibana).
  • Построить временную диаграмму событий по source, level, package.
  • Создать запросы по correlation.id или trace_id, чтобы видеть цепочку событий.
  • Сделать алерты (если у вас настроено мониторинговое окружение) при всплесках ошибок.

Практический совет: начинайте с 2–3 поля корреляции (например, package, trace_id, pid) и уже затем расширяйте схему.

Общие рекомендации по надежности

  • Синхронизация времени: используйте UTC (как в примерах) и обеспечьте корректность системного времени.
  • Ротация файлов: не допускайте переполнения хранилища.
  • Идемпотентность: учитывайте возможные повторы при сетевых сбоях (лучше иметь уникальные ключи событий, если доступно).
  • Фильтрация PII: если в логах могут появляться чувствительные данные, их нужно маскировать на стадии Termux/Logstash.
  • Разделение окружений: dev/test/prod индексы и разные pipeline’ы помогают избежать смешивания данных.

Пример жизненного сценария корреляции

Допустим, вы наблюдаете рост ошибок на устройстве. Вы:

  1. В Kibana находите всплеск по level: error и package.
  2. Переходите к событиям и видите correlation.id или trace_id.
  3. Фильтруете по correlation.id, чтобы увидеть последовательность событий до отказа.
  4. Оцениваете PID/источник и временные интервалы, чтобы сформировать гипотезу о причине (например, взаимосвязь с определенным системным сервисом или стадией жизненного цикла приложения).

Такая схема превращает разрозненные логи в управляемую трассировку поведения системы.

Заключение

Автоматизированный сбор и корреляция логов из Android на базе Termux в связке с Elastic Stack позволяют превратить диагностику в системный процесс: данные собираются в структурированном виде, доставляются Filebeat, нормализуются и обогащаются в Logstash, а визуализация и расследования выполняются в Kibana. Практическая ключевая идея — формировать надежный формат событий (желательно JSON Lines) и строить корреляцию на заранее выбранных ключах (например, package, trace_id, pid и composite correlation.id).

Если вам нужна помощь с проектированием пайплайна, настройкой Filebeat/Logstash под ваши источники логов и шаблонами Kibana, команда РыбинскЛАБ предоставит соответствующие услуги: аудит логирования, разработка pipeline’ов, внедрение и сопровождение Elastic Stack для ваших задач на Android/Termux.

* Текст статьи подготовлен и структурирован с использованием технологий искусственного интеллекта. Проверен и доработан перед публикацией.

Нужна помощь с настройкой Termux, Linux и серверов?

Я оказываю ИТ-услуги: настройка серверов, автоматизация, безопасность, помощь с Linux и инфраструктурой. Материалы сайта — только в ознакомительных и образовательных целях.

Связаться со мной
Поддержать проект