Продолжаем с Prometheus…
Последней задачей было Azure: подключение volume – ARM, Ansible и данные Prometheus.
Теперь – добавим Grafana для визуализации данных.
Надо – обновить docker-compose файл, добавить запуск контейнера с Grafana, и в самой Grafana – настроить backend, что бы она получала данные с Prometheus сервера.
Кроме того – надо обновить NGINX (в нём в блоге не писал), что бы он в качестве бекенда использовал не Prometheus, а Grafana.
В целом сетап сейчас выглядит так, как описано в посте Ansible: роли для Docker Compose, Prometheus и node_exporter: есть запуск Prometheus из Docker Compose, есть установка и запуск node_exporter
из Ansible. Docker и всё прочее тоже управляется через Ansible роли.
Содержание
Grafana
Grafana и HTTP Auth
Grafana использует файл настроек /etc/grafana/grafana.ini
.
Т.к. у нас она будет работать за NGINX revers-proxy, на котором включена http-авторизация – надо выключить авторизацию в самой Grafana.
В каталоге ansible/jm-monitoring/roles/prometheus/files/
добавляем файл настроек для Grafana – ansible/jm-monitoring/roles/prometheus/files/grafana.ini
, в котором отключаем авторизацию:
... #################################### Basic Auth ########################## [auth.basic] enabled = false ...
Без этого – будет возникать ошибка:
{‘message” : “Basic auth failed”}
Другой вариант – передать параметр через переменные окружения Grafana.
Обновляем роль prometheus
, в tasks
которой выполняется копирование файлов – добавляем создание каталога для конфига:
... - name: Create Grafana config directory file: path: "/etc/grafana" state: directory owner: "{{ prometheus_user }}" group: "{{ prometheus_group }}" mode: 0775 recurse: yes ...
И копирование конфига для Grafana:
... - name: Create Grafana config directory file: path: "/etc/grafana" state: directory owner: "{{ prometheus_user }}" group: "{{ prometheus_group }}" mode: 0775 recurse: yes ...
Позже, наверно – Grafana надо будет вынести в отдельную роль.
Docker Compose
Docker Compose запускается из шаблона, который лежит в Ansible роли prometehus
:
[simterm]
$ ls -l ansible/jm-monitoring/roles/prometheus/templates/ total 4 -rw-r--r-- 1 setevoy setevoy 256 Oct 12 13:35 docker-compose.yml.j2
[/simterm]
Во время провижена из Jenkins – файл обновляется с данными из переменных, копируется на хост, и там запускаются docker-контейнеры.
Обновляем его, добавляем запуск Grafana:
version: '2' services: prometheus: network_mode: "host" image: prom/prometheus expose: - 9090 ports: - 9090:9090 volumes: - /etc/prometheus/:/etc/prometheus/ - {{ prometheus_data_mount_path }}:/prometheus grafana-ui: network_mode: "host" image: grafana/grafana ports: - 3000:3000 volumes: - /etc/grafana/grafana.ini:/etc/grafana/grafana.ini
NGINX
NGINX устанавливается из роли nginx
:
[simterm]
$ ls -l ansible/jm-monitoring/roles/nginx/ total 20 drwxr-xr-x 2 setevoy setevoy 4096 Sep 26 14:26 files drwxr-xr-x 2 setevoy setevoy 4096 Sep 25 17:04 handlers drwxr-xr-x 2 setevoy setevoy 4096 Sep 27 11:39 tasks drwxr-xr-x 2 setevoy setevoy 4096 Sep 27 11:39 templates drwxr-xr-x 2 setevoy setevoy 4096 Sep 26 16:10 vars
[/simterm]
Файл настроек создаётся из шаблона:
[simterm]
$ ls -l ansible/jm-monitoring/roles/nginx/templates/ total 8 -rw-r--r-- 1 setevoy setevoy 875 Sep 20 17:31 nginx.conf -rw-r--r-- 1 setevoy setevoy 1477 Sep 27 11:18 nginx_vhost.conf
[/simterm]
Обновляем nginx_vhost.conf
, добавляем upstream для Grafana:
... upstream grafana_ui { server 127.0.0.1:3000; } ...
И обновляем location /
:
... location / { auth_basic_user_file /var/www/{{ inventory_hostname }}/.htaccess; auth_basic "Password-protected Area"; allow {{ nginx_allow_kiev_ip }}; allow {{ nginx_allow_berlin_ip }}; deny all; proxy_redirect off; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_pass http://{{ upstream_name }}$request_uri; } ...
Добавляем переменную upstream_name
в переменные – файл provision.yml
:
- hosts: all become: true roles: ... - role: nginx nginx_allow_kiev_ip: 194.***.***.45 nginx_allow_berlin_ip: 37.***.***.130 upstream_name: grafana_ui - role: mongrelion.docker - role: docker-compose - role: prometheus - role: UnderGreen.prometheus-node-exporter prometheus_node_exporter_config_flags: 'web.listen-address': '127.0.0.1:9100' 'log.level': 'info'
Вроде всё.
Пушим изменения в репозиторий, запускам билд Jenkins – готово:
Логин-пароль по умолчанию – admin:admin, логинимся – красота:
Настройка Grafana
Grafana хранит все свои данные в каталоге /var/lib/grafana
:
[simterm]
root@63315edb890f:/# ls -l /var/lib/grafana total 120 -rw-r--r-- 1 grafana grafana 109568 Oct 23 11:47 grafana.db drwxr-xr-x 2 grafana grafana 4096 Oct 23 11:06 plugins drwx------ 5 grafana grafana 4096 Oct 23 11:47 sessions
[/simterm]
Наверно надо будет монтировать его тоже отдельным разделом из Azure Storage.
Другой вариант – использовать внешнюю базу, MySQL или Postgres. Документация – тут>>>.
Добавление Data Source Prometehus
Добавляем Prometehus. Документация – тут>>>.
Кликаем на Add Data Source, указываем параметры Prometheus сервера:
Добавление Dashboard
Самый простой способ – импортировать готовую с Grafana Labs.
Позже – напишем свой велосипед.
У нас есть node_exporter
, добавим для него графики.
Слева кликаем Dashboards > Import, указываем ID.
Например – Node Exporter Server Metrics, ID 405:
Жмём Import – и получаем графики из метрик, полученных от node_exporter
через Prometheus:
Настройка графиков – в следующий раз.
Ссылки по теме
Документация – шикарна:
Running Grafana behind a reverse proxy
Adding & Editing Graphs and Panels