Introduction
Grafana dashboards are not displaying data. Panels show "No data" errors, dashboards fail to load completely, or visualizations are empty despite data existing in the data source.
Symptoms
Panel error:
No data
Error: Bad GatewayDashboard loading error:
Failed to load dashboard
Error: Dashboard not foundQuery error:
Error querying datasource
rpc error: code = Unavailable desc = connection refusedCommon Causes
- 1.Data source disconnected - Prometheus, MySQL, or other source unreachable
- 2.Query timeout - Queries taking too long to execute
- 3.Dashboard JSON corrupted - Dashboard configuration invalid
- 4.Permission issue - User lacks view permissions
- 5.Grafana service down - Grafana process not running
- 6.Browser cache - Cached broken dashboard state
- 7.Plugin missing - Required visualization plugin not installed
Step-by-Step Fix
Step 1: Check Grafana Service Status
```bash # Check Grafana service: systemctl status grafana-server
# Check process: ps aux | grep grafana
# Check port: ss -tlnp | grep 3000
# Start if not running: systemctl start grafana-server
# Check Grafana logs: journalctl -u grafana-server -f
# Check Grafana health: curl -s http://localhost:3000/api/health | jq ```
Step 2: Check Data Source Connectivity
```bash # List data sources: curl -s http://admin:admin@localhost:3000/api/datasources | jq '.[] | {id: .id, name: .name, type: .type}'
# Test specific data source: curl -s http://admin:admin@localhost:3000/api/datasources/proxy/1/api/v1/query?query=up | jq
# Check data source health via API: curl -s http://admin:admin@localhost:3000/api/datasources/1/health | jq
# Expected: # {"status": "OK", "message": "Data source is working"}
# Check data source config: cat /etc/grafana/provisioning/datasources/datasources.yaml ```
Step 3: Check Panel Query Errors
```bash # Query Prometheus: curl -s 'http://localhost:3000/api/datasources/proxy/1/api/v1/query?query=up' | jq
# Check for query timeout: journalctl -u grafana-server | grep -i "timeout"
# Test query with range: curl -s 'http://localhost:3000/api/datasources/proxy/1/api/v1/query_range?query=up&start=1704067200&end=1704070800&step=15s' | jq
# Test in Prometheus directly: curl -s 'http://prometheus:9090/api/v1/query?query=your_metric' | jq ```
Step 4: Check Dashboard Configuration
```bash # List all dashboards: curl -s http://admin:admin@localhost:3000/api/search?type=dash-db | jq '.[] | {id: .id, title: .title, uid: .uid}'
# Get specific dashboard: curl -s http://admin:admin@localhost:3000/api/dashboards/uid/dashboard-uid | jq
# Validate dashboard JSON: curl -s http://admin:admin@localhost:3000/api/dashboards/uid/dashboard-uid > dashboard.json jq '.' dashboard.json
# Check provisioning files: ls /etc/grafana/provisioning/dashboards/ cat /etc/grafana/provisioning/dashboards/dashboards.yaml ```
Step 5: Check User Permissions
```bash # Check user permissions: curl -s http://admin:admin@localhost:3000/api/org/users | jq '.[] | {login: .login, role: .role}'
# Check current user: curl -s http://admin:admin@localhost:3000/api/user | jq
# Check dashboard permissions: curl -s http://admin:admin@localhost:3000/api/dashboards/uid/dashboard-uid/permissions | jq
# Permission levels: # 1 = View # 2 = Edit # 4 = Admin ```
Step 6: Check Grafana Plugins
```bash # List installed plugins: curl -s http://admin:admin@localhost:3000/api/plugins | jq '.[] | {id: .id, type: .type, enabled: .enabled}'
# Check plugin status: grafana-cli plugins ls
# Install missing plugin: grafana-cli plugins install grafana-piechart-panel
# Restart Grafana: systemctl restart grafana-server
# Update plugins: grafana-cli plugins update-all ```
Step 7: Check Time Range and Variables
```bash # Check default time range: curl -s http://admin:admin@localhost:3000/api/dashboards/uid/dashboard-uid | jq '.dashboard.time'
# Expected: # {"from": "now-6h", "to": "now"}
# Check dashboard variables: curl -s http://admin:admin@localhost:3000/api/dashboards/uid/dashboard-uid | jq '.dashboard templating.list'
# Test variable query: curl -s 'http://localhost:3000/api/datasources/proxy/1/api/v1/label/__name__/values' | jq ```
Step 8: Clear Browser Cache and State
```bash # Browser issues can cause dashboard loading errors
# Steps in browser: # 1. Clear Grafana cookies # 2. Clear browser cache # 3. Hard refresh: Ctrl+Shift+R # 4. Try incognito/private mode
# Reset user password if needed: grafana-cli admin reset-admin-password newpassword
# Check for browser errors: # In browser: F12 -> Console tab # Look for JavaScript errors ```
Step 9: Check Grafana Database
```bash # Check database status: curl -s http://localhost:3000/api/health | jq '.database' // "ok"
# If using SQLite: ls /var/lib/grafana/grafana.db sqlite3 /var/lib/grafana/grafana.db "SELECT COUNT(*) FROM dashboard;"
# If using PostgreSQL: psql -h grafana-db -U grafana -d grafana -c "SELECT COUNT(*) FROM dashboard;"
# If using MySQL: mysql -h grafana-db -u grafana -p -e "SELECT COUNT(*) FROM grafana.dashboard;"
# Grafana database config: cat /etc/grafana/grafana.ini | grep -A 10 "[database]" ```
Step 10: Verify and Monitor Dashboard
```bash # Check Grafana health: curl -s http://localhost:3000/api/health | jq
# Test data source: curl -s http://admin:admin@localhost:3000/api/datasources/1/health | jq
# Monitor Grafana logs: journalctl -u grafana-server -f ```
Grafana Dashboard Checklist
| Check | Command | Expected |
|---|---|---|
| Grafana health | /api/health | database: ok |
| Data source health | /api/datasources/X/health | status: OK |
| Dashboard JSON | /api/dashboards/uid/X | Valid JSON |
| User permissions | /api/dashboards/uid/X/permissions | View/Edit |
| Plugins installed | grafana-cli plugins ls | Required plugins |
Verification
```bash # 1. Check Grafana health curl -s http://localhost:3000/api/health | jq // {"database":"ok","version":"..."}
# 2. Test data source curl -s http://admin:admin@localhost:3000/api/datasources/1/health | jq // {"status":"OK"}
# 3. Load dashboard curl -s http://admin:admin@localhost:3000/api/dashboards/uid/dashboard-uid | jq '.meta.status' // "success"
# 4. Test query curl -s 'http://localhost:3000/api/datasources/proxy/1/api/v1/query?query=up' | jq '.status' // "success" ```
Related Issues
- [Fix Grafana Data Source Connection Failed](/articles/fix-grafana-data-source-connection-failed)
- [Fix Prometheus Scrape Error](/articles/fix-prometheus-scrape-error)
Related Articles
- [WordPress troubleshooting: Fix IAM Timeout Error - Complete Trouble](fix-iam-timeout-error)
- [Technical troubleshooting: Fix Cloudwatch Alarm Not Triggering Issue in Monit](cloudwatch-alarm-not-triggering)
- [Fix Datadog Agent Not Sending Metrics Issue in Monitoring](datadog-agent-not-sending-metrics)
- [Fix Elasticsearch Cluster Red Yellow Status Issue in Monitoring](elasticsearch-cluster-red-yellow-status)
- [Fix Alertmanager Notification Failed](fix-alertmanager-notification-failed)
<script type="application/ld+json"> { "@context": "https://schema.org", "@type": "TechArticle", "headline": "Fix Grafana Dashboard Not Loading", "description": "Troubleshoot Grafana dashboard not loading. Check data source, queries, configuration.", "url": "https://www.fixwikihub.com/fix-grafana-dashboard-not-loading", "publisher": { "@type": "Organization", "name": "FixWikiHub", "url": "https://www.fixwikihub.com" }, "author": { "@type": "Person", "name": "FixWikiHub Editorial Team" }, "datePublished": "2026-04-11T05:10:18.180Z", "dateModified": "2026-04-11T05:10:18.180Z" } </script>