Логи — это основной источник информации о том, что происходит с приложениями и сервисами. Даже на мобильном устройстве можно организовать полноценный контур «сбор → обработка → визуализация» с ELK‑стеком, если правильно настроить сборщик (Filebeat), обработчик (Logstash) и интерфейс аналитики (Kibana). В этой статье рассмотрим практический, безопасный и реалистичный подход к автоматическому сбору логов приложений из Termux, их маршрутизации в Logstash и последующей визуализации в Kibana.
Целевая архитектура: как все работает
Схема выглядит так:
- Termux формирует и/или хранит лог-файлы (например, логи приложений, системные логи Termux, логи ваших скриптов).
- Filebeat читает указанные файлы, нормализует события и отправляет их в Logstash по сети.
- Logstash принимает события, при необходимости обогащает их, нормализует поля (grok/mutate), и отправляет в Elasticsearch.
- Kibana строит запросы, дашборды, визуализации и алерты по данным из Elasticsearch.
Такой подход позволяет держать логи «живыми»: как только в файлах появляется новая запись, Filebeat отправляет ее в ELK без ручных действий.
Требования и подготовка
Ниже перечислены типовые требования. Конкретные версии можно подобрать под вашу инфраструктуру.
- Termux (рекомендуется актуальная версия приложения).
- Filebeat на Android через путь: либо совместимый пакет/бинарник (если вы используете сборку под ARM), либо запуск в контейнерной среде (при наличии подходящего окружения). На практике чаще используют второй вариант — запуск в среде, где обеспечивается совместимость.
- Logstash, Elasticsearch, Kibana — на сервере/ПК в вашей локальной сети или в облаке (для мобильного устройства важна доступность по сети).
- Сеть: мобильное устройство должно иметь маршрут до сервера с Logstash/Elasticsearch. Для этого подойдет создание локальной сети (например, через VPN, если вам нужно объединить устройства в одну подсеть).
Важно: логируйте только то, что действительно нужно, и следите за конфиденциальностью (пароли/токены не должны попадать в логи без маскирования).
Где брать логи в Termux
Термины из ELK подразумевают, что мы читаем события из файлов. В Termux часто удобно организовать ваши логи в каталогах:
$HOME/storage/shared/(если нужно видеть файлы снаружи Termux и обмениваться ими)- внутренние каталоги Termux, зависящие от вашей конфигурации (например,
/data/data/com.termux/files/home/, где обычно и лежит домашняя директория Termux) - лог-файлы ваших скриптов, которые пишутся через
tee,logger(если настроено) или прямую запись
Пример: пусть вы решили собирать логи из файла ~/logs/app.log.
mkdir -p ~/logs
# пример: пишем тестовую строку в лог
echo "2026-07-11T12:00:00Z app started" >> ~/logs/app.log
Установка и подготовка Filebeat в контуре
Дальше важно понимать модель запуска Filebeat. В статье приведем конфигурационный подход, который одинаков для разных способов установки (локально, в контейнере, в chroot‑окружении). Вам нужно лишь обеспечить, чтобы Filebeat имел доступ к файлам логов Termux и мог подключаться к Logstash по сети.
Конфигурация Filebeat: input, parsing и output в Logstash
Создадим конфигурацию Filebeat с модулем filestream (предпочтительнее, чем legacy log в современных версиях). Концептуально мы делаем:
- настраиваем чтение файла;
- задаем шаблон для добавления полей;
- направляем события на Logstash.
Пример конфигурации filebeat.yml (адаптируйте пути и адреса под вашу среду):
# filebeat.yml
filebeat.inputs:
- type: filestream
enabled: true
id: termux-app-log
paths:
- /home/your_user/logs/app.log
# Если файл перезаписывается, настройки зависят от поведения вашего приложения.
# Для большинства сценариев достаточно базовых параметров.
# Добавим несколько полей метаданных
fields:
source_device: termux
service: app
fields_under_root: true
processors:
- add_host_metadata: {}
- add_fields:
target: event
fields:
dataset: termux.app
output.logstash:
hosts: ["192.168.1.10:5044"]
# Если у вас настроены TLS/сертификаты — добавьте параметры SSL.
Обратите внимание на два момента:
- paths: это путь в файловой системе там, где реально работает Filebeat. Если Filebeat запущен не прямо в Termux‑среде, убедитесь, что он видит тот же путь (например, через bind‑mount).
- output.logstash.hosts: адрес Logstash из точки зрения Termux/Filebeat.
Запуск Filebeat (пример):
filebeat -e -c /path/to/filebeat.yml
Настройка Logstash: прием от Filebeat и запись в Elasticsearch
Дальше создаем pipeline в Logstash. Типовой задачей будет:
- принимать события Beats (Filebeat);
- выполнить разбор сообщения при необходимости (например, если ваши логи формата
ISO8601 ...); - отправить в Elasticsearch.
Пример файла /etc/logstash/conf.d/termux-beats.conf:
input {
beats {
port => 5044
}
}
filter {
# Пример: простой разбор сообщения.
# Если поле сообщения называется [message], используйте его.
# Формат: "2026-07-11T12:00:00Z app started"
if [message] {
grok {
match => {
"message" => ["%{TIMESTAMP_ISO8601:log_time} %{WORD:component} %{GREEDYDATA:log_message}"]
}
# Если ваши логи имеют другой формат — адаптируйте grok.
}
date {
match => ["log_time", "ISO8601"]
target => "@timestamp"
remove_field => ["log_time"]
}
}
}
output {
elasticsearch {
hosts => ["http://192.168.1.10:9200"]
index => "termux-app-%{+YYYY.MM.dd}"
}
}
Запуск Logstash (пример):
logstash -f /etc/logstash/conf.d/termux-beats.conf
Настройка Kibana: индекс, шаблоны и первый дашборд
Чтобы Kibana начал видеть данные, нужно указать индекс. В зависимости от вашей политики и версий Elasticsearch/Kibana это может быть:
- ручное создание индекс‑паттерна
- использование данных по шаблонам/ILM (если вы их применяете)
Минимальный сценарий:
- откройте Kibana → Stack Management → Index Patterns
- создайте шаблон, например
termux-app- - выберите поле времени
@timestamp
Дальше постройте первый запрос:
- Фильтр по
service:app - Визуализация: количество событий по времени
- Таблица:
component,log_message,host.name
Практические советы по устойчивости и качеству данных
- Адаптируйте grok под реальный формат: чем точнее разбор, тем меньше «мусора» в полях.
- Добавляйте метаданные на стороне Filebeat:
service,source_device,event.datasetускоряют построение фильтров. - Следите за ротацией логов: если приложение ротирует файлы, учитывайте поведение вашего читателя (filestream поддерживает это лучше, но зависит от модели ротации).
- Маскируйте чувствительные данные: лучше настроить фильтры в Logstash (например, regex‑маскирование), чем потом чистить индекс.
- Ограничьте объем: на мобильном устройстве важны батарея/трафик. Используйте только необходимые файлы и события.
Безопасность: сеть и доступ
ELK требует продуманной сетевой настройки:
- открывайте порты (например, 5044 Beats) только в локальной сети или через контролируемый доступ;
- если используете VPN только для создания локальной сети, убедитесь, что трафик защищен и доступ ограничен;
- по возможности используйте TLS для Beats→Logstash и HTTP→Elasticsearch (настройки зависят от версии и инфраструктуры);
- ограничьте права на чтение файлов логов в Termux.
Пример потока «запустить — проверить — подтвердить в Kibana»
Быстрый чеклист:
- Убедитесь, что Logstash слушает порт
5044. - Запустите Filebeat.
- Добавьте строку в
~/logs/app.logна Termux:
echo "2026-07-11T12:05:00Z app user login ok" >> ~/logs/app.log
- В Kibana откройте Discover и посмотрите новые события в индексе
termux-app-. - Проверьте поля:
@timestamp,service,component,log_message.
Заключение
Автоматический сбор и анализ логов приложений из Termux через ELK‑стек — это реальный и практичный способ превратить «мобильные» события в удобную аналитическую картину. Ключ успеха — корректная настройка Filebeat (чтение нужных файлов и метаданные), правильный прием и разбор в Logstash (grok/date и фильтрация), а также грамотная организация индексов и визуализаций в Kibana.
Если вам нужно быстро развернуть связку под вашу сеть, адаптировать фильтры под формат ваших логов или помочь с безопасной настройкой доступа, обращайтесь в РыбинскЛАБ — мы поможем с проектированием и внедрением решения.