Сами Prometheus и Grafana вполне себе не плохо чувствуют себя в docker-контейнерах (хотя я пропобвал и локальную установку, но так проще дропать сервис если надоест) и по этой причине так в итоге и было сделано. Для запуска проще использовать docker-compose, конфигурация которого будет приведена ниже, но сначала нужно создать файлы конфигурации prometheus.yml и web-config.yml для сервиса prometheus, которые будут лежать в папке config рядом с docker-compose.yml. Так же понадобится создать вручную папку metrics и сделать ее владельцем пользователя с UID=65534 и группой GID=65534. Это нужно чтобы у Prometheus’a не возникло проблем с созданием базы для хранения метрик.
# Sample config for Prometheus.global:scrape_interval:15s# Set the scrape interval to every 15 seconds. Default is every 1 minute.evaluation_interval:15s# Evaluate rules every 15 seconds. The default is every 1 minute.# scrape_timeout is set to the global default (10s).# Attach these labels to any time series or alerts when communicating with# external systems (federation, remote storage, Alertmanager).external_labels:monitor:'example'# Alertmanager configurationalerting:alertmanagers:- static_configs:- targets:['localhost:9093']# Load rules once and periodically evaluate them according to the global 'evaluation_interval'.rule_files:# - "first_rules.yml"# - "second_rules.yml"# A scrape configuration containing exactly one endpoint to scrape:# Here it's Prometheus itself.scrape_configs:# The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.- job_name:'prometheus'# Override the global default and scrape targets from this job every 5 seconds.scrape_interval:5sscrape_timeout:5s# metrics_path defaults to '/metrics'# scheme defaults to 'http'.static_configs:- targets:['localhost:9090']- job_name:node# If prometheus-node-exporter is installed, grab stats about the local# machine by default.static_configs:- targets:['remote_host_ip:9100']- job_name:process# Prometheus process exporterstatic_configs:- targets:['remote_host_ip:9256']
В разделе scrape_configs, для заданий job_name: node и job_name: process необходимо будет прописать вместо remote_host_ip правильный адрес хоста, который мы будем мониторить. Установка самих exporter-ов (агентов для сбора метрик) будет описана ниже.
Файл web-config.yml:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# TLS and basic authentication configuration example.## Additionally, a certificate and a key file are needed.# tls_server_config:# cert_file: server.crt# key_file: server.keyhttp_server_config:# Enable HTTP/2 support. Note that HTTP/2 is only supported with TLS.# This can not be changed on the fly.# http2: false# Usernames and passwords required to connect to Prometheus.# Passwords are hashed with bcrypt: https://github.com/prometheus/exporter-toolkit/blob/master/docs/web-configuration.md#about-bcryptbasic_auth_users:# password 'web'web:$2y$10$bIprcxc.jAZYHkGlVujX6OR891UNNyQ7/PZDGSTU9eyQcN5j3sw.y# password 'grafana'grafana:$2y$10$RpURPsp/cG2.gd4j2PPj/uxo.sm/D18.Dsi92Y8Lh3iwE4IebAfuG
Инфо
Если вы захотите изменить пароли для пользователей (а точнее служб), которые будут брать данные из prometheus, то вам понадобится установить пакет apache2-utils, а затем сгенерировать свои хеши паролей выполнив:
Далее выполняем docker-compose up -d, проверяем что все запустилось с помощью docker-compose ps. В теории у обоих сервисов должно быть состояние “Up”. Так же мы можем понаблюдать за логами каждого из сервисов docker-compose logs -f prometheus и docker-compose logs -f grafana. Если там все выглядит нормально и логи не колбасит из-за постоянных рестартов, то значит все идет по плану. В противном случае выполняем docker-compose down, думаем что мы могли упустить, исправляем, запускаем. И так по кругу пока все не заработает.
2 Настройка exporter-ов (агентов сборам метрик)
Следующим шагом будет настройка exporter’ов. Exporter - это по сути приложение-агент, которое собирает и передает некоторый набор метрик когда к нему обращается сервер Prometheus.
В решении моей задачи я использовал node-exporter - штатный инструмент для сбора общей статистики хоста, а также process-exporter - для сбора статистики по каждому процессу в системе.
Для удобства их установки был создан bash-скрипт, который распоковывает бинарники в нужное место, создает конфигурацию для process-exporter’a, добавляет конфигурации для запуска процессов по средствам systemctl и запускает сервисы.
Рядом с представленым выше скриптом должны находмться два архива, например node_exporter-1.2.2.linux-amd64.tar.gz и process-exporter-0.7.9.linux-amd64.tar.gz. После чего можно запускать скрипт и в теории все должно получиться. Я проверял его работаспособность на Ubuntu 18.04 и Ubuntu 20.04.
3 Настройка datasource-ов и dashboard-ов в Grafana
Теперь нам необходимо указать в Grafana источник данных для отображения данных в doashboard-ах. Для этого переходим Configuration -> Data sources и нажимаем кнопку Add datasource. В появившейся форме необходимо заполнить поля:
Name - имя самого источника.
URL - адрес Prometheus-сервера. В нашем случае это будет http://prometheus:9090
Basic auth - включить, после чего появятся поля User и Password
User - имя пользователя из файла web-config.yml. В данном примере это будет пользователь: grafana
Password - пароль пользователя. В нашем случае он тоже будет grafana
Всё остальное оставляем как есть и нажимаем кнопку Save & test. Мы должны увидеть сообщение Datasource is working. Если мы видим что-то другое, то думаем что пошло не так, где была допущена ошибка до тех пор пока на этом шаге всё не получится.
Теперь остаётся добавить дашборды и мы уже сможем видеть данные метрик собираемы с хоста который мы хотим мониторить. Сначала будем импортировать дашборд для Node Exporter’a. Для этого переходим раздел Dashboards -> Manage, нажимаем кнопку Import и в поле Import via panel json вставляем содержимого json-файла, нажимаем кнопку Load. В появившейся форме ничего менять не нужно, только проверить что в поле источника данных Prometheus выбран источник который мы создавали ранее.
По аналогии с предыдущим импортируются json’ы дашбордов для Process Exporter’a. Их у нас будет два, один отображает топ процессов, а второй позволяет отображат на графиках все или только те которые нужны по средствам фильтра.
Предупреждение
Я потерял оригинальные файлы дашбордов графаны, т.ч. приведенные выше могут быть не совсем тем что нужно, т.ч. возможно Вам придется подразобраться как сделать так чтобы было как надо, либо поискать нужный шаблон тут
Далее мы переходим в раздел Dashboards -> General, заходим в нужный дашборд и если всё удалось, то наблюдаем за статистикой в красивой форме. У меня это выглядит так: