Skip to content
DevOps AI ToolKit
Newsletter
All guides
AI for Grafana By James Joyner IV · · 8 min read

Grafana Error Guide: 'Panel plugin not found: <id>' — Fix Missing or Removed Plugins

Fix 'Panel plugin not found' in Grafana: diagnose uninstalled or removed panel plugins, unsigned plugin blocks, angular deprecation, and version upgrade breakage.

  • #grafana
  • #troubleshooting
  • #errors
  • #plugins

Overview

Every Grafana panel is rendered by a plugin, identified by a plugin ID (timeseries, piechart, grafana-worldmap-panel). When a dashboard references a plugin that is not installed, has been removed from Grafana core, or was blocked at startup, the panel cannot render.

The literal error shown in place of the panel:

Panel plugin not found: grafana-worldmap-panel
Panel plugin not found: natel-discrete-panel

You may also see it in the log at startup as a plugin that failed to load. The panel area is replaced with a placeholder while the rest of the dashboard renders normally — the tell that this is a plugin availability problem, not a data problem.

Symptoms

  • A single panel shows “Panel plugin not found: ” while other panels work.
  • After a Grafana upgrade, previously working panels break (deprecated/removed plugins).
  • A freshly imported community dashboard has broken panels for exotic visualizations.
  • The plugins list does not contain the referenced ID.

Common Root Causes

1. Plugin never installed

The dashboard uses a third-party panel (e.g. grafana-worldmap-panel, grafana-piechart-panel on old versions) that was never installed on this instance.

2. Plugin removed from core in an upgrade

Grafana promoted or removed built-ins across versions; some legacy Angular panels were dropped, so upgrading breaks dashboards built on them.

3. Unsigned plugin blocked

Grafana refuses to load unsigned plugins by default, so an unsigned panel silently fails to register and reads as “not found.”

4. Angular plugin disabled

Newer Grafana disables Angular-based plugins by default (angular_support_enabled = false), so older Angular panels never load.

5. Wrong plugins directory / permissions

The plugin is installed in a path Grafana does not scan, or the container image lacks it.

Diagnostic Workflow

Step 1: Identify the missing plugin ID

The ID is in the error text and in the panel JSON ("type": "grafana-worldmap-panel"). Confirm what is installed:

grafana-cli plugins ls
# Container / Kubernetes
kubectl exec deploy/grafana -n monitoring -- grafana-cli plugins ls
curl -s -H "Authorization: Bearer $GRAFANA_TOKEN" \
  http://localhost:3000/api/plugins | jq '.[] | select(.type=="panel") | .id'

Step 2: Check the startup log for load/signature errors

sudo journalctl -u grafana-server --no-pager | grep -iE "plugin|signature|angular" | tail -20
kubectl logs deploy/grafana -n monitoring | grep -iE "plugin|unsigned|angular" | tail -20
grep -iE "plugin|signature" /var/log/grafana/grafana.log | tail -20

Look for plugin disabled due to signature, Angular support is disabled, or error loading plugin.

Step 3: Install the missing plugin

grafana-cli plugins install grafana-worldmap-panel
sudo systemctl restart grafana-server
# Verify
grafana-cli plugins ls | grep worldmap

In Kubernetes, add it to the GF_INSTALL_PLUGINS env var or bake it into the image so it survives pod restarts.

Step 4: Handle unsigned or Angular plugins deliberately

# grafana.ini
[plugins]
allow_loading_unsigned_plugins = my-custom-panel

[angular]
angular_support_enabled = true   # only if a legacy Angular panel is required

Prefer migrating to a maintained, signed replacement over re-enabling Angular long term.

Example Root Cause Analysis

After upgrading Grafana, a NOC dashboard shows:

Panel plugin not found: grafana-worldmap-panel

grafana-cli plugins ls does not list it, and the log shows nothing at startup — because the plugin was never installed on the new instance (the old one had it manually installed and the upgrade used a clean image).

Fix: grafana-cli plugins install grafana-worldmap-panel and restart. Since Worldmap is a deprecated Angular plugin, the durable fix is to rebuild the panel as a native Geomap panel (signed, React-based) so the next upgrade cannot break it again. The root cause was an install that lived outside version control and did not carry over.

Prevention Best Practices

  • Declare required plugins in config management or GF_INSTALL_PLUGINS, never install ad hoc; see more Grafana guides.
  • Bake plugins into your container image so pods do not depend on runtime downloads.
  • Before upgrading Grafana, cross-check every dashboard’s panel type against the target version’s removed/deprecated list.
  • Migrate legacy Angular panels (Worldmap, Discrete, old Piechart) to native successors (Geomap, State timeline, Pie chart) proactively.
  • Keep allow_loading_unsigned_plugins scoped to specific IDs, not a blanket enable.

Quick Command Reference

# What is installed vs. what the panel needs
grafana-cli plugins ls
curl -s -H "Authorization: Bearer $GRAFANA_TOKEN" \
  http://localhost:3000/api/plugins | jq '.[] | select(.type=="panel") | .id'

# Startup plugin/signature/angular errors
sudo journalctl -u grafana-server | grep -iE "plugin|signature|angular" | tail -20
kubectl logs deploy/grafana -n monitoring | grep -iE "plugin|unsigned" | tail -20

# Install and restart
grafana-cli plugins install grafana-worldmap-panel
sudo systemctl restart grafana-server

# Kubernetes: persist via env
# GF_INSTALL_PLUGINS=grafana-worldmap-panel

Conclusion

“Panel plugin not found: ” is an availability problem, not a data problem — the visualization’s code is not registered on this instance. Diagnose it directly:

  1. Read the plugin ID from the error and compare with grafana-cli plugins ls.
  2. Check the startup log for signature or Angular-disabled blocks.
  3. Install/persist the plugin via config management or the image.
  4. Migrate deprecated Angular panels to signed native successors so upgrades stay clean.

Manage plugins declaratively and this error stops surviving upgrades and pod restarts.

Free download · 368-page PDF

Download the Free 500-Prompt DevOps AI Toolkit

500 battle-tested, copy-paste AI prompts engineered by a senior systems engineer — every one with fill-in placeholders and safety/back-out notes. Drop your email and it's yours.

  • 500 prompts: Linux · Kubernetes · Terraform · OpenStack · GitLab · Docker · Monitoring · Incident Response
  • Instant PDF download — yours free, forever
  • Plus one practical AI-workflow email a week (no spam)

Single opt-in · unsubscribe anytime · no spam.