Kentik Plugin for Grafana v2.0
We're shipping v2.0 of the Kentik Grafana plugin, a ground-up rebuild that opens up access to more of what you use in Data Explorer via Grafana. If you want to skip ahead to the migration guide see the repo here.
Here's what's new and what you need to know.
Dashboard performance, fundamentally improved
v2.0 introduces a batch query scheduler that combines all panels on a dashboard into a single API request to Kentik's TopXData endpoint. If the batch fails for any reason, we fall back to individual queries, so nothing break s.
Portal drilldown, one click from Grafana to Kentik
Every Kentik panel now includes a link icon that opens the Kentik portal scoped to the exact same query, time range, and filters you're looking at in Grafana.
The portal URL is derived automatically from your region configuration. US, EU, and custom-hosted environments all work out of the box.
300+ dimensions across 17 categories
The dimension library has been significantly expanded. In addition to the existing general, routing, geo, and cloud dimensions, v2.0 adds:
- Kubernetes: src_pod, dst_namespace, src_workload, dst_node, and more. Group traffic by Kubernetes metadata collected by the Kentik kube agent.
- OTT (Over-The-Top): classify traffic by streaming service and content provider.
- OCI: Oracle Cloud Infrastructure resource dimensions.
- Expanded SNMP/ST: additional interface counters, device metrics, and vendor-specific fields.
The full dimension set spans AWS, Azure, GCP, OCI, Kubernetes, DNS, HTTP, routing, geo, SNMP/ST, vendor-specific, and more.
Four bundled dashboards
v2.0 ships four dashboards available for one-click import from the datasource configuration page:
Dashboard | What it covers |
|---|---|
Home | Landing page with links to all Kentik dashboards |
Top Talkers | Highest-volume sources and destinations by IP, ASN, port, and protocol. Useful for capacity planning and abuse detection |
Network Health (OSI) | Layer-by-layer health: physical (SNMP errors, CPU, memory), data link (VLANs, MACs), network (IPs, ASNs, geo, IPv4/v6), transport (protocols, ports, packets/s), and application layers |
Site & Device Overview | Per-site traffic breakdown with protocol heatmap, device flow activity (status history), and site bar chart comparison |
These rebuild and expand on the dashboards bundled with v1.7.
Richer query editor
Several quality-of-life improvements to the query editor:
- Top-N control: set the number of returned results per panel.
- Filter builder UI: add WHERE-clause-style filters with dimension/operator/value pickers and AND/OR conjunction toggle.
- Multi-dimension support: up to 8 dimensions per query, grouped as a combination (like a SQL GROUP BY).
Smart series labeling with Alias By
One of the most common frustrations with v1.7 was unreadable series labels. A panel grouping by source AS would produce legend entries like 15169, which is meaningless unless you already know that's Google.
v2.0 introduces a templating system for series labels that we call Alias By. You write a pattern using tokens, and the plugin resolves them against each series in the response.
How it works
Type $ or {{ in the Alias By field and autocomplete drops down with available tokens. There are three kinds:
Syntax | What it does |
|---|---|
{{field_name}} | Primary dimension token. Resolves to the value from the series. Autocomplete inserts this syntax for all dimensions. |
$col / $metric_group | Built-in tokens for the aggregate label and metric group name |
$dashboard_var | Grafana dashboard variables, resolved at query time |
The key difference between {{...}} and bare $ is per-series resolution. The alias engine runs in two passes:
- Grafana template variables ($var) are resolved first into static text.
- Then {{...}} tokens are resolved against each individual series row.
This means {{$dimension}} works as an indirection: the variable selects the field name, and the braces resolve it per-series. For example, if $dimension is a dashboard variable set to IP_src:
- $dimension resolves to static text IP_src on every legend entry
- {{$dimension}} resolves to {{IP_src}}, then each series gets its own value: 10.0.0.1, 10.0.0.2, etc.
Practical examples
What it does | Syntax | Sample output |
|---|---|---|
Network traffic by AS with the aggregate label | $tag_src_as ($col) | 15169 (Max bits/s) |
Device and interface for capacity planning | {{device}} / {{interface}} | core-router-01 / xe-0/0/1 |
Source to destination AS pairs | $tag_src_as - $tag_dst_as | 15169 - 16509 |
SNMP device metrics with metric group context | $metric_group: $tag_device | SNMP Device CPU (%): core-router-01 |
Geographic context with a static prefix | Prefix: Inbound Alias: `$tag_src_geo_country ($col)` | Inbound United States (Max bits/s) |
Using Grafana dashboard variables | $region: $tag_src_as | us-east: 15169 (when $region = us-east) |
Built-in tokens
Token | Resolves to | Example |
|---|---|---|
$tag_ | Dimension value from the series | $tag_Proto resolves to TCP |
{{field}} | Same, with space/hyphen support | {{Source Port}} resolves to 443 |
$col | Aggregate column label | Max bits/s, 95th Percentile |
$metric_group | Metric group name | SNMP Device CPU (%) |
Intelligent fallback resolution
The alias engine doesn't require exact field name matches. When a token doesn't match a response property directly, it walks through a resolution chain:
- Exact match on the series object
- Case-insensitive match
- Kentik field variants (i_, _name)
- SNMP/ST protocol key matching (e.g. {{device}} resolves against ktappprotocol__snmp_device_metrics__i_device_name)
- Positional extraction from the series key by dimension index
This means you can write {{device}} and it will resolve correctly whether you're querying flow data, SNMP metrics, or streaming telemetry. The plugin figures out the right field automatically.
If a token can't be resolved at all, it's left as-is in the label (e.g. $tag_missing stays $tag_missing), so you can immediately see what needs fixing.
A note on Grafana 13+
If you're running Grafana 13.0 or newer, datasource credential saves may fail with a "Not found" error due to a Grafana API change. We've already identified the fix and v2.0.2 is on the way with full Grafana 13+ compatibility. Until then:
- Grafana 12.x and earlier: v2.0.1 works as expected
- Grafana 13.0+: hold on upgrading or wait for v2.0.2
Get started
New users
If you've never installed the Kentik plugin before:
- Install the datasource: In Grafana, go to Connections > Add new connection, search for "Kentik", and install kentik-connect-datasource.
- Configure the connection: Connections > Data Sources > Kentik. Enter your email and API token.
- Import bundled dashboards: On the datasource page, open the Dashboards tab and click Import for each of the four bundled dashboards.
Existing Kentik Grafana App users
Migrating from the legacy app plugin takes a few minutes and is only needed once:
- Update the bridge: Update your existing kentik-connect-app to v1.8.0. This auto-installs the new kentik-connect-datasource.
- Configure the connection: Connections > Data Sources > Kentik. Enter your email and API token.
- Import bundled dashboards: On the datasource page, open the Dashboards tab and click Import for each of the four bundled dashboards.
- Migrate existing panels: Switch the datasource selector on your existing panels to the new Kentik datasource. Filters and queries carry over automatically.