From b232b894c3cbe087c8d504e91637dcf62199eed1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Romain=20Gon=C3=A7alves?= Date: Thu, 29 Jul 2021 17:00:20 +0200 Subject: Bump to third revision of homelab --- roles/grafana/defaults/main.yml | 8 + roles/grafana/tasks/main.yml | 47 +- roles/grafana/templates/datasources-default.yml.j2 | 16 + roles/grafana/templates/etc-grafana.ini.j2 | 246 ++++++ roles/grafana/templates/grafana.conf.nginx.j2 | 9 - roles/grafana/templates/grafana.ini.j2 | 852 --------------------- roles/grafana/vars/main.yml | 14 - 7 files changed, 295 insertions(+), 897 deletions(-) create mode 100644 roles/grafana/defaults/main.yml create mode 100644 roles/grafana/templates/datasources-default.yml.j2 create mode 100644 roles/grafana/templates/etc-grafana.ini.j2 delete mode 100644 roles/grafana/templates/grafana.conf.nginx.j2 delete mode 100644 roles/grafana/templates/grafana.ini.j2 delete mode 100644 roles/grafana/vars/main.yml (limited to 'roles/grafana') diff --git a/roles/grafana/defaults/main.yml b/roles/grafana/defaults/main.yml new file mode 100644 index 0000000..f415110 --- /dev/null +++ b/roles/grafana/defaults/main.yml @@ -0,0 +1,8 @@ +grafana_dir: /data/grafana +grafana_port: 3001 +grafana_port_out: 3000 +grafana_user: _grafana +grafana_group: _grafana + +grafana_db: sqlite +grafana_instance_name: "rgoncalves.se monitoring" diff --git a/roles/grafana/tasks/main.yml b/roles/grafana/tasks/main.yml index 919f15e..d002b51 100644 --- a/roles/grafana/tasks/main.yml +++ b/roles/grafana/tasks/main.yml @@ -1,36 +1,39 @@ - -# grafana ~~ roles/grafana/tasks/main.yml -# grafana setup - ---- - - name: install grafana - package: name=grafana state=present + package: + name: grafana + state: present -- name: ensure grafana dir exists +- name: ensure grafana directories exists file: - path: "{{ grafana_dir }}" + path: "{{ grafana_dir }}/{{ item }}" owner: "{{ grafana_user }}" group: "{{ grafana_group }}" - mode: 0640 + mode: "0640" state: directory + loop: + - "" + - "data" + - "logs" + - "plugins" - name: generate grafana configuration template: - src: grafana.ini.j2 + src: etc-grafana.ini.j2 dest: /etc/grafana.ini - owner: "{{ user_root }}" - group: "{{ group_root }}" - mode: 0644 + owner: "0" + group: "0" + mode: "0644" -- name: generate reverse proxy configuration for nginx +- name: generate grafana data sources template: - src: grafana.conf.nginx.j2 - dest: /etc/nginx/conf.d/grafana.conf - owner: "{{ user_root }}" - group: "{{ group_root }}" - mode: 0644 - when: ansible_distribution != "OpenBSD" + src: datasources-default.yml.j2 + dest: /etc/grafana/provisioning/datasources/default.yml + owner: "{{ grafana_user }}" + group: "{{ grafana_group }}" + mode: "0640" - name: start and enable grafana service - service: name=grafana state=restarted enabled=true + service: + name: grafana + state: restarted + enabled: true diff --git a/roles/grafana/templates/datasources-default.yml.j2 b/roles/grafana/templates/datasources-default.yml.j2 new file mode 100644 index 0000000..690487f --- /dev/null +++ b/roles/grafana/templates/datasources-default.yml.j2 @@ -0,0 +1,16 @@ +{% import 'macros.j2' as macros with context %} + +# datasources for grafana +# managed by Ansible + +apiVersion: 1 + +datasources: +{% call(h) macros.loop_valid_hosts("servers") %} + - name: {{ h.ansible_host }}-prometheus + type: prometheus + url: http://{{ h.ip.in }}:9090 + - name: {{ h.ansible_host }}-loki + type: prometheus + +{% endcall %} diff --git a/roles/grafana/templates/etc-grafana.ini.j2 b/roles/grafana/templates/etc-grafana.ini.j2 new file mode 100644 index 0000000..8bcad25 --- /dev/null +++ b/roles/grafana/templates/etc-grafana.ini.j2 @@ -0,0 +1,246 @@ + +# grafana configuration +# managed by Ansible + +app_mode = production +instance_name = + +[paths] +data = {{ grafana_dir }}/data +logs = {{ grafana_dir }}/logs +plugins = {{ grafana_dir }}/plugins +provisioning = provisioning +temp_data_lifetime = 24h + +[server] +protocol = http +http_addr = +http_port = {{ grafana_port }} +;domain = 0.0.0.0 + +# The full public facing url you use in browser, used for redirects and emails +# If you use reverse proxy and sub path specify full url (with sub path) +;root_url = %(protocol)s://%(domain)s:%(http_port)s/ + +# Log web requests +router_logging = true +enable_gzip = true + +[database] + +;type = sqlite3 +;host = 127.0.0.1:3306 +;name = grafana +;user = root +# If the password contains # or ; you have to wrap it with triple quotes. Ex """#password;""" +;password = + +path = grafana.db +max_idle_conn = 2 +log_queries = true +cache_mode = shared + +[remote_cache] +type = database + +[dataproxy] + +[analytics] + +[security] +disable_initial_admin_creation = true +disable_gravatar = true +allow_embedding = true + +strict_transport_security = false + +[snapshots] +# snapshot sharing options +external_enabled = true +;external_snapshot_url = https://snapshots-origin.raintank.io +;external_snapshot_name = Publish to snapshot.raintank.io + +public_mode = false + +[dashboards] +versions_to_keep = 20 +min_refresh_interval = 5s +default_home_dashboard_path = + +[users] +allow_sign_up = false +allow_org_create = false +auto_assign_org = false +auto_assign_org_role = Viewer +verify_email_enabled = false +login_hint = email or username +password_hint = password +viewers_can_edit = true +editors_can_admin = false +user_invite_max_lifetime_duration = 24h + +default_theme = dark + +[auth] +login_cookie_name = grafana_session + +[auth.anonymous] +enabled = false + +[auth.github] +enabled = false + +[auth.gitlab] +enabled = false + +[auth.google] +enabled = false + +[auth.grafana_com] +enabled = false + +[auth.azuread] +enabled = false + +[auth.okta] +enabled = false + +[auth.generic_oauth] +enabled = false + +[auth.basic] +enabled = true + +[auth.proxy] +enabled = false + +[auth.ldap] +enabled = false +config_file = /etc/grafana/ldap.toml +allow_sign_up = true + +[smtp] +enabled = false + +[emails] +welcome_email_on_sign_up = false +templates_pattern = emails/*.html + +[log] +mode = console file +level = info +filters = + +[log.console] +level = +format = console + +[log.file] +level = +format = text + +log_rotate = true +max_lines = 1000000 +max_size_shift = 28 + +daily_rotate = true +max_days = 7 + +[log.syslog] +level = +format = text +network = +address = + +facility = +tag = + +[quota] +enabled = false + +[alerting] +enabled = true +execute_alerts = true +error_or_timeout = alerting +nodata_or_nullvalues = no_data + +concurrent_render_limit = 5 + +;evaluation_timeout_seconds = 30 +;notification_timeout_seconds = 30 +;max_attempts = 3 +;min_interval_seconds = 1 + +[annotations.dashboard] + +[explore] +enabled = true + +# Metrics available at HTTP API Url /metrics +[metrics] +enabled = true +interval_seconds = 10 +disable_total_stats = false + +; basic_auth_username = +; basic_auth_password = + +[metrics.environment_info] + +[metrics.graphite] +;address = +;prefix = prod.grafana.%(instance_name)s. + +[grafana_com] +;url = https://grafana.com + +[tracing.jaeger] + +[external_image_storage] +;provider = + +[external_image_storage.s3] +;endpoint = +;path_style_access = +;bucket = +;region = +;path = +;access_key = +;secret_key = + +[external_image_storage.webdav] +;url = +;public_url = +;username = +;password = + +[external_image_storage.gcs] +;key_file = +;bucket = +;path = + +[external_image_storage.azure_blob] +;account_name = +;account_key = +;container_name = + +[external_image_storage.local] + +[rendering] + +[panels] +disable_sanitize_html = false + +[plugins] +enable_alpha = true + +[plugin.grafana-image-renderer] + +[enterprise] +;license_path = + +[feature_toggles] +;enable = + +[date_formats] +default_timezone = browser diff --git a/roles/grafana/templates/grafana.conf.nginx.j2 b/roles/grafana/templates/grafana.conf.nginx.j2 deleted file mode 100644 index c0f926c..0000000 --- a/roles/grafana/templates/grafana.conf.nginx.j2 +++ /dev/null @@ -1,9 +0,0 @@ -server { - listen {{ grafana_port_out }}; - root /usr/share/nginx/html; - index index.html index.htm; - - location / { - proxy_pass http://127.0.0.1:{{ grafana_port }}/; - } -} diff --git a/roles/grafana/templates/grafana.ini.j2 b/roles/grafana/templates/grafana.ini.j2 deleted file mode 100644 index 75de264..0000000 --- a/roles/grafana/templates/grafana.ini.j2 +++ /dev/null @@ -1,852 +0,0 @@ - -# grafana configuration ~~ /etc/grafana.ini - -##################### Grafana Configuration Example ##################### -# -# Everything has defaults so you only need to uncomment things you want to -# change - -# possible values : production, development -;app_mode = production - -# instance name, defaults to HOSTNAME environment variable value or hostname if HOSTNAME var is empty -instance_name = - -#################################### Paths #################################### -[paths] -# Path to where grafana can store temp files, sessions, and the sqlite3 db (if that is used) -data = {{ grafana_dir }} - -# Temporary files in `data` directory older than given duration will be removed -;temp_data_lifetime = 24h - -# Directory where grafana can store logs -;logs = /var/log/grafana - -# Directory where grafana will automatically scan and look for plugins -;plugins = {{ grafana_dir }}/plugins - -# folder that contains provisioning config files that grafana will apply on startup and while running. -;provisioning = conf/provisioning - -#################################### Server #################################### -[server] -# Protocol (http, https, h2, socket) -;protocol = http - -# The ip address to bind to, empty will bind to all interfaces -http_addr = - -# The http port to use -http_port = {{ grafana_port }} - -# The public facing domain name used to access grafana from a browser -;domain = 0.0.0.0 - -# Redirect to correct domain if host header does not match domain -# Prevents DNS rebinding attacks -;enforce_domain = false - -# The full public facing url you use in browser, used for redirects and emails -# If you use reverse proxy and sub path specify full url (with sub path) -;root_url = %(protocol)s://%(domain)s:%(http_port)s/ - -# Serve Grafana from subpath specified in `root_url` setting. By default it is set to `false` for compatibility reasons. -;serve_from_sub_path = false - -# Log web requests -;router_logging = false - -# the path relative working path -;static_root_path = public - -# enable gzip -;enable_gzip = false - -# https certs & key file -;cert_file = -;cert_key = - -# Unix socket path -;socket = - -#################################### Database #################################### -[database] -# You can configure the database connection by specifying type, host, name, user and password -# as separate properties or as on string using the url properties. - -# Either "mysql", "postgres" or "sqlite3", it's your choice -;type = sqlite3 -;host = 127.0.0.1:3306 -;name = grafana -;user = root -# If the password contains # or ; you have to wrap it with triple quotes. Ex """#password;""" -;password = - -# Use either URL or the previous fields to configure the database -# Example: mysql://user:secret@host:port/database -;url = - -# For "postgres" only, either "disable", "require" or "verify-full" -;ssl_mode = disable - -;ca_cert_path = -;client_key_path = -;client_cert_path = -;server_cert_name = - -# For "sqlite3" only, path relative to data_path setting -;path = grafana.db - -# Max idle conn setting default is 2 -;max_idle_conn = 2 - -# Max conn setting default is 0 (mean not set) -;max_open_conn = - -# Connection Max Lifetime default is 14400 (means 14400 seconds or 4 hours) -;conn_max_lifetime = 14400 - -# Set to true to log the sql calls and execution times. -;log_queries = - -# For "sqlite3" only. cache mode setting used for connecting to the database. (private, shared) -;cache_mode = private - -#################################### Cache server ############################# -[remote_cache] -# Either "redis", "memcached" or "database" default is "database" -;type = database - -# cache connectionstring options -# database: will use Grafana primary database. -# redis: config like redis server e.g. `addr=127.0.0.1:6379,pool_size=100,db=0,ssl=false`. Only addr is required. ssl may be 'true', 'false', or 'insecure'. -# memcache: 127.0.0.1:11211 -;connstr = - -#################################### Data proxy ########################### -[dataproxy] - -# This enables data proxy logging, default is false -;logging = false - -# How long the data proxy waits before timing out, default is 30 seconds. -# This setting also applies to core backend HTTP data sources where query requests use an HTTP client with timeout set. -;timeout = 30 - -# How many seconds the data proxy waits before sending a keepalive probe request. -;keep_alive_seconds = 30 - -# How many seconds the data proxy waits for a successful TLS Handshake before timing out. -;tls_handshake_timeout_seconds = 10 - -# How many seconds the data proxy will wait for a server's first response headers after -# fully writing the request headers if the request has an "Expect: 100-continue" -# header. A value of 0 will result in the body being sent immediately, without -# waiting for the server to approve. -;expect_continue_timeout_seconds = 1 - -# The maximum number of idle connections that Grafana will keep alive. -;max_idle_connections = 100 - -# How many seconds the data proxy keeps an idle connection open before timing out. -;idle_conn_timeout_seconds = 90 - -# If enabled and user is not anonymous, data proxy will add X-Grafana-User header with username into the request, default is false. -;send_user_header = false - -#################################### Analytics #################################### -[analytics] -# Server reporting, sends usage counters to stats.grafana.org every 24 hours. -# No ip addresses are being tracked, only simple counters to track -# running instances, dashboard and error counts. It is very helpful to us. -# Change this option to false to disable reporting. -;reporting_enabled = true - -# Set to false to disable all checks to https://grafana.net -# for new versions (grafana itself and plugins), check is used -# in some UI views to notify that grafana or plugin update exists -# This option does not cause any auto updates, nor send any information -# only a GET request to http://grafana.com to get latest versions -;check_for_updates = true - -# Google Analytics universal tracking code, only enabled if you specify an id here -;google_analytics_ua_id = - -# Google Tag Manager ID, only enabled if you specify an id here -;google_tag_manager_id = - -#################################### Security #################################### -[security] -# disable creation of admin user on first start of grafana -;disable_initial_admin_creation = false - -# default admin user, created on startup -;admin_user = admin - -# default admin password, can be changed before first start of grafana, or in profile settings -;admin_password = admin - -# used for signing -;secret_key = SW2YcwTIb9zpOOhoPsMm - -# disable gravatar profile images -;disable_gravatar = false - -# data source proxy whitelist (ip_or_domain:port separated by spaces) -;data_source_proxy_whitelist = - -# disable protection against brute force login attempts -;disable_brute_force_login_protection = false - -# set to true if you host Grafana behind HTTPS. default is false. -;cookie_secure = false - -# set cookie SameSite attribute. defaults to `lax`. can be set to "lax", "strict", "none" and "disabled" -;cookie_samesite = lax - -# set to true if you want to allow browsers to render Grafana in a ,