45 lines
No EOL
1.8 KiB
Bash
Executable file
45 lines
No EOL
1.8 KiB
Bash
Executable file
#!/bin/bash
|
|
|
|
# Настройки
|
|
METRICS_FILE="/var/lib/node_exporter/textfile_collector/docker_cpu.prom"
|
|
TEMP_FILE="/tmp/docker_stats.tmp"
|
|
|
|
|
|
# Очищаем выходной файл
|
|
> "$METRICS_FILE"
|
|
|
|
# Получаем актуальные stats от Docker (без потоковой передачи)
|
|
if ! docker stats --no-stream --format "{{.Name}},{{.CPUPerc}},{{.MemUsage}}" > "$TEMP_FILE"; then
|
|
echo "Ошибка: не удалось получить данные от Docker" >&2
|
|
exit 1
|
|
fi
|
|
|
|
# Пропускаем первую строку (заголовок) и обрабатываем каждую строку
|
|
tail -n +1 "$TEMP_FILE" | while IFS=, read -r container_name cpu_percent mem_usage; do
|
|
# Проверяем наличие данных
|
|
if [[ -z "$container_name" ]] || [[ -z "$cpu_percent" ]]; then
|
|
continue
|
|
fi
|
|
|
|
# Удаляем % и заменяем запятую на точку
|
|
cpu_clean=$(echo "$cpu_percent" | sed 's/%//g' | sed 's/,/./g' | xargs)
|
|
|
|
# Валидируем числовое значение
|
|
if ! [[ "$cpu_clean" =~ ^[0-9]+(\.[0-9]+)?$ ]]; then
|
|
echo "Предупреждение: некорректное значение CPU '$cpu_percent' для контейнера '$container_name'" >&2
|
|
continue
|
|
fi
|
|
|
|
# Формируем метрику (строго: имя{лейбл} значение)
|
|
echo "docker_container_cpu_usage_percent{container=\"$container_name\"} $cpu_clean" >> "$METRICS_FILE"
|
|
done
|
|
|
|
# Удаляем временный файл
|
|
rm -f "$TEMP_FILE"
|
|
|
|
# Если файл пустой — добавляем заглушку
|
|
if ! grep -q "." "$METRICS_FILE"; then
|
|
echo "# NO_DOCKER_CONTAINERS" >> "$METRICS_FILE"
|
|
fi
|
|
|
|
echo "Метрики обновлены в $METRICS_FILE" |