Token导航 LogoToken导航TokenDH.com
前端设计操作浏览器github未标认证来源可访问许可证需确认审计提醒

build-grafana-dashboards构建 grafana 仪表板

Agent Skill

build-grafana-dashboards 用于处理 GitHub 仓库、Issue、Pull Request 和代码协作信息,适合在 Codex、Claude、Cursor、Gemini CLI 中需要围绕仓库状态、代码变更或协作事项进行整理时使用。可结合来源仓库、安装命令和原始 README 继续核验具体用法。安装前建议确认权限范围、维护状态,以及是否会触发联网、命令执行或文件读写。

总安装

420

周安装

17

GitHub Stars

12

下载量

132
CodexClaudeCursorGemini CLI

安装说明

本站只整理中文说明和来源信息,不托管安装包,也不代用户安装。

GitHub

来源数

2

许可证

unknown

最后核验

2026-05-01

来源状态

来源可访问

安装方式

通过对话安装

复制提示词发给支持本地命令或 Skills 的 AI 助手,先确认命令和权限,再让它执行。

请帮我安装这个 Agent Skill:build-grafana-dashboards(构建 grafana 仪表板)
来源仓库:https://github.com/pjt222/development-guides
仓库路径:skills/build-grafana-dashboards
安装命令:
npx skills add https://github.com/pjt222/development-guides --skill build-grafana-dashboards
安装前请先检查当前环境是否支持对应 CLI,并向我确认将要执行的命令、安装目录、联网范围和文件读写权限;确认后再执行。

命令行安装

复制命令到本机终端执行。该命令会通过 npx skills 从第三方来源获取 Skill;本站只展示命令,不托管安装包,也不自动执行。

skills.shnpx skills
npx skills add https://github.com/pjt222/development-guides --skill build-grafana-dashboards

简介

标准化 Grafana 仪表板设计与版本化部署流程。

  • 支持 Prometheus/Loki 等多数据源可视化配置。
  • 提供模板变量与层级钻取功能,提升运维效率。
  • 推荐采用基础设施即代码方式管理 dashboard JSON 文件。
  • build-grafana-dashboards 属于前端设计类 Skill,可作为该场景下的辅助能力补充。

SKILL.md

Build Grafana Dashboards

Design and deploy Grafana dashboards with best practices for maintainability, reusability, and version control.

When to Use

  • Creating visual representations of Prometheus, Loki, or other data source metrics
  • Building operational dashboards for SRE teams and incident responders
  • Establishing executive-level reporting dashboards for SLO compliance
  • Migrating dashboards from manual creation to version-controlled provisioning
  • Standardizing dashboard layouts across teams with template variables
  • Creating drill-down experiences from high-level overviews to detailed metrics

Inputs

  • Required: Data source configuration (Prometheus, Loki, Tempo, etc.)
  • Required: Metrics or logs to visualize with their query patterns
  • Optional: Template variables for multi-service or multi-environment views
  • Optional: Existing dashboard JSON for migration or modification
  • Optional: Annotation queries for event correlation (deployments, incidents)

Procedure

See Extended Examples for complete configuration files and templates.

Step 1: Design Dashboard Structure

Plan dashboard layout and organization before building panels.

Create a dashboard specification document:

# Service Overview Dashboard

## Purpose
Real-time operational view for on-call engineers monitoring the API service.

## Rows
1. High-Level Metrics (collapsed by default)
   - Request rate, error rate, latency (RED metrics)
   - Service uptime, instance count
2. Detailed Metrics (expanded by default)
   - Per-endpoint latency breakdown
   - Error rate by status code
   - Database connection pool status
3. Resource Utilization
   - CPU, memory, disk usage per instance
   - Network I/O rates
4. Logs (collapsed by default)
   - Recent errors from Loki
   - Alert firing history

## Variables
- `environment`: production, staging, development
- `instance`: all instances or specific instance selection
- `interval`: aggregation window (5m, 15m, 1h)

## Annotations
- Deployment events from CI/CD system
- Alert firing/resolving events

Key design principles:

  • Most important metrics first: Critical metrics at the top, details below
  • Consistent time ranges: Synchronize time across all panels
  • Drill-down paths: Link from high-level to detailed dashboards
  • Responsive layout: Use rows and panel widths that work on various screens

Expected: Clear dashboard structure documented, stakeholders aligned on metrics and layout priorities.

