Современные Android‑устройства способны выступать полноценными источниками системных метрик, а Termux позволяет организовать сбор данных и отправку их в Prometheus для последующей визуализации в Grafana. В результате вы получаете веб‑дашборд, который показывает состояние устройства в реальном времени: CPU, память, дисковое потребление, сетевую активность и другие показатели.
Важно: в статье рассмотрен сценарий локального мониторинга в пределах вашей сети (без использования VPN для обхода ограничений). Для наглядности приведены варианты размещения компонентов в зависимости от того, где вам удобнее запускать Prometheus/Grafana.
Архитектура решения
Есть два распространённых подхода:
- Вариант A (рекомендуется): Prometheus и Grafana запускаются на компьютере/сервере в локальной сети, а Termux на Android отдаёт метрики по HTTP эндпоинтом. Это проще в эксплуатации и удобнее для длительной работы.
- Вариант B: Prometheus и Grafana также запускаются в Termux. Подходит для экспериментов, но ограничивает ресурсы и усложняет обслуживание.
Ниже разобран в основном вариант A — он наиболее практичен для веб‑визуализации.
Что понадобится
- Android‑устройство с установленным Termux.
- Компьютер/сервер в той же локальной сети (Windows/Linux/macOS) для запуска Prometheus и Grafana.
- Доступ по IP устройства (вы сможете обратиться к Android по адресу Termux‑сервера метрик).
- Достаточно свободного места под дашборды/логи.
Если требуется, можно использовать VPN только для создания локальной сети между устройствами (например, для стабильного доступа к адресам в разных подсетях).
Шаг 1. Подготовка Termux и установка инструментов
Запустите Termux и выполните установку пакетов. В зависимости от сборки Android некоторые пакеты могут вести себя по‑разному, поэтому используйте актуальный менеджер пакетов Termux.
pkg update && pkg upgrade -y
pkg install -y prometheus-client python termux-api procps net-tools curl
Пояснение по ключевым пакетам:
- prometheus-client — библиотека для экспонирования метрик в формате Prometheus.
- python — запуск небольшого HTTP‑сервера с метриками.
- procps — утилиты для получения показателей CPU/памяти (например,
top,freeи аналоги в Termux‑экосистеме).
Шаг 2. Создание скрипта экспортёра метрик (Android → Prometheus)
Мы сделаем простой экспортер, который открывает HTTP‑эндпоинт /metrics. Prometheus будет периодически опрашивать его.
Создайте файл, например metrics_exporter.py.
nano metrics_exporter.py
Вставьте содержимое:
#!/data/data/com.termux/files/usr/bin/python
from prometheus_client import start_http_server, Gauge
import subprocess
import time
# Метрики
cpu_usage = Gauge('android_cpu_usage_percent', 'CPU usage percent (approx)')
memory_total = Gauge('android_memory_total_kb', 'Total memory (KB)')
memory_used = Gauge('android_memory_used_kb', 'Used memory (KB)')
memory_free = Gauge('android_memory_free_kb', 'Free memory (KB)')
# Простейшая оценка CPU из /proc/stat (можно улучшить, но для наглядности достаточно)
prev_idle = None
prev_total = None
def read_cpu_usage_percent():
global prev_idle, prev_total
with open('/proc/stat', 'r') as f:
line = f.readline()
parts = line.split()
# В /proc/stat первая строка: cpu user nice system idle iowait irq softirq steal guest guest_nice
user = int(parts[1])
nice = int(parts[2])
system = int(parts[3])
idle = int(parts[4])
iowait = int(parts[5]) if len(parts) > 5 else 0
irq = int(parts[6]) if len(parts) > 6 else 0
softirq = int(parts[7]) if len(parts) > 7 else 0
steal = int(parts[8]) if len(parts) > 8 else 0
total = user + nice + system + idle + iowait + irq + softirq + steal
if prev_idle is None or prev_total is None:
prev_idle = idle
prev_total = total
return 0.0
diff_idle = idle - prev_idle
diff_total = total - prev_total
prev_idle = idle
prev_total = total
if diff_total == 0:
return 0.0
usage = (diff_total - diff_idle) / diff_total * 100.0
return max(0.0, min(100.0, usage))
def read_memory_kb():
# Пытаемся получить через free; если недоступно — парсим /proc/meminfo
try:
out = subprocess.check_output(['free', '-k'], text=True)
# Ожидаем строку с "Mem:" где поля: total used free ...
for line in out.splitlines():
if line.lower().startswith('mem:'):
parts = line.split()
total = int(parts[1])
used = int(parts[2])
free = int(parts[3])
return total, used, free
except Exception:
pass
mem = {}
with open('/proc/meminfo', 'r') as f:
for line in f:
key, val = line.split(':', 1)
mem[key.strip()] = val.strip().split()[0]
total = int(mem.get('MemTotal', 0))
free = int(mem.get('MemFree', 0))
# Используем оценку: used = total - free (упрощение)
used = max(0, total - free)
return total, used, free
def main():
# Порт для HTTP-экспортёра
port = 9105
start_http_server(port)
while True:
cpu = read_cpu_usage_percent()
total, used, free = read_memory_kb()
cpu_usage.set(cpu)
memory_total.set(total)
memory_used.set(used)
memory_free.set(free)
time.sleep(2)
if name == 'main':
main()
Сделайте файл исполняемым и запустите:
chmod +x metrics_exporter.py
python metrics_exporter.py
Теперь Android начнёт отдавать метрики на http://<IP_вашего_Android>:9105/metrics.
Проверьте адрес и доступность из Termux (или с компьютера):
termux-setup-storage
ip addr show
В Termux вы можете дополнительно проверить, что эндпоинт отвечает:
curl -s http://127.0.0.1:9105/metrics | head
Шаг 3. Разрешение сетевого доступа (локальная сеть)
На Android SELinux и сетевые политики могут ограничивать доступ к приложениям и портам. Чаще всего сервер метрик Termux доступен в пределах локальной сети, но в некоторых сценариях могут потребоваться действия на стороне сети/роутера.
Минимальная проверка:
- Android и компьютер должны находиться в одной Wi‑Fi сети или маршрутизироваться без NAT‑изоляции.
- Порт 9105 должен быть доступен для входящих соединений в пределах локальной сети.
Если на практике доступа из компьютера нет, проверьте IP Android (сейчас важен именно IP устройства, а не localhost).
Шаг 4. Настройка Prometheus для сбора метрик
На компьютере откройте конфигурацию Prometheus. Если Prometheus уже установлен, найдите файл prometheus.yml.
Пример минимальной конфигурации (добавьте scrape конфигурацию для Android):
global:
scrape_interval: 5s
scrape_configs:
- job_name: 'android_termux'
static_configs:
- targets: ['<IP_вашего_Android>:9105']
Перезапустите Prometheus.
После запуска проверьте статус целей:
- Откройте веб‑интерфейс Prometheus (обычно
http://localhost:9090). - Перейдите в Targets и убедитесь, что job android_termux в состоянии UP.
Шаг 5. Подключение Grafana и создание дашборда
Запустите Grafana и подключите Prometheus как источник данных.
- Откройте Grafana (обычно
http://localhost:3000). - Перейдите в Connections → Data sources.
- Выберите Prometheus и укажите URL (например,
http://localhost:9090или адрес Prometheus в вашей сети). - Сохраните.
Далее создайте панели:
- CPU: запрос
android_cpu_usage_percent - Память:
android_memory_used_kb,android_memory_free_kb,android_memory_total_kb
В Grafana обычно удобно сделать:
- Линейный график для CPU %.
- Стек/график для памяти (используемая/свободная) либо вычисление доли (например,
used / total— в зависимости от предпочтений).
Шаг 6. Реальное время и проверка стабильности
Для реального “живого” отображения держите в голове два параметра:
- scrape_interval в Prometheus (например, 5s).
- Частоту обновления метрик в экспортере (в примере — каждую 2 секунды).
Если вы замечаете “рывки” на графиках:
- Проверьте доступность
/metricsс компьютера:curlили браузер. - Посмотрите логи Prometheus и убедитесь, что ошибок scraping нет.
- Убедитесь, что Android не уходит в жёсткий режим сна, который может прервать работу процессов.
Расширение набора метрик
Приведённый экспортер демонстрационный. Для промышленной практики часто добавляют:
- Сетевую активность: байты/пакеты по интерфейсам.
- Дисковые показатели: свободное место по разделам (в Android может отличаться способом доступа).
- Температуры и частоты (если доступны через подсистемы устройства).
Подход остаётся тот же: добавляете новые Gauge/Counter, читаете значения из /proc или системных утилит и обновляете метрики в цикле.
Важные замечания по безопасности
- Держите мониторинг в пределах локальной сети. Для доступа извне используйте безопасные механизмы, согласованные с вашей инфраструктурой.
- Не выставляйте метрики на публичный интернет без необходимости.
- Следите за тем, чтобы Android‑устройство не теряло IP (например, при смене Wi‑Fi сети).
Заключение
Связка Termux → Prometheus → Grafana позволяет организовать удобный веб‑мониторинг системных метрик Android‑устройства в реальном времени. Вы получаете прозрачную картину по CPU и памяти, а при желании легко расширяете набор метрик под свои задачи.
Если вам нужно быстро спроектировать и развернуть мониторинг “под ключ”, подобрать оптимальные интервалы, добавить нужные метрики и подготовить готовые дашборды — обращайтесь в РыбинскЛАБ. Мы поможем организовать стабильный сбор данных и визуализацию для ваших стендов и устройств.