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

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

Интеграция Termux с системами мониторинга производительности Android

Termux – это полноценный терминал Linux для Android, который позволяет запускать привычные утилиты, писать скрипты и взаимодействовать с API операционной системы. В статье мы рассмотрим, как превратить ваш смартфон в полноценный агент мониторинга, собирающий метрики производительности и передающий их в популярные системы наблюдения.

Почему Termux – идеальная платформа для мониторинга

Termux работает в пользовательском пространстве, не требуя root‑прав, но при этом имеет доступ к большинству системных файлов через /proc и /sys. Это делает его безопасным и гибким решением для:

  • Сбора метрик CPU, памяти, диска и сети в реальном времени.
  • Запуска пользовательских скриптов на Python, Bash, Perl и др.
  • Отправки данных в удалённые хранилища (InfluxDB, Prometheus, Elasticsearch).
  • Интеграции с контейнерными решениями (Docker‑like окружение в Termux).

Популярные системы мониторинга, совместимые с Android

  • htop – интерактивный просмотр нагрузки CPU и памяти.
  • top – базовый монитор в реальном времени.
  • sysstat (iostat, mpstat) – детализированные статистики ввода‑вывода.
  • adb shell dumpsys – доступ к системным сервисам Android.
  • Perf – профилирование ядра и пользовательского кода.
  • Netdata – локальная визуализация, умеет экспортировать в InfluxDB/Prometheus.
  • Prometheus node_exporter – лёгкий экспортёр метрик.
  • InfluxDB Telegraf – агент, собирающий данные через плагины.

Установка необходимых пакетов в Termux

pkg update && pkg upgrade
pkg install htop sysstat python git curl
pip install --upgrade pip
pip install influxdb-client prometheus-client
# При желании установить node_exporter (сборка из исходников)

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

Сбор метрик с помощью встроенных утилит

Для большинства задач достаточно использовать стандартные команды Linux:

  • top -b -n 1 – однократный вывод полной таблицы процессов.
  • htop -b -n 1 – аналог в парсируемом формате.
  • iostat -dx 1 5 – статистика дисковых операций.
  • mpstat -P ALL 1 5 – нагрузка на каждый ядро.
  • cat /proc/meminfo – детальная информация о памяти.
  • cat /proc/net/dev – сетевой трафик.

Эти команды можно объединить в Bash‑скрипт, который будет формировать JSON‑сообщения для дальнейшей отправки.

Экспорт данных в InfluxDB

Ниже пример простого Python‑скрипта, отправляющего метрики CPU и памяти в InfluxDB. Скрипт можно запускать по расписанию.

# export_influx.py
import time, json, subprocess
from influxdb_client import InfluxDBClient, Point, WriteOptions
# Параметры подключения (замените на свои)
url = "http://192.168.1.100:8086"
token = "my-token"
org = "my-org"
bucket = "android_metrics"
client = InfluxDBClient(url=url, token=token, org=org)
write_api = client.write_api(write_options=WriteOptions(batch_size=1))
def get_cpu():
    out = subprocess.check_output(["top", "-b", "-n", "1"]).decode()
    for line in out.splitlines():
        if "Cpu(s):" in line:
            # Пример: Cpu(s): 12.3%us, 3.4%sy, 0.0%ni, 82.5%id, ...
            parts = line.split(',')
            usage = 100 - float(parts[3].split('%')[0].strip())
            return usage
    return 0.0
def get_mem():
    out = subprocess.check_output(["cat", "/proc/meminfo"]).decode()
    mem_total = mem_free = 0
    for line in out.splitlines():
        if line.startswith('MemTotal'):
            mem_total = int(line.split()[1])
        if line.startswith('MemAvailable'):
            mem_free = int(line.split()[1])
    used = mem_total - mem_free
    return used / mem_total  100
while True:
    cpu = get_cpu()
    mem = get_mem()
    point = Point("android_performance")\
        .field("cpu_usage", cpu)\
        .field("mem_usage", mem)\
        .time(int(time.time()1e9))
    write_api.write(bucket=bucket, org=org, record=point)
    time.sleep(30)  # интервал отправки