On failure:

  • Conduct dashboard design review with end users (SREs, developers)
  • Benchmark against industry standards (USE method, RED method, Four Golden Signals)
  • Review existing dashboards in team for consistency patterns

Step 2: Create Dashboard with Template Variables

Build the dashboard foundation with reusable variables for filtering.

Create dashboard JSON structure (or use UI, then export):

{
  "dashboard": {
    "title": "API Service Overview",
    "uid": "api-service-overview",
    "version": 1,
    "timezone": "browser",
    "editable": true,
    "graphTooltip": 1,
    "time": {
      "from": "now-6h",
      "to": "now"
    },
    "refresh": "30s",
    "templating": {
      "list": [
        {
          "name": "environment",
          "type": "query",
          "datasource": "Prometheus",
          "query": "label_values(up{job=\"api-service\"}, environment)",
          "multi": false,
          "includeAll": false,
          "refresh": 1,
          "sort": 1,
          "current": {
            "selected": false,
            "text": "production",
            "value": "production"
          }
        },
        {
          "name": "instance",
          "type": "query",
          "datasource": "Prometheus",
          "query": "label_values(up{job=\"api-service\",environment=\"$environment\"}, instance)",
          "multi": true,
          "includeAll": true,
          "refresh": 1,
          "allValue": ".*",
          "current": {
            "selected": true,
            "text": "All",
            "value": "$__all"
          }
        },
        {
          "name": "interval",
          "type": "interval",
          "options": [
            {"text": "1m", "value": "1m"},
            {"text": "5m", "value": "5m"},
            {"text": "15m", "value": "15m"},
            {"text": "1h", "value": "1h"}
          ],
          "current": {
            "text": "5m",
            "value": "5m"
          },
          "auto": false
        }
      ]
    },
    "annotations": {
      "list": [
        {
          "name": "Deployments",
          "datasource": "Prometheus",
          "enable": true,
          "expr": "changes(app_version{job=\"api-service\",environment=\"$environment\"}[5m]) > 0",
          "step": "60s",
          "iconColor": "rgba(0, 211, 255, 1)",
          "tagKeys": "version"
        }
      ]
    }
  }
}

Variable types and use cases:

  • Query variables: Dynamic lists from data source (label_values(), query_result())
  • Interval variables: Aggregation windows for queries
  • Custom variables: Static lists for non-metric selections
  • Constant variables: Shared values across panels (data source names, thresholds)
  • Text box variables: Free-form input for filtering

Expected: Variables populate correctly from data source, cascading filters work (environment filters instances), default selections appropriate.

On failure:

  • Test variable queries independently in Prometheus UI
  • Check for circular dependencies (variable A depends on B depends on A)
  • Verify regex patterns in allValue field for multi-select variables
  • Review variable refresh settings (on dashboard load vs on time range change)

Step 3: Build Visualization Panels

Create panels for each metric with appropriate visualization types.

Time series panel (request rate):

{
  "type": "timeseries",
  "title": "Request Rate",
  "gridPos": {"h": 8, "w": 12, "x": 0, "y": 0},
  "targets": [
    {
      "expr": "sum(rate(http_requests_total{job=\"api-service\",environment=\"$environment\",instance=~\"$instance\"}[$interval])) by (method)",
      "legendFormat": "{{method}}",
      "refId": "A"
    }
  ],
  "fieldConfig": {
    "defaults": {
      "unit": "reqps",
      "color": {
        "mode": "palette-classic"
      },
      "custom": {
        "drawStyle": "line",
        "lineInterpolation": "smooth",
        "fillOpacity": 10,
        "spanNulls": true
      },
      "thresholds": {
        "mode": "absolute",
        "steps": [
          {"value": null, "color": "green"},
          {"value": 1000, "color": "yellow"},
          {"value": 5000, "color": "red"}
        ]
      }
    }
  },
  "options": {
    "tooltip": {
      "mode": "multi",
      "sort": "desc"
    },
    "legend": {
      "displayMode": "table",
      "placement": "right",
      "calcs": ["mean", "max", "last"]
    }
  }
}

Stat panel (error rate):

