В 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]
Проверяем:
Готово.