From 4e31c89c082afa3f6a84c8700c45de95e014f491 Mon Sep 17 00:00:00 2001 From: Alexey Shekhirin Date: Fri, 17 Feb 2023 23:27:18 +0800 Subject: [PATCH] chore(monitoring): docker compose configuration for Grafana & Prometheus (#1391) --- etc/README.md | 16 ++++++++- etc/docker-monitoring.yml | 39 ++++++++++++++++++++++ etc/grafana/dashboards/dashboard.yml | 7 ++++ etc/grafana/{ => dashboards}/overview.json | 0 etc/grafana/datasources/prometheus.yml | 8 +++++ etc/prometheus/prometheus.yml | 3 +- 6 files changed, 70 insertions(+), 3 deletions(-) create mode 100644 etc/docker-monitoring.yml create mode 100644 etc/grafana/dashboards/dashboard.yml rename etc/grafana/{ => dashboards}/overview.json (100%) create mode 100644 etc/grafana/datasources/prometheus.yml diff --git a/etc/README.md b/etc/README.md index 8d28d4202..68e610d7b 100644 --- a/etc/README.md +++ b/etc/README.md @@ -7,4 +7,18 @@ The files in this directory may undergo a lot of changes while reth is unstable, ### Overview - [**Prometheus**](./prometheus/prometheus.yml): An example Prometheus configuration. -- [**Grafana**](./grafana/): Example Grafana dashboards. +- [**Grafana**](./grafana/): Example Grafana dashboards & data sources. + +### Docker Compose + +To run Grafana dashboard with example dashboard and pre-configured Prometheus data source pointing at +the locally running Reth instance with metrics exposed on `localhost:9000`: +```sh +docker compose -p reth -f ./etc/docker-monitoring.yml up +``` + +After that, Grafana will be exposed on `localhost:3000` and accessible via default credentials: +``` +username: admin +password: admin +``` \ No newline at end of file diff --git a/etc/docker-monitoring.yml b/etc/docker-monitoring.yml new file mode 100644 index 000000000..d9c439d01 --- /dev/null +++ b/etc/docker-monitoring.yml @@ -0,0 +1,39 @@ +version: '3' + +services: + prometheus: + image: prom/prometheus + ports: + - 9090:9090 + volumes: + - ./prometheus/:/etc/prometheus/ + - prometheus_data:/prometheus + command: + - --config.file=/etc/prometheus/prometheus.yml + - --storage.tsdb.path=/prometheus + extra_hosts: + - "host.docker.internal:host-gateway" # https://stackoverflow.com/a/43541732/5204678 + + grafana: + image: grafana/grafana + ports: + - 3000:3000 + environment: + PROMETHEUS_URL: http://prometheus:9090 + # 1. Copy dashboards from temp directory to prevent modifying original host files + # 2. Replace Prometheus datasource placeholder with the actual name + # 3. Run Grafana + entrypoint: > + sh -c "cp -r /etc/grafana/provisioning_temp/dashboards/. /etc/grafana/provisioning/dashboards && + find /etc/grafana/provisioning/dashboards/ -name '*.json' -exec sed -i 's/$${DS_PROMETHEUS}/Prometheus/g' {} \+ && + /run.sh" + volumes: + - grafana_data:/var/lib/grafana + - ./grafana/datasources:/etc/grafana/provisioning/datasources + - ./grafana/dashboards:/etc/grafana/provisioning_temp/dashboards + depends_on: + - prometheus + +volumes: + prometheus_data: + grafana_data: diff --git a/etc/grafana/dashboards/dashboard.yml b/etc/grafana/dashboards/dashboard.yml new file mode 100644 index 000000000..87b13ec38 --- /dev/null +++ b/etc/grafana/dashboards/dashboard.yml @@ -0,0 +1,7 @@ +apiVersion: 1 + +providers: + - name: 'Folder' + allowUiUpdates: true + options: + path: /etc/grafana/provisioning/dashboards diff --git a/etc/grafana/overview.json b/etc/grafana/dashboards/overview.json similarity index 100% rename from etc/grafana/overview.json rename to etc/grafana/dashboards/overview.json diff --git a/etc/grafana/datasources/prometheus.yml b/etc/grafana/datasources/prometheus.yml new file mode 100644 index 000000000..6561365f8 --- /dev/null +++ b/etc/grafana/datasources/prometheus.yml @@ -0,0 +1,8 @@ +apiVersion: 1 + +datasources: + - name: Prometheus + type: prometheus + access: proxy + url: $PROMETHEUS_URL + editable: true diff --git a/etc/prometheus/prometheus.yml b/etc/prometheus/prometheus.yml index c396384b1..a3e083f81 100644 --- a/etc/prometheus/prometheus.yml +++ b/etc/prometheus/prometheus.yml @@ -3,5 +3,4 @@ scrape_configs: metrics_path: "/" scrape_interval: 5s static_configs: - - targets: ['localhost:9000'] - + - targets: ['localhost:9000', 'host.docker.internal:9000']