{
  "type": "stat",
  "title": "Error Rate",
  "gridPos": {"h": 4, "w": 6, "x": 12, "y": 0},
  "targets": [
    {
# ... (see EXAMPLES.md for complete configuration)

Heatmap panel (latency distribution):

{
  "type": "heatmap",
  "title": "Request Duration Heatmap",
  "gridPos": {"h": 8, "w": 12, "x": 0, "y": 8},
  "targets": [
    {
# ... (see EXAMPLES.md for complete configuration)

Panel selection guide:

  • Time series: Trends over time (rates, counts, durations)
  • Stat: Single current value with threshold coloring
  • Gauge: Percentage values (CPU, memory, disk usage)
  • Bar gauge: Comparing multiple values at a point in time
  • Heatmap: Distribution of values over time (latency percentiles)
  • Table: Detailed breakdown of multiple metrics
  • Logs: Raw log lines from Loki with filtering

Expected: Panels render correctly with data, visualizations match intended metric types, legends descriptive, thresholds highlight problems.

On failure:

  • Test queries in Explore view with same time range and variables
  • Check for metric name typos or incorrect label filters
  • Verify aggregation functions match metric type (rate for counters, avg for gauges)
  • Review unit configurations (bytes, seconds, requests per second)
  • Enable "Show query inspector" to debug empty results

Step 4: Configure Rows and Layout

Organize panels into collapsible rows for logical grouping.

{
  "panels": [
    {
      "type": "row",
      "title": "High-Level Metrics",
      "collapsed": false,
# ... (see EXAMPLES.md for complete configuration)

Layout best practices:

  • Grid is 24 units wide, each panel specifies w (width) and h (height)
  • Use rows to group related panels, collapse less critical sections by default
  • Place most critical metrics in first visible area (y=0-8)
  • Maintain consistent panel heights within rows (typically 4, 8, or 12 units)
  • Use full width (24) for time series, half width (12) for comparisons

Expected: Dashboard layout organized logically, rows collapse/expand correctly, panels align visually without gaps.

On failure:

  • Validate gridPos coordinates don't overlap
  • Check that row panels array contains panels (not null)
  • Verify y-coordinates increment logically down the page
  • Use Grafana UI "Edit JSON" to inspect grid positions

Step 5: Add Links and Drill-Downs

Create navigation paths between related dashboards.

Dashboard-level links in JSON:

{
  "links": [
    {
      "title": "Service Details",
      "type": "link",
      "icon": "external link",
# ... (see EXAMPLES.md for complete configuration)

Panel-level data links:

{
  "fieldConfig": {
    "defaults": {
      "links": [
        {
          "title": "View Logs for ${__field.labels.instance}",
# ... (see EXAMPLES.md for complete configuration)

Link variables:

  • $service, $environment: Dashboard template variables
  • ${__field.labels.instance}: Label value from clicked data point
  • ${__from}, ${__to}: Current dashboard time range
  • $__url_time_range: Encoded time range for URL

Expected: Clicking panel elements or dashboard links navigates to related views with context preserved (time range, variables).

On failure:

  • URL encode special characters in query parameters
  • Test links with various variable selections (All vs specific value)
  • Verify target dashboard UIDs exist and are accessible
  • Check that includeVars and keepTime flags work as expected

Step 6: Set Up Dashboard Provisioning

Version control dashboards as code for reproducible deployments.

Create provisioning directory structure:

mkdir -p /etc/grafana/provisioning/{dashboards,datasources}

Datasource provisioning (/etc/grafana/provisioning/datasources/prometheus.yml):

apiVersion: 1

datasources:
  - name: Prometheus
    type: prometheus
    access: proxy
# ... (see EXAMPLES.md for complete configuration)

Dashboard provisioning (/etc/grafana/provisioning/dashboards/default.yml):

apiVersion: 1

providers:
  - name: 'default'
    orgId: 1
    folder: 'Services'
    type: file
    disableDeletion: false
    updateIntervalSeconds: 30
    allowUiUpdates: true
    options:
      path: /var/lib/grafana/dashboards
      foldersFromFilesStructure: true

Store dashboard JSON files in /var/lib/grafana/dashboards/:

/var/lib/grafana/dashboards/
├── api-service/
│   ├── overview.json
│   └── details.json
├── database/
│   └── postgres.json
└── infrastructure/
    ├── nodes.json
    └── kubernetes.json

Using Docker Compose:

version: '3.8'
services:
  grafana:
    image: grafana/grafana:10.2.0
    ports:
      - "3000:3000"
    volumes:
      - ./grafana/provisioning:/etc/grafana/provisioning
      - ./grafana/dashboards:/var/lib/grafana/dashboards
    environment:
      - GF_SECURITY_ADMIN_PASSWORD=admin
      - GF_USERS_ALLOW_SIGN_UP=false
      - GF_AUTH_ANONYMOUS_ENABLED=true
      - GF_AUTH_ANONYMOUS_ORG_ROLE=Viewer

Expected: Dashboards automatically loaded on Grafana startup, changes to JSON files reflected after update interval, version control tracks dashboard changes.

On failure:

  • Check Grafana logs: docker logs grafana | grep -i provisioning
  • Verify JSON syntax: python -m json.tool dashboard.json
  • Ensure file permissions allow Grafana to read: chmod 644 *.json
  • Test with allowUiUpdates: false to prevent UI modifications
  • Validate provisioning config: curl http://localhost:3000/api/admin/provisioning/dashboards/reload -X POST -H "Authorization: Bearer $GRAFANA_API_KEY"

Validation

  • Dashboard loads without errors in Grafana UI
  • All template variables populate with expected values
  • Variable cascading works (selecting environment filters instances)
  • Panels display data for configured time ranges
  • Panel queries use variables correctly (no hardcoded values)
  • Thresholds highlight problem states appropriately
  • Legend formatting descriptive and not cluttered
  • Annotations appear for relevant events
  • Links navigate to correct dashboards with context preserved
  • Dashboard provisioned from JSON file (version controlled)
  • Responsive layout works on different screen sizes
  • Tooltip and hover interactions provide useful context

Common Pitfalls

  • Variable not updating panels: Ensure queries use $variable syntax, not hardcoded values. Check variable refresh settings.
  • Empty panels with correct query: Verify time range includes data points. Check scrape interval vs aggregation window (5m rate needs >5m of data).
  • Legend too verbose: Use legendFormat to show only relevant labels, not full metric name. Example: {{method}} - {{status}} instead of default.
  • Inconsistent time ranges: Set dashboard time sync so all panels share the same time window. Use "Sync cursor" for correlated investigation.
  • Performance issues: Avoid queries returning high cardinality series (>1000). Use recording rules or pre-aggregation. Limit time ranges for expensive queries.
  • Dashboard drift: Without provisioning, manual UI changes create version control conflicts. Use allowUiUpdates: false in production.
  • Missing data links: Data links require exact label names. Use ${__field.labels.labelname} carefully, verify label exists in query result.
  • Annotation overload: Too many annotations clutter the view. Filter annotations by importance or use separate annotation tracks.

Related Skills

  • setup-prometheus-monitoring - Configure Prometheus data sources that feed Grafana dashboards
  • configure-log-aggregation - Set up Loki for log panel queries and log-based annotations
  • define-slo-sli-sla - Visualize SLO compliance and error budgets with Grafana stat and gauge panels
  • instrument-distributed-tracing - Add trace ID links from metrics panels to Tempo trace views

适合场景

01

用户想查找某类 Agent Skill 时

02

需要根据任务场景推荐可安装能力包时

03

需要对比不同来源的安装命令和来源信息时

能力概览

能力 1

按任务关键词查找相关 Skills

能力 2

展示可复制的安装命令

能力 3

保留来源站点、仓库和原始说明,方便继续核验

能力 4

展示第三方安全扫描或审计结果

安装后应在对应宿主中按原始 README 的触发条件使用;具体调用方式请以来源页面和 README 为准。

平台分布

Codex

36.84%
按下载量换算49

Claude

27.82%
按下载量换算37

Cursor

18.61%
按下载量换算25

Gemini CLI

9.41%
按下载量换算12

安全审计

Gen Agent Trust Hub

通过

Socket

通过

Snyk

可疑

权限和风险

操作浏览器

该 Skill 可能涉及浏览器控制能力,使用时可能读取或操作网页内容,需要在受控环境中确认权限边界。

安装前确认

本站仅展示第三方公开信息,不托管安装包,不提供自动安装或运行环境。安装前应自行审查源码、依赖和命令行为。来源安全扫描存在 warning/failed 结果,不能写成本站确认安全。当前只有一个来源,正式发布前建议补源仓库或其他目录站核验。

来源信息

继续浏览同类 Skills