Категории

rpi_monitor.sh - сбор системных метрик Raspberry Pi

30.11.2025 19:28 | коды из категории: IOT умный дом

про Сбор системных метрик Raspberry Pi

Сбор системных метрик Raspberry Pi через rpi_monitor.sh

В моей IoT-инфраструктуре важно не только следить за датчиками, но и контролировать состояние самой Raspberry Pi. Для этого я написал простой bash-скрипт rpi_monitor.sh, который раз в несколько минут собирает ключевые системные метрики и отправляет их одновременно в MQTT и в локальную базу данных MySQL.

Это позволяет:

Скрипт работает автономно через cron и не зависит от веб-сервера — даже если PHP-интерфейс ляжет, сбор данных продолжится.

Что именно собирается:

Где данные хранятся:

Полный код скрипта:

#!/bin/bash

# Конфигурация
MYSQL_USER="iot_user"
MYSQL_PASS="123456"
MYSQL_DB="iot_db"
MQTT_TOPIC="homeassistant/rpi_monitor"
MQTT_HOST="localhost"

# Получаем данные о системе
# Температура CPU
CPU_TEMP=$(vcgencmd measure_temp | cut -d= -f2 | cut -d\' -f1)
[ -z "$CPU_TEMP" ] && CPU_TEMP=$(cat /sys/class/thermal/thermal_zone0/temp | awk '{print $1/1000}')

# Напряжение ядра
VOLT_CORE=$(vcgencmd measure_volts core 2>/dev/null | cut -d= -f2 | tr -d 'V')
[ -z "$VOLT_CORE" ] && VOLT_CORE="N/A"

# Загрузка CPU
CPU_LOAD=$(top -bn1 | grep "Cpu(s)" | sed "s/.*, *\([0-9.]*\)%* id.*/\1/" | awk '{print 100 - $1}')

# Использование памяти
MEM_TOTAL=$(free -m | awk '/Mem:/ {print $2}')
MEM_USED=$(free -m | awk '/Mem:/ {print $3}')
MEM_PERCENT=$(free | awk '/Mem:/ {printf("%.1f"), $3/$2*100}')

# Использование диска
DISK_USAGE=$(df -h / | awk 'NR==2 {print $5}' | tr -d '%')

# Uptime системы
UPTIME=$(uptime -p)

# IP-адреса
IP_ADDRESSES=$(hostname -I | tr '\n' ' ')

# Формируем JSON для MQTT
JSON_DATA=$(jq -n \
  --arg cpu_temp "$CPU_TEMP" \
  --arg cpu_load "$CPU_LOAD" \
  --arg mem_total "$MEM_TOTAL" \
  --arg mem_used "$MEM_USED" \
  --arg mem_percent "$MEM_PERCENT" \
  --arg disk_usage "$DISK_USAGE" \
  --arg uptime "$UPTIME" \
  --arg ip_addresses "$IP_ADDRESSES" \
  --arg volt_core "$VOLT_CORE" \
  '{
    "cpu_temp": $cpu_temp,
    "cpu_load": $cpu_load,
    "mem_total": $mem_total,
    "mem_used": $mem_used,
    "mem_percent": $mem_percent,
    "disk_usage": $disk_usage,
    "uptime": $uptime,
    "ip_addresses": $ip_addresses,
    "volt_core": $volt_core,
    "timestamp": now | todate
  }'
)
# Отправляем в MQTT
mosquitto_pub -h $MQTT_HOST -t $MQTT_TOPIC -m "$JSON_DATA"

# Записываем в MySQL
mysql -u $MYSQL_USER -p$MYSQL_PASS $MYSQL_DB <<EOF
INSERT INTO rpi_monitor (
  cpu_temp, cpu_load, mem_total, mem_used, mem_percent,
  disk_usage, volt_core, uptime, ip_addresses, timestamp   -- ← добавлено
) VALUES (
  '$CPU_TEMP', '$CPU_LOAD', '$MEM_TOTAL', '$MEM_USED', '$MEM_PERCENT',
  '$DISK_USAGE', '$VOLT_CORE', '$UPTIME', '$IP_ADDRESSES', NOW()   -- ← добавлено
);
EOF

💡 Совет: Запускайте скрипт через cron каждые 5 минут: */5 * * * * /opt/iot/rpi_monitor.sh

Теги: #linux #cron #bash-скрипт #системный_мониторинг

Комментарии

Пока нет комментариев. Будьте первым!

Оставить комментарий

← Назад к списку

Важно: Блог-эксперимент

Блог только запустил, все статьи генерирую через нейросеть т.к. лень, возможны ошибки. Просто чтобы вы знали и не запускали ядерный реактор по моим статьям ))
Если у вас есть вопросы, или Нашли неточность? пишите в коментах — вместе поправим и сделаем статью более качественной. Я лично объясню нюансы из практики.

Посетителей сегодня: 0


кто я | книга | контакты без контактов

© Digital Specialist | Не являемся сотрудниками Google, Яндекса и NASA