Скрипт работает в бесконечном цикле, отправляя данные каждые 30 секунд. Для фонового запуска используйте nohup или Termux‑Scheduler.

Интеграция с Prometheus через node_exporter

Если ваша инфраструктура построена на Prometheus, рекомендуется собрать node_exporter в Termux. Процесс установки:

# Скачивание последней версии (пример для arm64)
wget https://github.com/prometheus/node_exporter/releases/download/v1.7.0/node_exporter-1.7.0.linux-arm64.tar.gz
tar -xzf node_exporter-1.7.0.linux-arm64.tar.gz
cd node_exporter-1.7.0.linux-arm64
# Запуск в фоне
./node_exporter &
# Проверка доступности
curl http://127.0.0.1:9100/metrics | head

Prometheus может скрапать метрики по адресу http://device_ip:9100/metrics. При необходимости ограничьте доступ с помощью iptables или VPN.

Автоматизация с помощью Termux‑Scheduler (cron‑подобный планировщик)

Termux предоставляет встроенный планировщик termux-scheduler, аналогичный cron. Пример создания задачи, запускающей скрипт каждые 5 минут:

termux-scheduler --add --interval 300 --command "python /data/data/com.termux/files/home/export_influx.py"
# Список задач
termux-scheduler --list

Для более гибкого управления можно использовать обычный crontab после установки пакета cronie:

pkg install cronie
crontab -e
# Добавьте строку
/5     python /data/data/com.termux/files/home/export_influx.py

Практический пример: мониторинг CPU, памяти и сетевого трафика

Объединим всё в один Bash‑скрипт, который собирает три метрики и отправляет их в InfluxDB через HTTP‑API (без клиента Python). Такой подход удобен, если на устройстве нет Python.

# monitor.sh
#!/data/data/com.termux/files/usr/bin/bash
INFLUX_URL="http://192.168.1.100:8086/api/v2/write?org=my-org&bucket=android_metrics&precision=s"
TOKEN="my-token"
while true; do
  # CPU usage (idle % -> usage)
  CPU_IDLE=$(top -b -n1 | grep 'Cpu(s):' | awk -F',' '{print $4}' | awk '{print $1}' | tr -d '%')
  CPU_USAGE=$(echo "100 - $CPU_IDLE" | bc)
  # Memory usage
  MEM_TOTAL=$(grep MemTotal /proc/meminfo | awk '{print $2}')
  MEM_AVAIL=$(grep MemAvailable /proc/meminfo | awk '{print $2}')
  MEM_USAGE=$(echo "scale=2; (1-($MEM_AVAIL/$MEM_TOTAL))100" | bc)
  # Network traffic (bytes received on wlan0)
  RX_BYTES=$(cat /sys/class/net/wlan0/statistics/rx_bytes)
  TX_BYTES=$(cat /sys/class/net/wlan0/statistics/tx_bytes)
  # Формируем line protocol
  DATA="android_perf cpu_usage=$CPU_USAGE,mem_usage=$MEM_USAGE,wifi_rx=$RX_BYTES,wifi_tx=$TX_BYTES $(date +%s)"
  # Отправляем
  curl -i -XPOST "$INFLUX_URL" \
       -H "Authorization: Token $TOKEN" \
       -H "Content-Type: text/plain; charset=utf-8" \
       --data-binary "$DATA"
  sleep 60
 done

Сделайте скрипт исполняемым (chmod +x monitor.sh) и запустите его в фоне (nohup ./monitor.sh &) или добавьте в планировщик.

Заключение

Termux предоставляет всё необходимое для построения собственного агента мониторинга на Android‑устройстве без рут‑прав. С помощью стандартных Linux‑утилит, Python‑скриптов и лёгких экспортёров (node_exporter, Telegraf) можно собрать детальные метрики CPU, памяти, диска и сети, а затем передать их в InfluxDB, Prometheus или любую другую систему визуализации.

Если вам требуется профессиональная настройка мониторинга, интеграция с корпоративными системами или разработка кастомных решений под Android, обращайтесь – профессиональные IT‑услуги в Рыбинске оказывает RybinskLab.

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

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

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

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

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