Grafana / Editorial solution guide
The panel and alert disagree
Compare independent query, expression, identity, timing, and unknown-data contracts before assuming that a panel threshold controls alert evaluation.
Read-only knowledge base · No public comments
Recognize the symptoms
A panel is red while the rule is normal or pending, or an alert fires while a stat appears healthy. The difference can follow a reducer, source, timing, or plugin change. A firing rule may also exist without a delivered notification, which is a separate problem.
Understand the likely causes
- The panel and rule can use different data sources, credentials, ranges, reducers, transformations, evaluation intervals, pending periods, or missing-data policies. A source may support interactive rendering but lack the required server-side alert path. Display colors and field mappings do not automatically define the rule’s measurement.
Record both contracts side by side
Capture rule management type, selected Alertmanager scope, Grafana and plugin versions, hosting or edition, source UID, query references, absolute time context, and current evidence freshness. Compare the actual rule definition with the panel’s query and display chain. Do not infer the rule from a screenshot. Keep private query values, credentials, and notification destinations out of shared notes. This guide reads no rule or account and performs no alert preview, test notification, query, or source operation.
Separate range, reduction, and pending time
The offline dictionary comparison finds differences between synthetic panel and rule contracts: reducer, window, and hold duration. It proves only that the supplied settings differ. A current last value and a maximum over a longer window can disagree legitimately; a transient peak may not satisfy a sustained condition. Panel refresh is not the evaluator interval. Review actual supported semantics, including timezone, source delay, and overrides. Do not change every duration to the same number merely to force agreement if the views intentionally answer different decisions.
panel = {"reducer":"last", "window_seconds":300, "hold_seconds":0}
rule = {"reducer":"max", "window_seconds":900, "hold_seconds":120}
differences = sorted(key for key in panel if panel[key] != rule[key])
print("contract_differences", differences)
contract_differences ['hold_seconds', 'reducer', 'window_seconds']
The records are synthetic and not Grafana schema. The script evaluates no condition, pending state, query, or actual alert instance.
Check the server-side path and label identity
Verify that the chosen source and plugin support the rule’s server-side query or expression. Interactive credentials or browser-only processing may not apply to background evaluation. Panel transformations and unit formatting are not automatically reused. Compare label sets and multi-dimensional instance identity, especially after a rename or a disappearing route. Whole-query no data, one missing series, and execution error can have different configured handling. Keep those distinctions rather than mapping every unknown to normal or every gap to an urgent alert.
Repair the intended measurement and then verify delivery
Choose a reviewed measurement correction supported by evidence, or document why the panel and rule intentionally differ. Preserve source scope, units, identity, and missing-data meaning. Only after rule state is understood should notification policy, grouping, suppression, contact integration, and delivery be checked as separate stages. A successful receiver test does not establish policy matching for real alert labels. This guide changes no rule, dashboard, policy, contact point, silence, credential, or account and contacts no person or integration.
Verify the fix
Use known-value cases for normal, threshold, sustained, transient, missing-series, no-data, error, and recovery behavior in a separately authorized isolated integration. Verify exact instance labels and evaluation times. State whether only this local contract comparison ran. A matching screenshot or local arithmetic result cannot establish the supported evaluator, notification path, or production outcome.
Keep it from recurring
- Version panel and alert measurements with explicit source, expression, labels, units, timing, and unknown-state rules. Keep notification tests separate and synthetic unless real contact is authorized. Review plugin upgrades and source-identity changes across both consumers so a display improvement cannot silently weaken a critical alert or conceal lost coverage.