Grafana is the open-source observability platform that visualizes metrics from Prometheus, PostgreSQL, Elasticsearch, and 100+ data sources. Its API lets you create dashboards, alerts, and data sources programmatically.
What Is Grafana?
Grafana is the industry standard for monitoring dashboards. Used by NASA, eBay, and Bloomberg to visualize everything from server metrics to business KPIs.
The Grafana API
Authentication
export GRAFANA_URL="http://localhost:3000"
export GRAFANA_TOKEN="your-api-key"
# Create API key: Grafana UI > Administration > API Keys
Create a Dashboard
curl -s -X POST "$GRAFANA_URL/api/dashboards/db" \
-H "Authorization: Bearer $GRAFANA_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"dashboard": {
"title": "Server Metrics",
"panels": [{
"title": "CPU Usage",
"type": "timeseries",
"targets": [{"expr": "rate(node_cpu_seconds_total{mode=\"user\"}[5m])"}],
"gridPos": {"h": 8, "w": 12, "x": 0, "y": 0}
}]
},
"overwrite": false
}'
Add Data Sources
# Add Prometheus
curl -s -X POST "$GRAFANA_URL/api/datasources" \
-H "Authorization: Bearer $GRAFANA_TOKEN" \
-H "Content-Type: application/json" \
-d '{"name": "Prometheus", "type": "prometheus", "url": "http://prometheus:9090", "access": "proxy"}'
# Add PostgreSQL
curl -s -X POST "$GRAFANA_URL/api/datasources" \
-H "Authorization: Bearer $GRAFANA_TOKEN" \
-H "Content-Type: application/json" \
-d '{"name": "PostgreSQL", "type": "postgres", "url": "postgres:5432", "database": "mydb", "user": "grafana", "secureJsonData": {"password": "secret"}}'
Create Alerts
curl -s -X POST "$GRAFANA_URL/api/v1/provisioning/alert-rules" \
-H "Authorization: Bearer $GRAFANA_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"title": "High CPU Alert",
"condition": "A",
"data": [{"refId": "A", "queryType": "", "model": {"expr": "rate(node_cpu_seconds_total[5m]) > 0.9"}}],
"for": "5m"
}'
Query Data
import requests
from datetime import datetime, timedelta
GRAFANA_URL = "http://localhost:3000"
TOKEN = "your-token"
def query_prometheus(expr, hours_back=24):
end = datetime.now()
start = end - timedelta(hours=hours_back)
resp = requests.get(
f"{GRAFANA_URL}/api/ds/query",
headers={"Authorization": f"Bearer {TOKEN}"},
json={
"queries": [{
"datasource": {"type": "prometheus"},
"expr": expr,
"range": True
}],
"from": str(int(start.timestamp() * 1000)),
"to": str(int(end.timestamp() * 1000))
}
)
return resp.json()
result = query_prometheus('up{job="api-server"}')
print(f"Data points: {len(result['results']['A']['frames'])}")
Grafana Ecosystem
- Grafana Cloud: Free tier with 10K metrics, 50GB logs, 50GB traces
- Loki: Log aggregation (like ELK but simpler)
- Tempo: Distributed tracing
- Mimir: Long-term metrics storage
- k6: Load testing
Getting Started
# Docker
docker run -d -p 3000:3000 grafana/grafana
# Open http://localhost:3000 (admin/admin)
Monitoring scraping jobs? Scrapfly provides built-in dashboards for your web scraping. Email spinov001@gmail.com for monitoring + scraping setups.
Top comments (0)