grafana-dashboard

安装量: 150
排名: #5729

安装

npx skills add https://github.com/aj-geddes/useful-ai-prompts --skill grafana-dashboard

Grafana Dashboard Overview

Design and implement comprehensive Grafana dashboards with multiple visualization types, variables, and drill-down capabilities for operational monitoring.

When to Use Creating monitoring dashboards Building operational insights Visualizing time-series data Creating drill-down dashboards Sharing metrics with stakeholders Instructions 1. Grafana Dashboard JSON { "dashboard": { "title": "Application Performance", "description": "Real-time application metrics", "tags": ["production", "performance"], "timezone": "UTC", "refresh": "30s", "templating": { "list": [ { "name": "datasource", "type": "datasource", "datasource": "prometheus" }, { "name": "service", "type": "query", "datasource": "prometheus", "query": "label_values(requests_total, service)" } ] }, "panels": [ { "id": 1, "title": "Request Rate", "type": "graph", "gridPos": {"x": 0, "y": 0, "w": 12, "h": 8}, "targets": [ { "expr": "sum(rate(requests_total{service=\"$service\"}[5m]))", "legendFormat": "{{ method }}" } ], "yaxes": [ { "format": "rps", "label": "Requests per Second" } ] }, { "id": 2, "title": "Error Rate", "type": "graph", "gridPos": {"x": 12, "y": 0, "w": 12, "h": 8}, "targets": [ { "expr": "sum(rate(requests_total{status_code=~\"5..\",service=\"$service\"}[5m])) / sum(rate(requests_total{service=\"$service\"}[5m]))", "legendFormat": "Error Rate" } ] }, { "id": 3, "title": "Response Latency (p95)", "type": "graph", "gridPos": {"x": 0, "y": 8, "w": 12, "h": 8}, "targets": [ { "expr": "histogram_quantile(0.95, rate(request_duration_seconds_bucket{service=\"$service\"}[5m]))", "legendFormat": "p95" } ] }, { "id": 4, "title": "Active Connections", "type": "stat", "gridPos": {"x": 12, "y": 8, "w": 12, "h": 8}, "targets": [ { "expr": "sum(active_connections{service=\"$service\"})" } ] } ] } }

  1. Grafana Provisioning Configuration

/etc/grafana/provisioning/dashboards/dashboards.yaml

apiVersion: 1

providers: - name: 'Dashboards' orgId: 1 folder: 'Production' type: file disableDeletion: false updateIntervalSeconds: 10 options: path: /var/lib/grafana/dashboards

/etc/grafana/provisioning/datasources/prometheus.yaml

apiVersion: 1

datasources: - name: Prometheus type: prometheus access: proxy orgId: 1 url: http://prometheus:9090 isDefault: true editable: true jsonData: timeInterval: '30s'

  1. Grafana Alert Configuration

/etc/grafana/provisioning/alerting/alerts.yaml

groups: - name: application_alerts interval: 1m rules: - uid: alert_high_error_rate title: High Error Rate condition: B data: - refId: A model: expr: 'sum(rate(requests_total{status_code=~"5.."}[5m]))' - refId: B conditions: - evaluator: params: [0.05] type: gt query: params: [A, 5m, now] for: 5m annotations: description: 'Error rate is {{ $values.A }}' labels: severity: critical team: platform

  1. Grafana API Client // grafana-api-client.js const axios = require('axios');

class GrafanaClient { constructor(baseUrl, apiKey) { this.baseUrl = baseUrl; this.client = axios.create({ baseURL: baseUrl, headers: { 'Authorization': Bearer ${apiKey}, 'Content-Type': 'application/json' } }); }

async createDashboard(dashboard) { const response = await this.client.post('/api/dashboards/db', { dashboard: dashboard, overwrite: true }); return response.data; }

async getDashboard(uid) { const response = await this.client.get(/api/dashboards/uid/${uid}); return response.data; }

async createAlert(alert) { const response = await this.client.post('/api/alerts', alert); return response.data; }

async listDashboards() { const response = await this.client.get('/api/search?query='); return response.data; } }

module.exports = GrafanaClient;

  1. Docker Compose Setup version: '3.8' services: grafana: image: grafana/grafana:latest ports:
    • "3000:3000" environment: GF_SECURITY_ADMIN_PASSWORD: ${GRAFANA_PASSWORD:-admin} GF_USERS_ALLOW_SIGN_UP: 'false' GF_SERVER_ROOT_URL: http://grafana.example.com volumes:
    • ./provisioning:/etc/grafana/provisioning
    • grafana_storage:/var/lib/grafana depends_on:
    • prometheus

prometheus: image: prom/prometheus:latest ports: - "9090:9090" volumes: - ./prometheus.yml:/etc/prometheus/prometheus.yml - prometheus_storage:/prometheus

volumes: grafana_storage: prometheus_storage:

Best Practices ✅ DO Use meaningful dashboard titles Add documentation panels Implement row-based organization Use variables for flexibility Set appropriate refresh intervals Include runbook links in alerts Test alerts before deploying Use consistent color schemes Version control dashboard JSON ❌ DON'T Overload dashboards with too many panels Mix different time ranges without justification Create without runbooks Ignore alert noise Use inconsistent metric naming Set refresh too frequently Forget to configure datasources Leave default passwords Visualization Types Graph: Time-series trends Stat: Single value with thresholds Gauge: Percentage or usage Heatmap: Pattern detection Bar Chart: Category comparison Pie Chart: Composition

返回排行榜