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

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

Построение системы мониторинга и реагирования на инциденты (SIEM) в Termux с помощью Elastic Stack и Loki

Termux – это мощный терминал для Android, который позволяет запускать полноценные Linux‑утилиты прямо на смартфоне. В статье мы покажем, как превратить ваш мобильный девайс в компактную, но функциональную систему мониторинга и реагирования на инциденты (SIEM) на базе Elastic Stack и Loki. Такой подход полезен для:

  • Отслеживания системных журналов и сетевого трафика на мобильных и IoT‑устройствах;
  • Быстрого реагирования на подозрительные события без необходимости отдельного сервера;
  • Тестирования правил детекции в полевых условиях.

Подготовка Termux

Убедитесь, что у вас установлена последняя версия Termux и подключены репозитории unstable и x11-repo (для графических компонентов). Выполните:

pkg update && pkg upgrade -y
pkg install -y wget curl tar proot git
pkg install -y unstable-repo x11-repo

Для последующего запуска Grafana понадобится X‑сервер (например, XServer XSDL).

Установка Java и Elasticsearch

Elastic Stack требует JDK 17+. В Termux проще всего установить OpenJDK из репозитория:

pkg install -y openjdk-17

Скачиваем и распаковываем Elasticsearch (версии 8.x):

wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-8.13.0-linux-x86_64.tar.gz -O es.tar.gz
mkdir -p $HOME/elastic && tar -xzf es.tar.gz -C $HOME/elastic --strip-components=1

Настраиваем базовый конфиг ($HOME/elastic/config/elasticsearch.yml):

cat > $HOME/elastic/config/elasticsearch.yml <<'EOF'
cluster.name: termux-siem
node.name: termux-node
path.data: $HOME/elastic/data
path.logs: $HOME/elastic/logs
network.host: 127.0.0.1
http.port: 9200
xpack.security.enabled: false
EOF

Запускаем в фоне:

cd $HOME/elastic
nohup bin/elasticsearch &

Установка Kibana

Kibana – веб‑интерфейс для визуализации данных Elasticsearch. Скачиваем и распаковываем:

wget https://artifacts.elastic.co/downloads/kibana/kibana-8.13.0-linux-x86_64.tar.gz -O kibana.tar.gz
mkdir -p $HOME/kibana && tar -xzf kibana.tar.gz -C $HOME/kibana --strip-components=1

Базовый конфиг ($HOME/kibana/config/kibana.yml) выглядит так:

cat > $HOME/kibana/config/kibana.yml <<'EOF'
server.port: 5601
server.host: "0.0.0.0"
elasticsearch.hosts: ["http://127.0.0.1:9200"]
EOF

Запуск:

cd $HOME/kibana
nohup bin/kibana &

Откройте http://127.0.0.1:5601 в браузере Termux (можно через termux-open-url).

Установка Logstash

Logstash будет собирать логи Android‑устройства и передавать их в Elasticsearch.

wget https://artifacts.elastic.co/downloads/logstash/logstash-8.13.0-linux-x86_64.tar.gz -O logstash.tar.gz
mkdir -p $HOME/logstash && tar -xzf logstash.tar.gz -C $HOME/logstash --strip-components=1

Создаём простой pipeline ($HOME/logstash/pipeline/android.conf) для чтения системных журналов через logcat:

cat > $HOME/logstash/pipeline/android.conf <<'EOF'
input {
  exec {
    command => "logcat -d"
    interval => 60
    codec => multiline {
      pattern => "^\\d{2}-\\d{2}"
      negate => true
      what => "previous"
    }
  }
}
filter {
  grok {
    match => { "message" => "%{TIMESTAMP_ISO8601:timestamp} %{LOGLEVEL:level} %{GREEDYDATA:msg}" }
  }
  date { match => ["timestamp", "ISO8601"] }
}
output {
  elasticsearch {
    hosts => ["http://127.0.0.1:9200"]
    index => "android-logs-%{+YYYY.MM.dd}"
  }
  stdout { codec => rubydebug }
}
EOF

Запуск pipeline в фоне:

cd $HOME/logstash
nohup bin/logstash -f pipeline/android.conf &

Установка Loki и Promtail

Loki – легковесный агрегатор логов, оптимизированный под Grafana. Скачиваем официальные бинарники:

wget https://github.com/grafana/loki/releases/download/v2.9.2/loki-linux-amd64.zip -O loki.zip
unzip loki.zip -d $HOME/loki
chmod +x $HOME/loki/loki-linux-amd64
wget https://github.com/grafana/promtail/releases/download/v2.9.2/promtail-linux-amd64.zip -O promtail.zip
unzip promtail.zip -d $HOME/promtail
chmod +x $HOME/promtail/promtail-linux-amd64

Создаём конфиги:

cat > $HOME/loki/config.yml <<'EOF'
auth_enabled: false
server:
  http_listen_port: 3100
  grpc_listen_port: 9095
ingester:
  lifecycler:
    address: 127.0.0.1
    ring:
      kvstore:
        store: inmemory
      replication_factor: 1
  chunk_idle_period: 5m
  max_chunk_age: 1h
