Надёжный мониторинг ваших сервисов забесплатно. Grafana Cloud Free Tier

В современном мире, где домашние сервисы и виртуальные машины играют всё более важную роль в повседневной жизни, мониторинг их состояния становится не просто полезным, а необходимым инструментом. Однако, многие пользователи сталкиваются с проблемой: как организовать эффективный мониторинг, не прибегая к сложным и дорогостоящим решениям? Ответом на этот вопрос может стать использование связки Prometheus, node_exporter и Grafana Free Tier.

Grafana Free Tier предлагает уникальные преимущества, которые делают её идеальным выбором для мониторинга домашних инфраструктур. Во-первых, это доступ к глобальной платформе Grafana Cloud, которая предоставляет надёжное и масштабируемое решение для хранения и визуализации метрик. Вы получаете возможность использовать мощные инструменты Grafana без необходимости развёртывания и поддержки собственного сервера.

Во-вторых, Grafana Free Tier позволяет вам получить персональный адрес для вашей панели мониторинга, что делает доступ к данным удобным и безопасным. Вы можете легко делиться своими дашбордами с коллегами или друзьями, не беспокоясь о конфиденциальности.

Надёжность — ещё один ключевой аспект. Grafana Cloud обеспечивает высокую доступность и устойчивость к сбоям, что особенно важно для домашних пользователей, которые не всегда могут оперативно реагировать на проблемы. Кроме того, встроенные механизмы алертинга позволяют вам своевременно получать уведомления о критических изменениях в работе ваших сервисов, будь то повышенная загрузка процессора, нехватка памяти или сбои в работе сетевых интерфейсов.

Grafana Free Tier кроме самой Grafana предоставляет возможность хранения 10_000 метрик давностью до 14-ти дней, а так же по 50 гигабайтов логов, трейсов и профилей.

В этой статье мы подробно рассмотрим, как настроить и использовать Grafana Free Tier для мониторинга и сбора логов виртуальной машины Linux.

Grafana Cloud

Начнём с того, что зарегистрируемся в Grafana Cloud, выпустим необходимые API токены и получим эндпоинты, в которые будем пушить наши метрики и логи.

  • Заходим на https://grafana.com/auth/sign-in/, регистрируемся, подтверждаем почту, выбираем название для Grafana стэка. Может потребоваться внп.
  • Заходим на страницу своего аккаунта - grafana.com/orgs/%your_stack_name%
  • Переходим в раздел стэка, в котором перечислены все инстансы хранилищ. Нас интересуют Prometheus для метрик и Loki для логов.
  • Нажимаем Send metrics у Prometheus, листаем до раздела Sending metrics with Prometheus.
  • Генерируем токен, сохраняем сниппет конфига в блокнот.
  • Аналогично для Loki. Листаем до Sending Logs to Grafana Cloud using Promtail.
  • Генерируем токен, сохраняем сниппет.

На этом пока всё с Grafan-ой. Переключимся к нашей виртуальной машине, метрики которой мы хотим собирать.

Prometheus и node_exporter

Разберём push схему доставки метрик, в которой адресатом будет глобальный инстанс Prometheus на стороне Grafana Cloud.

Надёжный мониторинг ваших сервисов забесплатно. Grafana Cloud Free Tier

В этой схеме контейнер node_exporter-а собирает метрики о нашей vm и предоставляет эндпоинт /metrics. Контейнер prometheus-а регулярно опрашивает этот эндпоинт (скрэйпит, от "scrape") и пушит полученной в удалённый инстанс Prometheus. Контейнер promtail в свою очередь самостоятельно последовательно читает логи (тэйлит, от "tail") и пушит все новые строки в удалённый эндпоинт Loki.

Инструкция подразумевает, что у вас установлен docker compose и вы имеете начальное представление о его использовании. Как установить docker - Install Docker Engine. В отдельной папке на виртуальной машине, к примеру /opt/prometheus, создайте файл compose.yml со следующим содержимым

services: node-exporter: image: prom/node-exporter:latest container_name: node-exporter restart: unless-stopped volumes: - /proc:/host/proc:ro - /sys:/host/sys:ro - /:/rootfs:ro command: - '--path.procfs=/host/proc' - '--path.rootfs=/rootfs' - '--path.sysfs=/host/sys' - '--collector.filesystem.mount-points-exclude=^/(sys|proc|dev|host|etc)($$|/)' expose: - 9100 network_mode: host prometheus: image: prom/prometheus:latest container_name: prometheus restart: unless-stopped volumes: - ./prometheus.yml:/etc/prometheus/prometheus.yml - prometheus_data:/prometheus command: - '--config.file=/etc/prometheus/prometheus.yml' - '--storage.tsdb.path=/prometheus' - '--web.console.libraries=/etc/prometheus/console_libraries' - '--web.console.templates=/etc/prometheus/consoles' - '--web.enable-lifecycle' expose: - 9090 network_mode: host volumes: prometheus_data: {}

Рядом создайте файл prometheus.yml со следующим содержимым

global: scrape_interval: 15s scrape_configs: - job_name: 'homelab-metrics' static_configs: - targets: ['localhost:9100'] labels: vm: 'ubuntu-1' # то, что мы сохранили в блокнот remote_write: - url: '<эндпоинт Prometheus для записи>' basic_auth: username: '<имя пользователя Grafana>' password: '<ваш Grafana Cloud Access Policy Token>'

Запустим наш docker compose стэк командой

docker compose up -d

