From feabcbf064bd99582fd4ba417ae5ff58b538d4f8 Mon Sep 17 00:00:00 2001 From: "tom.chivert" Date: Wed, 13 Sep 2023 16:24:11 +0200 Subject: [PATCH 1/3] starting to implement victoriametrics --- defaults/main.yml | 2 + tasks/server/grafana-prometheus.yml | 12 + tasks/server/grafana-provisioning.yml | 6 +- templates/compose/grafana-prometheus.yml.j2 | 51 ++ .../conf/datasources.yaml.j2 | 4 + templates/conf/vmagent.yml.j2 | 517 ++++++++++++++++++ 6 files changed, 589 insertions(+), 3 deletions(-) rename files/dashboards/datasources.yaml => templates/conf/datasources.yaml.j2 (59%) create mode 100644 templates/conf/vmagent.yml.j2 diff --git a/defaults/main.yml b/defaults/main.yml index ea9c420..5b7fbe0 100644 --- a/defaults/main.yml +++ b/defaults/main.yml @@ -45,6 +45,8 @@ prometheus_server_scrape_interval: 5 prometheus_server_scrape_timeout: 5 prometheus_server_version: "latest" +prometheus_use_victoriametrics: false + ## exporter prometheus_exporter_packages: [] diff --git a/tasks/server/grafana-prometheus.yml b/tasks/server/grafana-prometheus.yml index 9171d9a..b5358f1 100644 --- a/tasks/server/grafana-prometheus.yml +++ b/tasks/server/grafana-prometheus.yml @@ -17,6 +17,18 @@ owner: root group: root mode: 0644 + when: prometheus_use_victoriametrics == false + notify: + - 'grafana-prometheus-restart' + +- name: 'prometheus | server | copy config vmagent.yml' + template: + src: conf/vmagent.yml.j2 + dest: /etc/prometheus/vmagent.yml + owner: root + group: root + mode: 0644 + when: prometheus_use_victoriametrics == true notify: - 'grafana-prometheus-restart' diff --git a/tasks/server/grafana-provisioning.yml b/tasks/server/grafana-provisioning.yml index f841862..72b46ce 100644 --- a/tasks/server/grafana-provisioning.yml +++ b/tasks/server/grafana-provisioning.yml @@ -26,13 +26,13 @@ notify: "grafana-prometheus-restart" - name: "grafana-prometheus | import grafana provisioned datasources conf" - copy: - src: dashboards/datasources.yaml + template: + src: conf/datasources.yaml.j2 dest: /opt/docker-compose/grafana-prometheus/datasources/datasources.yaml owner: '1000' group: '1000' mode: '0750' - when: grafana_provisioned_datasources_path is not defined + #when: grafana_provisioned_datasources_path is not defined notify: "grafana-prometheus-restart" - name: "grafana-prometheus | import grafana provisioned dashboards conf" diff --git a/templates/compose/grafana-prometheus.yml.j2 b/templates/compose/grafana-prometheus.yml.j2 index 27b0c0c..6176ca2 100644 --- a/templates/compose/grafana-prometheus.yml.j2 +++ b/templates/compose/grafana-prometheus.yml.j2 @@ -8,7 +8,11 @@ networks: {% endif %} volumes: +{% if prometheus_use_victoriametrics == false %} prometheus-data: +{% else %} + victoria-metrics-data: +{% endif %} grafana-data: services: @@ -67,6 +71,7 @@ services: - "{{ grafana_port | default(3000) }}:3000" {% endif %} +{% if prometheus_use_victoriametrics == false %} prometheus: container_name: prometheus image: prom/prometheus:{{ grafana_prometheus_version | default('latest') }} @@ -101,3 +106,49 @@ services: {% endfor %} {% endif %} restart: unless-stopped +{% else %} + victoriametrics: + image: victoriametrics/victoria-metrics + container_name: victoriametrics + restart: always + command: + - '-storageDataPath=/victoria-metrics-data' + - '-retentionPeriod={{ prometheus_retention_time }}' + volumes: + - victoria-metrics-data:/victoria-metrics-data +{% if prometheus_traefik_enable is defined %} + - traefik + labels: + traefik.enable: true + traefik.docker.network: traefik + traefik.http.routers.prometheus.rule: Host(`{{ prometheus_domain|default(omit) }}`) + traefik.http.routers.prometheus.tls: true + traefik.http.routers.prometheus.tls.certresolver: letsencrypt + traefik.http.routers.prometheus.entrypoints: "{{ grafana_traefik_entrypoint }}" + traefik.http.services.prometheus.loadbalancer.server.port: 8428 +{% else %} + ports: + - "{{ prometheus_port | default(8428) }}:8428" +{% endif %} + networks: + - grafana + + vmagent: + image: victoriametrics/vmagent + container_name: vmagent + restart: always + command: + - '-promscrape.config=/etc/vmagent/vmagent.yml' + - '-remoteWrite.url=http://victoriametrics:8428/api/v1/write' + - '-loggerLevel=ERROR' + volumes: + - /etc/prometheus:/etc/vmagent + networks: + - grafana +{% if prometheus_nodes_ip is defined %} + extra_hosts: +{% for key, value in prometheus_nodes_ip.items() %} + - "{{ key }}:{{ value }}" +{% endfor %} +{% endif %} +{% endif %} diff --git a/files/dashboards/datasources.yaml b/templates/conf/datasources.yaml.j2 similarity index 59% rename from files/dashboards/datasources.yaml rename to templates/conf/datasources.yaml.j2 index 6aba654..1f54bca 100644 --- a/files/dashboards/datasources.yaml +++ b/templates/conf/datasources.yaml.j2 @@ -5,5 +5,9 @@ datasources: uid: yPhvsDP7k type: prometheus access: proxy +{% if prometheus_use_victoriametrics == false %} url: http://prometheus:9090 +{% else %} + url: http://victoriametrics:8428 +{% endif %} isDefault: true diff --git a/templates/conf/vmagent.yml.j2 b/templates/conf/vmagent.yml.j2 new file mode 100644 index 0000000..9d69129 --- /dev/null +++ b/templates/conf/vmagent.yml.j2 @@ -0,0 +1,517 @@ +# {{ ansible_managed }} + +global: + scrape_interval: {{ prometheus_server_global_scrape_interval }}s # Set the scrape interval to every 15 seconds. Default is every 1 minute. + +{% if prometheus_server_rules is defined %} +# Load rules once and periodically evaluate them according to the global 'evaluation_interval'. +rule_files: + - 'rules.yml' +{% endif %} + +# A scrape configuration containing exactly one endpoint to scrape: +# Here it's Prometheus itself. +scrape_configs: + # The job name is added as a label `job=` to any timeseries scraped from this config. + - job_name: 'vmagent' + + # Override the global default and scrape targets from this job every 5 seconds. + scrape_interval: {{ prometheus_server_scrape_interval }}s + scrape_timeout: {{ prometheus_server_scrape_timeout }}s + + # metrics_path defaults to '/metrics' + # scheme defaults to 'http'. + + static_configs: + - targets: ['victoriametrics:8428'] + +{% if prometheus_node_exporter_targets is defined %} + # node exporter # + - job_name: node + scrape_interval: 30s + scrape_timeout: 10s + static_configs: + - targets: +{% for target in prometheus_node_exporter_targets %} + - {{ target }}:9100 +{% endfor %} + relabel_configs: + - source_labels: [ __address__ ] + target_label: instance + regex: '(.*):9100' + replacement: '${1}' + +{% endif %} +{% if prometheus_mysqld_exporter_targets is defined %} + # mysql exporter # + - job_name: mysql + scrape_interval: 30s + scrape_timeout: 10s + static_configs: +{% if prometheus_mysqld_exporter_custom is defined %} +{% for target in prometheus_mysqld_exporter_custom.values() %} + - targets: ['{{ target.node_name }}:9104'] + labels: + environment: '{{ target.environment }}' + node_name: '{{ target.node_name }}' + service_name: '{{ target.service_name }}' + cluster: '{{ target.cluster }}' +{% endfor %} +{% else %} + - targets: +{% for target in prometheus_mysqld_exporter_targets %} + - {{ target }}:9104 +{% endfor %} +{% endif %} + relabel_configs: + - source_labels: [ __address__ ] + target_label: instance + regex: '(.*):9104' + replacement: '${1}' + +{% endif %} +{% if prometheus_mongodb_exporter_targets is defined %} + # mongoDB exporter # + - job_name: mongodb + scrape_interval: 30s + scrape_timeout: 10s + static_configs: +{% if prometheus_mongodb_exporter_custom is defined %} +{% for target in prometheus_mongodb_exporter_custom.values() %} + - targets: ['{{ target.node_name }}:9216'] + labels: + environment: '{{ target.environment }}' + node_name: '{{ target.node_name }}' + service_name: '{{ target.service_name }}' + cluster: '{{ target.cluster }}' +{% endfor %} +{% else %} + - targets: +{% for target in prometheus_mongodb_exporter_targets %} + - {{ target }}:9216 +{% endfor %} +{% endif %} + relabel_configs: + - source_labels: [ __address__ ] + target_label: instance + regex: '(.*):9216' + replacement: '${1}' + +{% endif %} +{% if prometheus_postgres_exporter_targets is defined %} + # postgresql exporter # + - job_name: postgresql + scrape_interval: 30s + scrape_timeout: 10s + static_configs: +{% if prometheus_postgres_exporter_custom is defined %} +{% for target in prometheus_postgres_exporter_custom.values() %} + - targets: ['{{ target.node_name }}:9187'] + labels: + environment: '{{ target.environment }}' + node_name: '{{ target.node_name }}' + service_name: '{{ target.service_name }}' + cluster: '{{ target.cluster }}' +{% endfor %} +{% else %} + - targets: +{% for target in prometheus_postgres_exporter_targets %} + - {{ target }}:9187 +{% endfor %} +{% endif %} + relabel_configs: + - source_labels: [ __address__ ] + target_label: instance + regex: '(.*):9187' + replacement: '${1}' + +{% endif %} +{% if prometheus_phpfpm_exporter_targets is defined %} + # PHP-FPM exporter # + - job_name: phpfpm + scrape_interval: 30s + scrape_timeout: 10s + static_configs: + - targets: +{% for target in prometheus_phpfpm_exporter_targets %} + - {{ target }}:9253 +{% endfor %} + relabel_configs: + - source_labels: [ __address__ ] + target_label: instance + regex: '(.*):9253' + replacement: '${1}' + +{% endif %} +{% if prometheus_opcache_exporter_targets is defined %} + # opcache exporter # + - job_name: opcache + scrape_interval: 30s + scrape_timeout: 10s + static_configs: + - targets: +{% for target in prometheus_opcache_exporter_targets %} + - {{ target }}:9101 +{% endfor %} + relabel_configs: + - source_labels: [ __address__ ] + target_label: instance + regex: '(.*):9101' + replacement: '${1}' + +{% endif %} +{% if prometheus_apache_exporter_targets is defined %} + # apache exporter # + - job_name: apache + scrape_interval: 30s + scrape_timeout: 10s + static_configs: + - targets: +{% for target in prometheus_apache_exporter_targets %} + - {{ target }}:9117 +{% endfor %} + relabel_configs: + - source_labels: [ __address__ ] + target_label: instance + regex: '(.*):9117' + replacement: '${1}' + +{% endif %} +{% if prometheus_nginx_exporter_targets is defined %} + # nginx exporter # + - job_name: nginx + scrape_interval: 30s + scrape_timeout: 10s + static_configs: + - targets: +{% for target in prometheus_nginx_exporter_targets %} + - {{ target }}:9113 +{% endfor %} + relabel_configs: + - source_labels: [ __address__ ] + target_label: instance + regex: '(.*):9113' + replacement: '${1}' + +{% endif %} +{% if prometheus_haproxy_exporter_targets is defined %} + # haproxy exporter # + - job_name: haproxy + scrape_interval: 30s + scrape_timeout: 10s + static_configs: + - targets: +{% for target in prometheus_haproxy_exporter_targets %} + - {{ target }}:8404 +{% endfor %} + relabel_configs: + - source_labels: [ __address__ ] + target_label: instance + regex: '(.*):8404' + replacement: '${1}' + +{% endif %} +{% if prometheus_varnish_exporter_targets is defined %} + # Varnish exporter # + - job_name: varnish + scrape_interval: 30s + scrape_timeout: 10s + static_configs: + - targets: +{% for target in prometheus_varnish_exporter_targets %} + - {{ target }}:9131 +{% endfor %} + relabel_configs: + - source_labels: [ __address__ ] + target_label: instance + regex: '(.*):9131' + replacement: '${1}' + +{% endif %} +{% if prometheus_blackbox_exporter is defined %} + # blackbox # +{% if prometheus_blackbox_exporter_http is defined %} + ## http check ## + - job_name: blackbox - url + scrape_interval: 30s + scrape_timeout: 10s + metrics_path: /probe + params: + module: [http_2xx] + static_configs: + - targets: +{% for target in prometheus_blackbox_exporter_http %} + - {{target }} +{% endfor %} + relabel_configs: + - source_labels: [__address__] + target_label: __param_target + - source_labels: [__param_target] + target_label: instance + - target_label: __address__ + replacement: {{ prometheus_blackbox_exporter_host }}:9115 +{% endif %} +{% if prometheus_blackbox_exporter_ping is defined %} + ## ping ## + - job_name: blackbox - ping + scrape_interval: 30s + scrape_timeout: 10s + params: + module: [icmp] + static_configs: + - targets: +{% for target in prometheus_blackbox_exporter_ping %} + - {{ target }} +{% endfor %} + relabel_configs: + - source_labels: [__address__] + target_label: __param_target + - source_labels: [__param_target] + target_label: instance + - target_label: __address__ + replacement: {{ prometheus_blackbox_exporter_host }}:9115 +{% endif %} + +{% endif %} +{% if prometheus_redis_multi_instances_exporter_targets is defined %} + # Redis exporter # + - job_name: 'redis_exporter_targets' + static_configs: + - targets: +{% for target in prometheus_redis_multi_instances_exporter_targets %} + - {{ target }} +{% endfor %} + metrics_path: /scrape + relabel_configs: + - source_labels: [__address__] + target_label: __param_target + - source_labels: [__param_target] + target_label: instance + - source_labels: [instance] + target_label: __address__ + regex: 'redis://(.*):63..' + replacement: '${1}:9121' + +{% endif %} +{% if prometheus_redis_exporter_targets is defined %} + # Redis exporter # + - job_name: redis + scrape_interval: 30s + scrape_timeout: 10s + static_configs: + - targets: +{% for target in prometheus_redis_exporter_targets %} + - {{ target }}:9121 +{% endfor %} + relabel_configs: + - source_labels: [ __address__ ] + target_label: instance + regex: '(.*):9121' + replacement: '${1}' + +{% endif %} +{% if prometheus_proxysql_exporter_targets is defined %} + # ProxySQL exporter # + - job_name: proxysql + scrape_interval: 30s + scrape_timeout: 10s + static_configs: + - targets: +{% for target in prometheus_proxysql_exporter_targets %} + - {{ target }}:6070 + relabel_configs: + - source_labels: [ __address__ ] + target_label: instance + regex: '(.*):6070' + replacement: '${1}' +{% endfor %} + +{% endif %} +{% if prometheus_kong_exporter_targets is defined %} + # Kong exporter # + - job_name: kong + scrape_interval: 30s + scrape_timeout: 10s + metrics_path: /metrics + honor_labels: false + honor_timestamps: true + sample_limit: 0 + static_configs: + - targets: +{% for target in prometheus_kong_exporter_targets %} + - {{ target }} +{% endfor %} + +{% endif %} +{% if prometheus_memcached_exporter_targets is defined %} + # Memcached exporter # + - job_name: memcached + scrape_interval: 30s + scrape_timeout: 10s + static_configs: + - targets: +{% for target in prometheus_memcached_exporter_targets %} + - {{ target }}:9150 +{% endfor %} + relabel_configs: + - source_labels: [ __address__ ] + target_label: instance + regex: '(.*):9150' + replacement: '${1}' + +{% endif %} +{% if prometheus_docker_exporter_targets is defined %} + # Docker exporter # + - job_name: docker + scrape_interval: 30s + scrape_timeout: 10s + static_configs: + - targets: +{% for target in prometheus_docker_exporter_targets %} + - {{ target }}:9323 +{% endfor %} + relabel_configs: + - source_labels: [ __address__ ] + target_label: instance + regex: '(.*):9323' + replacement: '${1}' + +{% endif %} +{% if prometheus_cadvisor_exporter_targets is defined %} + # cadvisor # + - job_name: cadvisor + scrape_interval: 30s + static_configs: + - targets: +{% for target in prometheus_cadvisor_exporter_targets %} + - {{ target }}:8080 +{% endfor %} + relabel_configs: + - source_labels: [ __address__ ] + target_label: instance + regex: '(.*):8080' + replacement: '${1}' +{% endif %} +{% if prometheus_cloudflare_exporter_targets is defined %} + # cloudflare # + - job_name: cloudflare + scrape_interval: 30s + static_configs: + - targets: +{% for target in prometheus_cloudflare_exporter_targets %} + - {{ target }}:8082 + {% endfor %} + relabel_configs: + - source_labels: [ __address__ ] + target_label: instance + regex: '(.*):8082' + replacement: '${1}' + +{% endif %} +{% if prometheus_pve_exporter_targets is defined %} + # proxmox # + - job_name: pve + scrape_interval: 30s + static_configs: + - targets: +{% for target in prometheus_pve_exporter_targets %} + - {{ target }}:9221 +{% endfor %} + metrics_path: /pve + relabel_configs: + - source_labels: [ __address__ ] + target_label: instance + regex: '(.*):9221' + replacement: '${1}' + +{% endif %} +{% if prometheus_opensearch_exporter_targets is defined %} + # opensearch # + - job_name: opensearch + scrape_interval: 30s + metrics_path: "/_prometheus/metrics" + scheme: https + tls_config: + insecure_skip_verify: true + static_configs: + - targets: +{% for target in prometheus_opensearch_exporter_targets %} + - {{ target }}:9200 +{% endfor %} + basic_auth: + username: {{ opensearch_user }} + password: {{ opensearch_pass }} + relabel_configs: + - source_labels: [ __address__ ] + target_label: instance + regex: '(.*):9200' + replacement: '${1}' + +{% endif %} +{% if prometheus_gitlab_exporter_targets is defined %} + # gitlab # + - job_name: gitlab-nginx + static_configs: + - targets: +{% for target in prometheus_gitlab_exporter_targets %} + - {{ target }}:8060 +{% endfor %} + - job_name: gitlab-node + static_configs: + - targets: +{% for target in prometheus_gitlab_exporter_targets %} + - {{ target }}:9101 +{% endfor %} + - job_name: gitlab-redis + static_configs: + - targets: +{% for target in prometheus_gitlab_exporter_targets %} + - {{ target }}:9121 +{% endfor %} + - job_name: gitlab-postgres + static_configs: + - targets: +{% for target in prometheus_gitlab_exporter_targets %} + - {{ target }}:9187 +{% endfor %} + - job_name: gitlab-workhorse + static_configs: + - targets: +{% for target in prometheus_gitlab_exporter_targets %} + - {{ target }}:9229 +{% endfor %} + - job_name: gitlab-rails + metrics_path: "/-/metrics" + static_configs: + - targets: +{% for target in prometheus_gitlab_exporter_targets %} + - {{ target }}:8880 +{% endfor %} + - job_name: gitlab-sidekiq + static_configs: + - targets: +{% for target in prometheus_gitlab_exporter_targets %} + - {{ target }}:8082 +{% endfor %} + - job_name: gitlab_exporter_database + metrics_path: "/database" + static_configs: + - targets: +{% for target in prometheus_gitlab_exporter_targets %} + - {{ target }}:9168 +{% endfor %} + - job_name: gitlab_exporter_sidekiq + metrics_path: "/sidekiq" + static_configs: + - targets: +{% for target in prometheus_gitlab_exporter_targets %} + - {{ target }}:9168 +{% endfor %} + - job_name: gitaly + static_configs: + - targets: +{% for target in prometheus_gitlab_exporter_targets %} + - {{ target }}:9236 +{% endfor %} + +{% endif %} -- 2.47.1 From 87ee04484f693464cee0fd285259c63649c4e81e Mon Sep 17 00:00:00 2001 From: "tom.chivert" Date: Wed, 13 Sep 2023 16:56:01 +0200 Subject: [PATCH 2/3] fix nfs dashboard --- defaults/main.yml | 2 +- files/dashboards/nfs.json | 578 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 579 insertions(+), 1 deletion(-) create mode 100644 files/dashboards/nfs.json diff --git a/defaults/main.yml b/defaults/main.yml index 5b7fbe0..7dfdfbc 100644 --- a/defaults/main.yml +++ b/defaults/main.yml @@ -77,7 +77,7 @@ prometheus_redis_exporter_password: "" ## grafana grafana_auth_anonymous_enabled: false -grafana_auth_anonymous_org_role: Editor # Viewer +grafana_auth_anonymous_org_role: Viewer grafana_auth_anonymous_org_name: 'Main Org.' grafana_auth_disable_login_form: false grafana_editors_can_admin: false diff --git a/files/dashboards/nfs.json b/files/dashboards/nfs.json new file mode 100644 index 0000000..f83833e --- /dev/null +++ b/files/dashboards/nfs.json @@ -0,0 +1,578 @@ +{ + "annotations": { + "list": [ + { + "builtIn": 1, + "datasource": { + "type": "grafana", + "uid": "-- Grafana --" + }, + "enable": true, + "hide": true, + "iconColor": "rgba(0, 211, 255, 1)", + "name": "Annotations & Alerts", + "type": "dashboard" + } + ] + }, + "description": "NFS Prometheus Dashboard", + "editable": true, + "fiscalYearStartMonth": 0, + "gnetId": 6257, + "graphTooltip": 0, + "id": 30, + "links": [], + "liveNow": false, + "panels": [ + { + "datasource": { + "type": "prometheus", + "uid": "yPhvsDP7k" + }, + "description": "Request rate per 5m", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 20, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short" + }, + "overrides": [] + }, + "gridPos": { + "h": 10, + "w": 24, + "x": 0, + "y": 0 + }, + "id": 243, + "links": [], + "options": { + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max", + "min" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true, + "sortBy": "Mean", + "sortDesc": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "10.1.1", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "yPhvsDP7k" + }, + "disableTextWrap": false, + "editorMode": "code", + "expr": "sum by (instance) (rate(node_nfs_requests_total{instance=~\"$node\", job=~\"$job\", proto=\"4\"}[5m]))", + "format": "time_series", + "fullMetaSearch": false, + "hide": false, + "includeNullMetadata": true, + "intervalFactor": 1, + "legendFormat": "{{instance}}", + "range": true, + "refId": "C", + "step": 240, + "useBackend": false + } + ], + "title": "NFS Requests by instance", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "yPhvsDP7k" + }, + "description": "Request rate per 5m", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "Connections", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 20, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short" + }, + "overrides": [] + }, + "gridPos": { + "h": 10, + "w": 24, + "x": 0, + "y": 10 + }, + "id": 267, + "links": [], + "options": { + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max", + "min" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true, + "sortBy": "Mean", + "sortDesc": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "10.1.1", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "yPhvsDP7k" + }, + "disableTextWrap": false, + "editorMode": "code", + "expr": "sum by (method) (rate(node_nfs_requests_total{instance=~\"$node\", job=~\"$job\", proto=\"4\"}[5m]))", + "format": "time_series", + "fullMetaSearch": false, + "hide": false, + "includeNullMetadata": true, + "intervalFactor": 1, + "legendFormat": "{{method}}", + "range": true, + "refId": "C", + "step": 240, + "useBackend": false + } + ], + "title": "NFS Requests by method", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "yPhvsDP7k" + }, + "description": "", + "fieldConfig": { + "defaults": { + "color": { + "fixedColor": "blue", + "mode": "palette-classic" + }, + "custom": { + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "hue", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineStyle": { + "fill": "solid" + }, + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "percent" + }, + "overrides": [] + }, + "gridPos": { + "h": 10, + "w": 12, + "x": 0, + "y": 20 + }, + "id": 268, + "links": [], + "options": { + "legend": { + "calcs": [ + "lastNotNull" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true, + "sortBy": "Last *", + "sortDesc": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "10.1.1", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "yPhvsDP7k" + }, + "disableTextWrap": false, + "editorMode": "code", + "expr": "100 - (node_filesystem_avail_bytes{instance=~\"$node\", job=\"$job\", fstype=\"nfs4\"} * 100 / node_filesystem_size_bytes{instance=~\"$node\", job=\"$job\", fstype=\"nfs4\"})", + "format": "time_series", + "fullMetaSearch": false, + "hide": false, + "includeNullMetadata": true, + "intervalFactor": 1, + "legendFormat": "{{instance}} {{device}}", + "range": true, + "refId": "C", + "step": 240, + "useBackend": false + } + ], + "title": "NFS Mounts Usage", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "yPhvsDP7k" + }, + "description": "", + "fieldConfig": { + "defaults": { + "color": { + "fixedColor": "blue", + "mode": "palette-classic" + }, + "custom": { + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "hue", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineStyle": { + "fill": "solid" + }, + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short" + }, + "overrides": [] + }, + "gridPos": { + "h": 10, + "w": 12, + "x": 12, + "y": 20 + }, + "id": 269, + "links": [], + "options": { + "legend": { + "calcs": [ + "lastNotNull" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true, + "sortBy": "Last *", + "sortDesc": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "10.1.1", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "yPhvsDP7k" + }, + "disableTextWrap": false, + "editorMode": "code", + "expr": "node_filesystem_device_error{instance=~\"$node\", job=\"$job\", fstype=\"nfs4\"}", + "format": "time_series", + "fullMetaSearch": false, + "hide": false, + "includeNullMetadata": true, + "intervalFactor": 1, + "legendFormat": "{{instance}} {{device}}", + "range": true, + "refId": "C", + "step": 240, + "useBackend": false + } + ], + "title": "NFS Mounts Errors", + "type": "timeseries" + } + ], + "refresh": "5m", + "schemaVersion": 38, + "style": "dark", + "tags": [], + "templating": { + "list": [ + { + "current": { + "selected": false, + "text": "node", + "value": "node" + }, + "datasource": { + "type": "prometheus", + "uid": "yPhvsDP7k" + }, + "definition": "", + "hide": 2, + "includeAll": false, + "label": "Job", + "multi": false, + "name": "job", + "options": [], + "query": "label_values(node_boot_time_seconds, job)", + "refresh": 1, + "regex": "", + "skipUrlSync": false, + "sort": 1, + "tagValuesQuery": "", + "tagsQuery": "", + "type": "query", + "useTags": false + }, + { + "current": { + "selected": true, + "text": [], + "value": [] + }, + "datasource": { + "type": "prometheus", + "uid": "yPhvsDP7k" + }, + "definition": "", + "hide": 0, + "includeAll": true, + "label": "Host:", + "multi": true, + "name": "node", + "options": [], + "query": "label_values(node_boot_time_seconds{job=~\"$job\"}, instance)", + "refresh": 1, + "regex": "", + "skipUrlSync": false, + "sort": 1, + "tagValuesQuery": "", + "tagsQuery": "", + "type": "query", + "useTags": false + } + ] + }, + "time": { + "from": "now-24h", + "to": "now" + }, + "timepicker": { + "refresh_intervals": [ + "5s", + "10s", + "30s", + "1m", + "5m", + "15m", + "30m", + "1h", + "2h", + "1d" + ], + "time_options": [ + "5m", + "15m", + "1h", + "6h", + "12h", + "24h", + "2d", + "7d", + "30d" + ] + }, + "timezone": "browser", + "title": "NFS", + "uid": "cc0d5bef-8b9d-47df-8be7-cf75c3efeece", + "version": 12, + "weekStart": "" +} -- 2.47.1 From 02525ae35ce528dd4a9729de8814b99e13e7d4a3 Mon Sep 17 00:00:00 2001 From: "tom.chivert" Date: Thu, 14 Sep 2023 15:46:09 +0200 Subject: [PATCH 3/3] update documentation --- README.md | 6 ++++-- docs/variables.md | 1 + 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 440cd30..402019d 100644 --- a/README.md +++ b/README.md @@ -2,8 +2,8 @@ prometheus ========== The present role : - - installs prometheus server inside a Docker container - - installs various prometheus exporter + - Installs Prometheus server inside a docker container. + - Installs various Prometheus exporter. - node - blackbox - apache @@ -16,6 +16,8 @@ The present role : - postgres - mongodb - opensearch (via plugin for opensearch https://github.com/aiven/prometheus-exporter-plugin-for-opensearch) + - Deploys Grafana with a dashboard for each exporter configured. + - Supports deploying VictoriaMetrics as the Prometheus backend. Please note that Docker and Haproxy their own embedded exporters. - https://docs.docker.com/config/daemon/prometheus/ diff --git a/docs/variables.md b/docs/variables.md index a048116..277f46b 100644 --- a/docs/variables.md +++ b/docs/variables.md @@ -19,6 +19,7 @@ | prometheus_nodes_ip | The IP addresses of Prometheus nodes | Dictionary | localhost: "127.0.0.1" | | prometheus_retention_time | The retention time for Prometheus data | String | "15d" | | prometheus_server_enable | Whether to enable the Prometheus server | Boolean | false | +| prometheus_use_victoriametrics | Use VictoriaMetrics as prometheus backend | Boolean | false | | prometheus_server_global_evaluation_interval | The global evaluation interval for Prometheus server | Integer | 15 | | prometheus_server_global_scrape_interval | The global scrape interval for Prometheus server | Integer | 15 | | prometheus_server_job_name | The job name for Prometheus server | String | "prometheus" | -- 2.47.1