schema_config:
  configs:
    - from: 2020-10-24
      store: boltdb-shipper
      object_store: filesystem
      schema: v11
      index:
        prefix: index_
        period: 24h
storage_config:
  boltdb_shipper:
    active_index_directory: /tmp/loki/boltdb-shipper-active
    cache_location: /tmp/loki/boltdb-shipper-cache
    shared_store: filesystem
  filesystem:
    directory: /tmp/loki/chunks
limits_config:
  enforce_metric_name: false
  reject_old_samples: true
  reject_old_samples_max_age: 168h
EOF
cat > $HOME/promtail/config.yml <<'EOF'
server:
  http_listen_port: 9080
  grpc_listen_port: 0
positions:
  filename: /tmp/positions.yaml
clients:
  - url: http://127.0.0.1:3100/loki/api/v1/push
scrape_configs:
  - job_name: system
    static_configs:
      - targets:
          - localhost
        labels:
          job: system
          path: /proc/$(pidof logcat)/
  - job_name: android_logcat
    static_configs:
      - targets:
          - localhost
        labels:
          job: logcat
          path: /data/data/com.termux/files/usr/tmp/logcat.log
EOF

Запускаем Loki и Promtail:

nohup $HOME/loki/loki-linux-amd64 -config.file=$HOME/loki/config.yml &
nohup $HOME/promtail/promtail-linux-amd64 -config.file=$HOME/promtail/config.yml &

Интеграция Loki с Grafana

Устанавливаем Grafana (ARM64‑версия) и подключаем её к Loki и Elasticsearch.

wget https://dl.grafana.com/oss/release/grafana-10.4.0.linux-arm64.tar.gz -O grafana.tar.gz
mkdir -p $HOME/grafana && tar -xzf grafana.tar.gz -C $HOME/grafana --strip-components=1
cd $HOME/grafana
nohup bin/grafana-server web &

В браузере откройте http://127.0.0.1:3000, добавьте два источника данных:

  • Loki – URL http://127.0.0.1:3100
  • Elasticsearch – URL http://127.0.0.1:9200

Создайте дашборд, комбинирующий системные метрики (Grafana) и логи (Loki/Elasticsearch).

Настройка алертинга и автоматического реагирования

Для простого реагирования используем alertmanager из Prometheus‑стека.

wget https://github.com/prometheus/alertmanager/releases/download/v0.27.0/alertmanager-linux-arm64.tar.gz -O am.tar.gz
mkdir -p $HOME/alertmanager && tar -xzf am.tar.gz -C $HOME/alertmanager --strip-components=1
cat > $HOME/alertmanager/config.yml <<'EOF'
global:
  resolve_timeout: 5m
route:
  receiver: telegram
receivers:
  - name: telegram
    telegram_configs:
      - bot_token: "YOUR_BOT_TOKEN"
        chat_id: "YOUR_CHAT_ID"
EOF
nohup $HOME/alertmanager/alertmanager --config.file=$HOME/alertmanager/config.yml &

Создайте правила в Grafana (или в Prometheus) – например, при росте количества записей уровня ERROR в Loki более 100 за минуту отправлять сообщение в Telegram.

Тестирование и отладка

1. Сгенерируйте искусственный лог:

logcat -L "03-01 12:00:00.000 I TestTag: Test message"

2. Проверьте, что запись попала в Elasticsearch:

curl -s http://127.0.0.1:9200/android-logs-/_search?pretty | grep "TestTag"

3. Откройте дашборд в Grafana и убедитесь, что событие отобразилось в панели Loki.

Оптимизация под мобильные ограничения

  • Отключайте X‑пакетные плагины в Elasticsearch, если они не нужны – экономия RAM.
  • Уменьшите retention в Loki (например, 7 дней) в storage_config.
  • Запускайте сервисы через proot-distro в отдельном контейнере, чтобы изолировать ресурсоёмкие процессы.

Заключение

В результате вы получили полностью автономную SIEM‑платформу, работающую на Android‑устройстве через Termux. Elastic Stack отвечает за хранение и мощный поиск, Loki – за лёгкую агрегацию логов, а Grafana объединяет всё в едином визуальном интерфейсе с поддержкой алертинга.

Если вы хотите масштабировать решение, интегрировать его с корпоративными системами или получить профессиональную поддержку по настройке и оптимизации, обратитесь в RybinskLab. Мы предлагаем:

  • Консультации и аудит текущих систем мониторинга;
  • Разработку кастомных дашбордов и правил детекции;
  • Поддержку и обслуживание гибридных SIEM‑решений (on‑premise + облако).

Свяжитесь с нами, и ваш мониторинг будет работать без перебоев, даже на самых ограниченных устройствах.

* Текст статьи подготовлен и структурирован с использованием технологий искусственного интеллекта. Проверен экспертом РыбинскЛАБ.

Поделиться знанием:

Нужна профессиональная помощь?

Меня зовут Усачёв Денис Евгеньевич. Я оказываю ИТ-услуги в Рыбинске и Ярославской области: настройка серверов, безопасность, автоматизация бизнеса. Запомните информация развлекательный ознакомительный носит, не нарушайте закон!

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