Список запущенных контейнеров можно увидеть, выполнив команду

docker compose ps

По адресу http://%vm_ip%:9100/metrics можно увидеть в каком формате node_exporter предоставляет метрики. А по адресу http://%vm_ip%:9090/targets можно увидеть какие источники скрэйпит контейнер prometheus-а.

Надёжный мониторинг ваших сервисов забесплатно. Grafana Cloud Free Tier

Если всё прошло успешно, то контейнер prometheus начал отправлять наши метрики в Grafana Cloud. Давайте убедимся в этом.

  • Откройте страницу вашего Grafana стэка по адресу %your_stack_name%.grafana.net.
  • Перейдите в раздел Explore
  • Среди источников данных выберите grafanacloud-%yout_stack_name%-prom
  • В меню выбора метрик должен заполниться список. Найдите, к примеру, go_info. Далее в лэйблах выберите job, значение homelab-metrics
Надёжный мониторинг ваших сервисов забесплатно. Grafana Cloud Free Tier

Наши метрики доставляются до Grafana Cloud и теперь надёжно храняться интервалом 14 дней и доступны из любой точки земного шара. Тем более нам не пришлось открывать никакие порты на стороне нашей домашней сети тем самым подвергая её ненужной опасности.

Больше информации про Node Exporter и Grafana Cloud - Monitoring a Linux host with Prometheus, Node Exporter, and Docker Compose | Grafana Cloud documentation

Давайте рассмотрим способ визуализировать наши метрики. Мы же всё-таки в Grafana Cloud.

Node Exporter Full dashboard

В разделе Dashboard нам будет предложено создать наш первый дашборд соответствующей кнопкой. Не отказываемся.

Надёжный мониторинг ваших сервисов забесплатно. Grafana Cloud Free Tier

Импортируем готовый дашборд, т.к. комьюнити уже решило проблему визуализации метрик от node_exporter-а

Надёжный мониторинг ваших сервисов забесплатно. Grafana Cloud Free Tier

Укажем ID импортируемого дашборда - 1860

Надёжный мониторинг ваших сервисов забесплатно. Grafana Cloud Free Tier

В качестве источника данных выбираем Prometheus

Надёжный мониторинг ваших сервисов забесплатно. Grafana Cloud Free Tier

Готово! Наш дашборд во всей красе.

Надёжный мониторинг ваших сервисов забесплатно. Grafana Cloud Free Tier

Теперь дело за логами.

Promtail

Контейнер promtail, как уже говорилось, будет читать все новые строки файлов логов и отправлять их в удалённый инстанс Loki.
В нашей папке с конфигами compose.yml и prometheus.yml создадим новый файл с именем promtail-config.yaml и следующим содержимым. На самом деле, это кусок конфига, что мы сохранили из кабинета Grafana.

server: http_listen_port: 0 grpc_listen_port: 0 positions: filename: /tmp/positions.yaml clients: - url: <Promtail API url> scrape_configs: - job_name: system static_configs: - targets: - localhost labels: job: varlogs __path__: /var/log/*.log # по какому паттерну выбираются логи для сбора

Отредактируем файл compose.yml следующим образом

services: node-exporter: image: prom/node-exporter:latest container_name: node-exporter restart: unless-stopped volumes: - /proc:/host/proc:ro - /sys:/host/sys:ro - /:/rootfs:ro command: - '--path.procfs=/host/proc' - '--path.rootfs=/rootfs' - '--path.sysfs=/host/sys' - '--collector.filesystem.mount-points-exclude=^/(sys|proc|dev|host|etc)($$|/)' expose: - 9100 network_mode: host prometheus: image: prom/prometheus:latest container_name: prometheus restart: unless-stopped volumes: - ./prometheus.yml:/etc/prometheus/prometheus.yml - prometheus_data:/prometheus command: - '--config.file=/etc/prometheus/prometheus.yml' - '--storage.tsdb.path=/prometheus' - '--web.console.libraries=/etc/prometheus/console_libraries' - '--web.console.templates=/etc/prometheus/consoles' - '--web.enable-lifecycle' expose: - 9090 network_mode: host # добавим конфигурацию контейнера promtail promtail: image: grafana/promtail:3.3.2 container_name: promtail restart: unless-stopped volumes: - ./:/mnt/config - /var/log:/var/log command: - '--config.file=/mnt/config/promtail-config.yaml' volumes: prometheus_data: {}

Перезапустим docker compose командой

docker compose restart

Проверить, что логи начали поступать можно в разделе Explore / Logs нашего Grafana стэка.

Надёжный мониторинг ваших сервисов забесплатно. Grafana Cloud Free Tier

Больше информации про Loki - Grafana Loki | Grafana Loki documentation. Про logrotate - Promtail and Log Rotation

Заключение

Результатом наших действий стал дашборд в Grafana Cloud, который доступен по своему уникальному адресу из любой точки мира. У нас есть возможность гибко настраивать систему оповещений, чтобы оперативно (или неочень) реагировать на аварии с нашими сервисами.
Кроме того, теперь мы собираем в надёжное хранилище и логи. К ним без проблем можно добавить логи nginx или, например, логи docker контейнеров. Всё, на что хватит вашей фантазии.
10_000 метрик должно спокойно хватать для нужд домашней лаборатории.
Grafana Cloud в своей бесплатной версии предоставляет очень заманчивые возможности для self-hosted комьюнити и стартапов, которые позволяют закрыть большой пласт потребностей в мониторинге и оповещении.

2
Начать дискуссию