Introduction to Grafana
Visualize metrics, logs, and traces
Grafana is an open-source analytics and visualization platform. It allows you to query, visualize, alert on, and explore your metrics, logs, and traces regardless of where they're stored.
Why Grafana?#
Multi-source support#
Connect to dozens of data sources including Prometheus, Elasticsearch, InfluxDB, and cloud platforms.
Powerful dashboards#
Create dynamic, reusable dashboards with a rich set of visualization options.
Alerting#
Define alert rules across multiple data sources and receive notifications via email, Slack, PagerDuty, and more.
Extensibility#
Extend Grafana with plugins for additional data sources, panels, and apps.
Core concepts#
Data sources#
Data sources are the backends that Grafana queries for metrics, logs, or traces.
Common data sources:
- Prometheus
- Elasticsearch
- Loki
- InfluxDB
- MySQL/PostgreSQL
- CloudWatch
Dashboards#
Dashboards are collections of panels organized into rows. Each panel displays data visualized in a specific way.
Panels#
Panels are the basic visualization building blocks. Types include:
- Time series graphs
- Stat panels
- Gauges
- Tables
- Heatmaps
- Logs panels
Variables#
Variables enable dynamic dashboards that can be filtered or scoped:
1$environment: production, staging, development2$service: api, web, workerCreating dashboards#
Basic dashboard structure#
1{2 "title": "Application Metrics",3 "panels": [4 {5 "title": "Request Rate",6 "type": "timeseries",7 "targets": [8 {9 "expr": "rate(http_requests_total[5m])",10 "legendFormat": "{{method}} {{endpoint}}"11 }12 ]13 }14 ]15}Dashboard as code#
Use Grafonnet or Terraform to manage dashboards as code:
1// dashboard.jsonnet2local grafana = import 'grafonnet/grafana.libsonnet';3local dashboard = grafana.dashboard;4local prometheus = grafana.prometheus;56dashboard.new(7 'My Dashboard',8 schemaVersion=27,9)10.addPanel(11 grafana.graphPanel.new(12 'Request Rate',13 datasource='Prometheus',14 )15 .addTarget(16 prometheus.target('rate(http_requests_total[5m])')17 ),18 gridPos={x: 0, y: 0, w: 12, h: 8}19)Alerting#
Alert rules#
Define conditions that trigger alerts:
1groups:2 - name: app-alerts3 rules:4 - alert: HighErrorRate5 expr: |6 sum(rate(http_requests_total{status=~"5.."}[5m])) /7 sum(rate(http_requests_total[5m])) > 0.058 for: 5m9 labels:10 severity: critical11 annotations:12 summary: High error rate detectedNotification channels#
Configure where alerts are sent:
- Slack
- PagerDuty
- Opsgenie
- Webhooks
Provisioning#
Automate Grafana configuration with provisioning files:
1# datasources.yml2apiVersion: 13datasources:4 - name: Prometheus5 type: prometheus6 url: http://prometheus:90907 isDefault: true89 - name: Loki10 type: loki11 url: http://loki:31001# dashboards.yml2apiVersion: 13providers:4 - name: default5 folder: ''6 type: file7 options:8 path: /var/lib/grafana/dashboardsIntegration with DevOps Hub#
Visualize DevOps Hub pipeline metrics in Grafana:
- Add DevOps Hub as a data source
- Import the DevOps Hub dashboard template
- Configure variables for your projects
1datasources:2 - name: DevOps Hub3 type: prometheus4 url: https://metrics.assistance.bg5 basicAuth: true6 basicAuthUser: $DEVOPSHUB_PROJECT_ID7 secureJsonData:8 basicAuthPassword: $DEVOPSHUB_API_KEY