# Dashboards for James on top of Prometheus / Grafana

The boards are slightly different than what we used to do with ES reporter, as we 
count now on Prometheus to scrap metrics from the /metrics endpoint exposed from James.

This is just a rough conversion for starters, it will likely need more refining over time.

# Grafana reporting

This is a collection of Grafana dashboards to display James metrics.

## Expose metrics for Prometheus collection

To enable James metrics, add ``extensions.routes`` to [webadmin.properties]( https://github.com/apache/james-project/blob/master/docs/modules/servers/pages/distributed/configure/webadmin.adoc) file:
```
extensions.routes=org.apache.james.webadmin.dropwizard.MetricsRoutes
```

## Configure Prometheus Data source
You need to set up [Prometheus](https://prometheus.io/docs/prometheus/latest/getting_started/) first to scrape James metrics.\
Add Apache James WebAdmin Url or IP address to `prometheus.yaml` configuration file.

```
scrape_configs:
  # The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.
  - job_name: 'WebAdmin url Example'
    scrape_interval: 5s
    metrics_path: /metrics
    static_configs:
      - targets: ['james-webamin-url']
  - job_name: 'WebAdmin IP Example'
    scrape_interval: 5s
    metrics_path: /metrics
    static_configs:
      - targets: ['192.168.100.10:8000']      
```   
For Kubernetes deployment, we recommend using Prometheus `ServiceMonitor` to collect James metrics through James Webadmin service. Please see our James Helm-chart for more information.

## Connect Data source to Grafana

Add Prometheus data source to Grafana.\
You can do this either from [Grafana UI](https://prometheus.io/docs/visualization/grafana/) or from a [configuration file](https://grafana.com/docs/grafana/latest/datasources/prometheus/). 

The following `docker-compose.yaml` will help you install a simple Prometheus/ Grafana stack :

```
version: '3'
#Metric monitoring
  grafana:
    image: grafana/grafana:latest
    container_name: grafana
    ports:
      - "3000:3000"

  prometheus:
    image: prom/prometheus:latest
    restart: unless-stopped
    ports:
      - "9090:9090"
    volumes:
      - ./conf/prometheus.yml:/etc/prometheus/prometheus.yml
```

## Getting dashboards

All dasboards can be found [HERE](https://github.com/apache/james-project/tree/master/server/grafana-reporting/prometheus-datasource/). Import the different JSON files in this directory to Grafana via UI.