---
title: Настройка Prometheus + Grafana в Dockerauthor: Кирьянов Артем
date: 2021-28-06 11:00:00 +0300
categories: [It, DevOps]
tags: [devops]
---
## Grafana и Prometheus в Docker.
![graphana](https://devopsme.ru/assets/img/sample/pg.png)
В этой статье я бы хотел рассказать о том, как установить эти инструменты. Я буду писать про установку на сервер. Требования: установленный Docker ну и настроенное окружение, как доступ по ssh и другое по вашему "вкусу".
**Что такое Grafana и Prometheus?**
Prometheus - сердце мониторинга. Это экосистема, позволяющая собирать метрики с физических серверов, VPS, отдельных приложений, различных баз данных, контейнеров и устройств IoT. Prometheus включает в себя сотни готовых решений для сбора информации и позволяет одновременно мониторить тысячи служб. При необходимости, по мере изучения, опытный администратор может для него написать свои сценарии.
Node exporter - это сервер, который показывает метрики хост-машины, на которой он работает (включая метрики файловой системы, сетевых устройств, использование процессора, памяти и многое другое). В нашем случае, мы запускаем node-exporter в docker на порта 9323.
Grafana - среда визуализации. Использует метрики, которые собрал Prometheus, и отображает их в виде информативных графиков и диаграмм, организованных в настраиваемые панели.
### Установка Prometheus
Заходим на сервер по ssh и создаем дирректорию, с любым названием. У меня это папочка devops, а в ней уже конфиги для нужных мне программ. Необходимо создать конфиг, создав файл в нашей папке - prometheus.yml. Для чего вообще этот файл нужен? В этом файлике описываются сервера для сбора метрик и отправки алертов.
Теперь Prometheus будет собирать метрики с сервера, на котором он установлен, а также с сервера Node Exporter, который будет настроен **позже**. Система Prometheus может подключаться внутри своего контейнера при помощи имени localhost, однако ей нужно также собирать метрики с Node Exporter, а для этого необходим внешний IP-адрес (поскольку Node Exporter запускается в отдельном контейнере с отдельным сетевым пространством имён). Но есть нюансы, о которых я напишу ниже.
#### prometheus.yml
```sh
global:
scrape_interval: 15s
evaluation_interval: 15s
scrape_configs:
- job_name: 'prometheus'
static_configs:
- targets: ['localhost:9090']
- job_name: 'docker'
static_configs:
- targets: ['localhost:9323']
```
> Примечание: Замените your_server_ip IP-адресом сервера, где job_name: 'docker'.
> Если вы хотите использовать только метрики node_exporter, достаточно указать один узел: ['localhost:9100']
Сохраняем файлик. Теперь о нюансах. Чтобы настроить демона Docker в качестве целевого объекта Prometheus, нам необходимо указать адрес метрики. Лучший способ сделать это-через файл daemon.json, который по умолчанию находится в одном из следующих местоположений. Если файл не существует, создайте его.. Для этого нам необходимо создать в /etc/docker файлик daemon.json.
```sh
{
"metrics-addr" : "0.0.0.0:9323",
"experimental" : true
}
```
Останавливаем docker как службу
```sh
sudo systemctl stop docker
```
Теперь нам необходимо добавить порт 9323 в зону public для firewall
```sh
sudo firewall-cmd --permanent --zone=public --add-port=9323/tcp
```
Перезапускаем сервис
```sh
sudo firewall-cmd --reload
```
> В Ubuntu firewall-cmd не установлен
> Устанавливаем через apt-get install
После этого запускам docker
```sh
sudo docker start docker
```
Теперь можно запустить Prometheus, указав ему наш файлик.
Запускаем такую команду:
```sh
docker run -d -p 9090:9090 -v /home/devops/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml prom/prometheus
```
Переходим на сайт http://localhost:9090/targets
docker и prometheus должны находится в состоянии UP.
### Установка Grafana
Пишем такую команду:
```sh
docker run -d --name grafana -p 3000:3000 -v grafana_config:/etc/grafana -v grafana_data:/var/lib/grafana -v grafana_logs:/var/log/grafana grafana/grafana
```
Добавляем порт в firewall
```sh
sudo firewall-cmd --permanent --zone=public --add-port=3000/tcp
```
Перезапускаем сервис
```sh
sudo firewall-cmd --reload
```
После этого можно перейти по адресу http://ВАШ_IP:3000 и сменить пароль для Grafana
### Устанавливаем node-exporter
В прошлых шагах мы установили метрики для docker. А как же собирать тогда метрики с самой хост машины на Linux?
А это можно решить таким лайфхаком. Node_exporter предназначен для мониторинга хост-системы. Не рекомендуется развертывать его в качестве контейнера Docker, поскольку для этого требуется доступ к хост-системе.
В ситуациях, когда требуется развертывание Docker, необходимо использовать некоторые дополнительные флаги, чтобы разрешить node_exporter доступ к пространствам имен хоста.
Имейте в виду, что любые некорневые точки монтирования, которые вы хотите отслеживать, необходимо будет смонтировать в контейнере.
Если вы запускаете контейнер для мониторинга хоста, укажите аргумент path.rootfs. Этот аргумент должен соответствовать пути в привязке-монтировании корневого узла. node_exporter будет использовать path.rootfs в качестве префикса для доступа к файловой системе хоста.
```sh
docker run -d \
--net="host" \
--pid="host" \
-v "/:/host:ro,rslave" \
quay.io/prometheus/node-exporter:latest \
--path.rootfs=/host
```
Затем необходимо добавить правило для фаервола:
```sh
sudo firewall-cmd --add-port=9100/tcp --permanent
sudo systemctl restart firewalld
```
Затем добавим в наш prometheus.yml нашу хост-машину, итоговый файлик:
```sh
# my global config
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.
alerting:
alertmanagers:
- static_configs:
- targets:
# - alertmanager:9093
rule_files:
# - "first.rules"
# - "second.rules"
scrape_configs:
- job_name: 'prometheus'
static_configs:
- targets: ['localhost:9090']
- job_name: 'docker'
static_configs:
- targets: ['БЕЛЫЙ_IP:9323'] #Добавляем ваш белый IP или localhost
- job_name: 'node'
static_configs:
- targets: ['БЕЛЫЙ_IP:9100'] #Добавляем ваш белый IP или localhost
```
Заходим на сайт и проверяем все ли таргеты у нас поднялись.
Ура! Мы установили Prometheus и Grafana в Docker. В следующих статьях, мы прикрутим оповещение в телеграм, выведем метрики для нашего aspnet приложения.