diff --git a/tools/local/monitoring/docker-compose.yml b/tools/local/monitoring/docker-compose.yml new file mode 100644 index 0000000..b1d842a --- /dev/null +++ b/tools/local/monitoring/docker-compose.yml @@ -0,0 +1,58 @@ +version: '3.8' + +volumes: + prometheus_data: {} + grafana_data: {} + +services: + prometheus: + image: prom/prometheus + restart: always + volumes: + - ./prometheus:/etc/prometheus/ + - prometheus_data:/prometheus + command: + - '--config.file=/etc/prometheus/prometheus.yml' + - '--storage.tsdb.path=/prometheus' + - '--web.console.libraries=/usr/share/prometheus/console_libraries' + - '--web.console.templates=/usr/share/prometheus/consoles' + ports: + - 9090:9090 + extra_hosts: + - 'host.docker.internal:host-gateway' + depends_on: + - node-exporter + + node-exporter: + image: prom/node-exporter + volumes: + - /proc:/host/proc:ro + - /sys:/host/sys:ro + - /:/rootfs:ro + command: + - '--path.procfs=/host/proc' + - '--path.sysfs=/host/sys' + - --collector.filesystem.ignored-mount-points + - '^/(sys|proc|dev|host|etc|rootfs/var/lib/docker/containers|rootfs/var/lib/docker/overlay2|rootfs/run/docker/netns|rootfs/var/lib/docker/aufs)($$|/)' + ports: + - 9100:9100 + restart: always + deploy: + mode: global + + grafana: + image: grafana/grafana + user: '472' + restart: always + environment: + # do not really need it, just to leave it as an example on how to install plugins here + GF_INSTALL_PLUGINS: 'grafana-clock-panel' + volumes: + - grafana_data:/var/lib/grafana + - ./grafana/provisioning/:/etc/grafana/provisioning/ + env_file: + - ./grafana/config.monitoring + ports: + - 3000:3000 + depends_on: + - prometheus diff --git a/tools/local/monitoring/grafana/config.monitoring b/tools/local/monitoring/grafana/config.monitoring new file mode 100644 index 0000000..a4a54c8 --- /dev/null +++ b/tools/local/monitoring/grafana/config.monitoring @@ -0,0 +1,3 @@ +GF_SECURITY_ADMIN_USER=admin +GF_SECURITY_ADMIN_PASSWORD=foobar +GF_USERS_ALLOW_SIGN_UP=false diff --git a/examples/grafana/dashboard.json b/tools/local/monitoring/grafana/provisioning/dashboards/dashboard.json similarity index 99% rename from examples/grafana/dashboard.json rename to tools/local/monitoring/grafana/provisioning/dashboards/dashboard.json index 1dc9d64..37c42a8 100644 --- a/examples/grafana/dashboard.json +++ b/tools/local/monitoring/grafana/provisioning/dashboards/dashboard.json @@ -1212,4 +1212,4 @@ "uid": "xDLNRKUWz", "version": 1, "weekStart": "" -} \ No newline at end of file +} diff --git a/tools/local/monitoring/grafana/provisioning/dashboards/dashboard.yml b/tools/local/monitoring/grafana/provisioning/dashboards/dashboard.yml new file mode 100644 index 0000000..14716ee --- /dev/null +++ b/tools/local/monitoring/grafana/provisioning/dashboards/dashboard.yml @@ -0,0 +1,11 @@ +apiVersion: 1 + +providers: +- name: 'Prometheus' + orgId: 1 + folder: '' + type: file + disableDeletion: false + editable: true + options: + path: /etc/grafana/provisioning/dashboards diff --git a/tools/local/monitoring/grafana/provisioning/datasources/datasource.yml b/tools/local/monitoring/grafana/provisioning/datasources/datasource.yml new file mode 100644 index 0000000..c02bb38 --- /dev/null +++ b/tools/local/monitoring/grafana/provisioning/datasources/datasource.yml @@ -0,0 +1,50 @@ +# config file version +apiVersion: 1 + +# list of datasources that should be deleted from the database +deleteDatasources: + - name: Prometheus + orgId: 1 + +# list of datasources to insert/update depending +# whats available in the database +datasources: + # name of the datasource. Required +- name: Prometheus + # datasource type. Required + type: prometheus + # access mode. direct or proxy. Required + access: proxy + # org id. will default to orgId 1 if not specified + orgId: 1 + # url + url: http://prometheus:9090 + # database password, if used + password: + # database user, if used + user: + # database name, if used + database: + # enable/disable basic auth + basicAuth: false + # basic auth username, if used + basicAuthUser: + # basic auth password, if used + basicAuthPassword: + # enable/disable with credentials headers + withCredentials: + # mark as default datasource. Max one per org + isDefault: true + # fields that will be converted to json and stored in json_data + jsonData: + graphiteVersion: "1.1" + tlsAuth: false + tlsAuthWithCACert: false + # json object of data that will be encrypted. + secureJsonData: + tlsCACert: "..." + tlsClientCert: "..." + tlsClientKey: "..." + version: 1 + # allow users to edit datasources from the UI. + editable: true diff --git a/tools/local/monitoring/prometheus/prometheus.yml b/tools/local/monitoring/prometheus/prometheus.yml new file mode 100644 index 0000000..723fbcb --- /dev/null +++ b/tools/local/monitoring/prometheus/prometheus.yml @@ -0,0 +1,52 @@ +# my global config +global: + scrape_interval: 15s # By default, scrape targets every 15 seconds. + evaluation_interval: 15s # By default, scrape targets every 15 seconds. + # scrape_timeout is set to the global default (10s). + + # Attach these labels to any time series or alerts when communicating with + # external systems (federation, remote storage, Alertmanager). + external_labels: + monitor: 'my-project' + +# Load and evaluate rules in this file every 'evaluation_interval' seconds. +# rule_files: + # - 'alert.rules' + # - "first.rules" + # - "second.rules" + +# alert +# alerting: +# alertmanagers: +# - scheme: http +# static_configs: +# - targets: +# - "alertmanager:9093" + +# 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: redis + scrape_interval: 5s + static_configs: + - targets: ['host.docker.internal:6379'] + + - job_name: 'prometheus' + + # Override the global default and scrape targets from this job every 5 seconds. + scrape_interval: 5s + + static_configs: + - targets: ['localhost:9090'] + + + - job_name: 'node-exporter' + + # Override the global default and scrape targets from this job every 5 seconds. + scrape_interval: 5s + static_configs: + - targets: ['node-exporter:9100'] + labels: + instance: node