В Grafana 5.0 появилась возможность настраивать её без API, а просто добавляя файлы настроек.
Документация тут>>>.
Удобно для использования с Ansible etc.
Ниже быстрый пример применения.
Путь к каталогу задаётся через переменную GF_PATHS_PROVISIONING:
t=2018-06-18T13:11:26+0000 lvl=info msg=»Config overridden from Environment variable» logger=settings var=»GF_PATHS_PROVISIONING=/etc/grafana/provisioning»
Содержание
Ручное добавление
Протестируем — попробуем добавить datasource вручную.
Grafana запущена в контейнере, данные монтируются через volumes.
Создаём каталог provisioning/datasources:
[simterm]
[root@monitonrig-dev /opt/prometheus] # mkdir /etc/grafana/provisioning/datasources
[/simterm]
Создаём в нём файл настроек datasource — копипастим из документации>>>.
Обновляем Compose, сейчас выглядит так:
version: '3.3'
networks:
prometheus:
services:
prometheus-server:
image: prom/prometheus:v1.8.2
networks:
- prometheus
ports:
- 9090:9090
volumes:
- /etc/prometheus/prometheus-server-conf.yml:/etc/prometheus.yml
- /data/prometheus/prometheus:/prometheus
command:
- '-config.file=/etc/prometheus.yml'
- '-storage.local.path=/prometheus'
- '-web.external-url=http://dev.monitor.domain.world/prometheus'
restart: always
grafana-ui:
image: grafana/grafana
networks:
- prometheus
ports:
- 3000:3000
volumes:
- /etc/grafana/:/etc/grafana/
- /data/grafana:/var/lib/grafana
depends_on:
- prometheus-server
Перезапускаем сервис, у меня есть отдельный systemd сервис для этого:
[simterm]
[root@monitonrig-dev /opt/prometheus] # systemctl restart prometheus.service
[/simterm]
Проверяем:
Ухтышка — работает…
Ansible
Теперь обновим роль Ansible — добавим подключение datasource при развёртывании окружения.
В шаблонах роли — добавляем roles/monitoring/templates/grafana-prometehus-datasource.yml.j2:
# config file version apiVersion: 1 # list of datasources to insert/update depending # what's available in the database datasources: # <string, required> name of the datasource. Required - name: Prometheus # <string, required> datasource type. Required type: prometheus # <string, required> access mode. proxy or direct (Server or Browser in the UI). Required access: proxy # <int> org id. will default to orgId 1 if not specified orgId: 1 # <string> url url: http://prometheus-server:9090/prometheus # <bool> mark as default datasource. Max one per org isDefault: true # <map> fields that will be converted to json and stored in json_data version: 1 # <bool> allow users to edit datasources from the UI. editable: true
В URL тут указываем имя контейнера, как он указано в Compose файле.
В roles/monitoring/templates/prometheus-compose.yml.j2 обновляем монтирование разделов, сейчас они выглядят так:
...
volumes:
- {{ grafana_configs_path }}/grafana.ini:/etc/grafana/grafana.ini
- {{ grafana_data_path }}:/var/lib/grafana
...
Теперь вместо одного файла монтируем весь каталог:
...
volumes:
- {{ grafana_configs_path }}:/etc/grafana/
- {{ grafana_data_path }}:/var/lib/grafana
...
grafana_configs_path задаётся в переменных:
[simterm]
$ cat roles/monitoring/vars/main.yml | grep grafana_configs_path grafana_configs_path: "/etc/grafana"
[/simterm]
Обновляем roles/monitoring/tasks/main.yml, добавляем создание каталога provisioning/datasources:
...
- name: Create {{ grafana_configs_path }}/provisioning directory
file:
path: "{{ grafana_configs_path }}/provisioning/datasources"
owner: "{{ grafana_user }}"
group: "{{ grafana_user }}"
mode: 0755
state: directory
...
И копирование файла настроек datasource:
...
- name: Copy Grafana datasource config
template:
src: templates/grafana-prometehus-datasource.yml.j2
dest: "{{ grafana_configs_path }}/provisioning/datasources/prometheus.yml"
owner: "{{ grafana_user }}"
group: "{{ grafana_user }}"
...
Запускаем ansible-playbook:
[simterm]
... TASK [monitoring : Create Grafana group] **** ok: [dev.monitor.domain.world] TASK [monitoring : Create Grafana user grafana with UID 472] **** ok: [dev.monitor.domain.world] TASK [monitoring : Create Grafana configs directory] **** changed: [dev.monitor.domain.world] TASK [monitoring : Create /data/grafana directory] **** ok: [dev.monitor.domain.world] TASK [monitoring : Create /etc/grafana/provisioning directory] **** changed: [dev.monitor.domain.world] TASK [monitoring : Copy Grafana config] **** ok: [dev.monitor.domain.world] TASK [monitoring : Copy Grafana datasource config] **** changed: [dev.monitor.domain.world] TASK [monitoring : Copy systemd unit file] **** ok: [dev.monitor.domain.world] TASK [monitoring : Start monitoring service] **** changed: [dev.monitor.domain.world] PLAY RECAP **** dev.monitor.domain.world : ok=18 changed=6 unreachable=0 failed=0 Provisioning done.
[/simterm]
Проверяем:
Готово.

