docs/packages/docusaurus/docs/07-Modules/04-metrics.md
2025-04-10 21:56:12 -04:00

3.6 KiB

Metrics

This is a basic example of collecting metrics from Traefik and CrowdSec using Prometheus and visualizing them with Grafana dashboards.

:::warning

Important for users with low-powered server (1GB RAM): This setup will increase the use of your server RAM.

:::

Configuration

Traefik

For claiming metrics from Traefik we have to adjust some configuration files.

  1. Udpate the docker-compose.yml file of the Pangolin stack to expose metrics port 8082 for the Prometheus connection:
service:
  gerbil:
    ports:
      - 8082:8082
  1. Update the /config/traefik/traefik_config.yml file to include the following:
entryPoints:
  metrics:
    address: ":8082"

metrics:
  prometheus:
    buckets:
      - 0.1
      - 0.3
      - 1.2
      - 5.0
    entryPoint: metrics
    addEntryPointsLabels: true
    addRoutersLabels: true
    addServicesLabels: true
  1. Restart the Gerbil and Traefik container to apply the changes:
sudo docker restart traefik gerbil

Crowdsec

For claiming metrics from Crowdsec we have to adjust the docker compose files.

  1. Udpate the docker-compose.yml file of the Pangolin stack to expose metrics port 6060 for the Prometheus connection:
service:
  crowdsec:
    ports:
      - 6060:6060
  1. Restart the Crowdsec container to apply the changes:
sudo docker restart crowdsec

Prometheus

  1. Create a new Prometheus container or add it to docker-compose.yml of Pangolin stack:
services:
  prometheus:
    container_name: prometheus
    image: prom/prometheus:latest
    restart: unless-stopped
    ports:
      - 9090:9090
    volumes:
      - /etc/timezone:/etc/timezone:ro
      - /etc/localtime:/etc/localtime:ro
      - ./config/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml
      - ./config/prometheus/data:/prometheus
  1. Create a prometheus.yml file in the /config/prometheus directory with the following content:
global:
  scrape_interval: 15s
  evaluation_interval: 15s

scrape_configs:
  - job_name: "prometheus"
    static_configs:
      - targets: ["localhost:9090"]

  - job_name: traefik
    static_configs:
      - targets: ["172.17.0.1:8082"]

  - job_name: crowdsec
    static_configs:
      - targets: ["172.17.0.1:6060"]
  1. Create a folder data in /config/prometheus and change the ower and owning group:
chown nobody:nogroup data
  1. Start the Prometheus container:
sudo docker conpose up -d

Grafana

  1. Create a new Grafana container or add it to docker-compose.yml of Pangolin stack:
services:
  grafana:
    image: grafana/grafana:latest
    container_name: grafana
    restart: unless-stopped
    ports:
      - 3000:3000
    volumes:
      - /etc/timezone:/etc/timezone:ro
      - /etc/localtime:/etc/localtime:ro
      - ./config/grafana/data:/var/lib/grafana
  1. Start the Grafana container:
sudo docker compose up -d

:::note

Default login credentials for Grafana admin user is admin:admin.

:::

Add Prometheus Connection

Add the Prometheus connection under Connections -> Add new connection.

Set http://172.17.0.1:9090 as Prometheus Server URL and click Save & test.

Add Dashboard

Add a Dashboard under Dashboard -> New -> Import and import a pre configured Dashboard or create your own.

Traefik

<img src={require("./img/traefik_dashboard.png").default} alt="Preview"/>

Template Import ID = 17346

https://grafana.com/grafana/dashboards/17346-traefik-official-standalone-dashboard/

Crowdsec

https://github.com/crowdsecurity/grafana-dashboards/tree/master