<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Evaluation behavior on Grafana Labs</title><link>https://grafana.com/docs/learning-hub/basic-alerting/04-evaluation/</link><description>Recent content in Evaluation behavior on Grafana Labs</description><generator>Hugo -- gohugo.io</generator><language>en</language><atom:link href="/docs/learning-hub/basic-alerting/04-evaluation/index.xml" rel="self" type="application/rss+xml"/><item><title>How evaluation works</title><link>https://grafana.com/docs/learning-hub/basic-alerting/04-evaluation/10-evaluation-timing/</link><pubDate>Mon, 10 Aug 2026 13:40:40 -0500</pubDate><guid>https://grafana.com/docs/learning-hub/basic-alerting/04-evaluation/10-evaluation-timing/</guid><content><![CDATA[&lt;h2 id=&#34;how-evaluation-works&#34;&gt;How evaluation works&lt;/h2&gt;
&lt;p&gt;The following diagram shows how an alert moves through states.&lt;/p&gt;

&lt;div class=&#34;learning-hub-image&#34;&gt;
  &lt;a href=&#34;lifecycle.svg&#34; title=&#34;Diagram of alert states from Normal through Pending, Alerting, and Recovering&#34;&gt;
    &lt;img
      class=&#34;lazyload d-inline-block&#34;
      data-src=&#34;lifecycle.svg&#34;
      alt=&#34;Diagram of alert states from Normal through Pending, Alerting, and Recovering&#34; width=&#34;800&#34; height=&#34;280&#34;/&gt;
    &lt;div class=&#34;learning-hub-image__zoom&#34;&gt;
      &lt;svg width=&#34;24&#34; height=&#34;24&#34; viewBox=&#34;0 0 24 24&#34; fill=&#34;none&#34; xmlns=&#34;http://www.w3.org/2000/svg&#34;&gt;
        &lt;path d=&#34;M21 21L15 15M17 10C17 13.866 13.866 17 10 17C6.13401 17 3 13.866 3 10C3 6.13401 6.13401 3 10 3C13.866 3 17 6.13401 17 10Z&#34; stroke=&#34;currentColor&#34; stroke-width=&#34;2&#34; stroke-linecap=&#34;round&#34; stroke-linejoin=&#34;round&#34;/&gt;
        &lt;path d=&#34;M10 7V13M7 10H13&#34; stroke=&#34;currentColor&#34; stroke-width=&#34;2&#34; stroke-linecap=&#34;round&#34;/&gt;
      &lt;/svg&gt;
    &lt;/div&gt;
  &lt;/a&gt;
&lt;/div&gt;

&lt;section class=&#34;expand-table-wrapper&#34;&gt;&lt;div class=&#34;responsive-table-wrapper&#34;&gt;
    &lt;table&gt;
      &lt;thead&gt;
          &lt;tr&gt;
              &lt;th&gt;State&lt;/th&gt;
              &lt;th&gt;Condition is:&lt;/th&gt;
          &lt;/tr&gt;
      &lt;/thead&gt;
      &lt;tbody&gt;
          &lt;tr&gt;
              &lt;td&gt;Normal&lt;/td&gt;
              &lt;td&gt;Not met&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Pending&lt;/td&gt;
              &lt;td&gt;Met, pending period has not elapsed&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Alerting&lt;/td&gt;
              &lt;td&gt;Met past the pending period. Notification sent.&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Recovering&lt;/td&gt;
              &lt;td&gt;No longer met, keep firing for period active&lt;/td&gt;
          &lt;/tr&gt;
      &lt;/tbody&gt;
    &lt;/table&gt;
  &lt;/div&gt;
&lt;/section&gt;&lt;p&gt;For more details on alert states and how they function, refer to &lt;a href=&#34;/docs/grafana/latest/alerting/monitor-status/view-alert-state/&#34;&gt;View the state and health of alert rules&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&#34;how-checking-works&#34;&gt;How checking works&lt;/h2&gt;
&lt;p&gt;During &lt;strong&gt;evaluation&lt;/strong&gt;, Grafana checks your alert rule at regular intervals. Three settings control when the rule fires:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Evaluation group:&lt;/strong&gt; Sets how often Grafana checks the alert rules in it. You create one (or reuse an existing one), and give it a name and an interval. That way related rules can share the same schedule, for example a group of related rules checked once a minute.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Pending period:&lt;/strong&gt; How long the condition must persist before the alert fires.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Keep firing for:&lt;/strong&gt; How long the alert stays firing after the condition resolves.&lt;/li&gt;
&lt;/ul&gt;
]]></content><description>&lt;h2 id="how-evaluation-works">How evaluation works&lt;/h2>
&lt;p>The following diagram shows how an alert moves through states.&lt;/p>
&lt;div class="learning-hub-image">
&lt;a href="lifecycle.svg" title="Diagram of alert states from Normal through Pending, Alerting, and Recovering">
&lt;img
class="lazyload d-inline-block"
data-src="lifecycle.svg"
alt="Diagram of alert states from Normal through Pending, Alerting, and Recovering" width="800" height="280"/>
&lt;div class="learning-hub-image__zoom">
&lt;svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
&lt;path d="M21 21L15 15M17 10C17 13.866 13.866 17 10 17C6.13401 17 3 13.866 3 10C3 6.13401 6.13401 3 10 3C13.866 3 17 6.13401 17 10Z" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
&lt;path d="M10 7V13M7 10H13" stroke="currentColor" stroke-width="2" stroke-linecap="round"/>
&lt;/svg>
&lt;/div>
&lt;/a>
&lt;/div>
&lt;section class="expand-table-wrapper">&lt;div class="responsive-table-wrapper">
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>State&lt;/th>
&lt;th>Condition is:&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>Normal&lt;/td>
&lt;td>Not met&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Pending&lt;/td>
&lt;td>Met, pending period has not elapsed&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Alerting&lt;/td>
&lt;td>Met past the pending period. Notification sent.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Recovering&lt;/td>
&lt;td>No longer met, keep firing for period active&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;/div>
&lt;/section>&lt;p>For more details on alert states and how they function, refer to &lt;a href="/docs/grafana/latest/alerting/monitor-status/view-alert-state/">View the state and health of alert rules&lt;/a>.&lt;/p></description></item><item><title>Pending period and keep firing for</title><link>https://grafana.com/docs/learning-hub/basic-alerting/04-evaluation/11-pending-and-keep-firing/</link><pubDate>Mon, 10 Aug 2026 13:40:40 -0500</pubDate><guid>https://grafana.com/docs/learning-hub/basic-alerting/04-evaluation/11-pending-and-keep-firing/</guid><content><![CDATA[&lt;h2 id=&#34;pending-period-and-keep-firing-for&#34;&gt;Pending period and keep firing for&lt;/h2&gt;

&lt;div class=&#34;learning-hub-image&#34;&gt;
  &lt;a href=&#34;lifecycle-highlight.svg&#34; title=&#34;Alert lifecycle diagram with orange dashed highlights around the Pending and Recovering states&#34;&gt;
    &lt;img
      class=&#34;lazyload d-inline-block&#34;
      data-src=&#34;lifecycle-highlight.svg&#34;
      alt=&#34;Alert lifecycle diagram with orange dashed highlights around the Pending and Recovering states&#34; width=&#34;800&#34; height=&#34;235&#34;/&gt;
    &lt;div class=&#34;learning-hub-image__zoom&#34;&gt;
      &lt;svg width=&#34;24&#34; height=&#34;24&#34; viewBox=&#34;0 0 24 24&#34; fill=&#34;none&#34; xmlns=&#34;http://www.w3.org/2000/svg&#34;&gt;
        &lt;path d=&#34;M21 21L15 15M17 10C17 13.866 13.866 17 10 17C6.13401 17 3 13.866 3 10C3 6.13401 6.13401 3 10 3C13.866 3 17 6.13401 17 10Z&#34; stroke=&#34;currentColor&#34; stroke-width=&#34;2&#34; stroke-linecap=&#34;round&#34; stroke-linejoin=&#34;round&#34;/&gt;
        &lt;path d=&#34;M10 7V13M7 10H13&#34; stroke=&#34;currentColor&#34; stroke-width=&#34;2&#34; stroke-linecap=&#34;round&#34;/&gt;
      &lt;/svg&gt;
    &lt;/div&gt;
  &lt;/a&gt;
&lt;/div&gt;

&lt;h2 id=&#34;the-pending-period-prevents-false-positives&#34;&gt;The pending period prevents false positives&lt;/h2&gt;
&lt;p&gt;Temporary data spikes can briefly cross the threshold without indicating a real problem. That means you don&amp;rsquo;t need an alert to fire. The &lt;strong&gt;pending period&lt;/strong&gt; requires the condition to persist across multiple checks before firing.&lt;/p&gt;
&lt;p&gt;For example, a &lt;strong&gt;5m&lt;/strong&gt; pending period with a &lt;strong&gt;1m&lt;/strong&gt; evaluation interval means the condition must stay above your threshold for five consecutive checks before the alert fires.&lt;/p&gt;
&lt;p&gt;Data often arrives a little late, so the newest data point can be incomplete when Grafana runs a check. Because the pending period waits for several checks in a row, one reading based on partial data won&amp;rsquo;t fire the alert on its own.&lt;/p&gt;
&lt;h2 id=&#34;reduce-alert-fatigue-through-evaluation-behavior&#34;&gt;Reduce alert fatigue through evaluation behavior&lt;/h2&gt;
&lt;p&gt;When a condition hovers near the threshold, the alert can fire and resolve repeatedly. &lt;strong&gt;Keep firing for&lt;/strong&gt; holds the firing state briefly after the condition resolves, so you only receive a resolved notification when the problem is genuinely gone.&lt;/p&gt;
]]></content><description>&lt;h2 id="pending-period-and-keep-firing-for">Pending period and keep firing for&lt;/h2>
&lt;div class="learning-hub-image">
&lt;a href="lifecycle-highlight.svg" title="Alert lifecycle diagram with orange dashed highlights around the Pending and Recovering states">
&lt;img
class="lazyload d-inline-block"
data-src="lifecycle-highlight.svg"
alt="Alert lifecycle diagram with orange dashed highlights around the Pending and Recovering states" width="800" height="235"/>
&lt;div class="learning-hub-image__zoom">
&lt;svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
&lt;path d="M21 21L15 15M17 10C17 13.866 13.866 17 10 17C6.13401 17 3 13.866 3 10C3 6.13401 6.13401 3 10 3C13.866 3 17 6.13401 17 10Z" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
&lt;path d="M10 7V13M7 10H13" stroke="currentColor" stroke-width="2" stroke-linecap="round"/>
&lt;/svg>
&lt;/div>
&lt;/a>
&lt;/div>
&lt;h2 id="the-pending-period-prevents-false-positives">The pending period prevents false positives&lt;/h2>
&lt;p>Temporary data spikes can briefly cross the threshold without indicating a real problem. That means you don&amp;rsquo;t need an alert to fire. The &lt;strong>pending period&lt;/strong> requires the condition to persist across multiple checks before firing.&lt;/p></description></item><item><title>No-data and error handling</title><link>https://grafana.com/docs/learning-hub/basic-alerting/04-evaluation/12-no-data-error/</link><pubDate>Mon, 10 Aug 2026 13:40:40 -0500</pubDate><guid>https://grafana.com/docs/learning-hub/basic-alerting/04-evaluation/12-no-data-error/</guid><content><![CDATA[&lt;h2 id=&#34;no-data-and-error-handling&#34;&gt;No-data and error handling&lt;/h2&gt;
&lt;p&gt;Each time an alert rule runs, it evaluates its query and decides whether to fire or stay quiet. Sometimes the rule runs but can&amp;rsquo;t decide whether to fire for two reasons:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The query returns no data. In this case, Grafana assigns a state of &lt;strong&gt;No Data&lt;/strong&gt;. This happens when:
&lt;ul&gt;
&lt;li&gt;No series match the query due to an incorrect metric or label filter&lt;/li&gt;
&lt;li&gt;The data source stops reporting&lt;/li&gt;
&lt;li&gt;The time window has no samples, often because the evaluation window or query range is too short for how often the data arrives&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;The query fails to run. If this occurs, Grafana assigns a state of &lt;strong&gt;Error&lt;/strong&gt;. This can happen with:
&lt;ul&gt;
&lt;li&gt;Evaluation timeouts&lt;/li&gt;
&lt;li&gt;Repeated query failures from a data source that&amp;rsquo;s down&lt;/li&gt;
&lt;li&gt;An authentication problem&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Those auto-generated alerts use names like &lt;code&gt;DatasourceNoData&lt;/code&gt; and &lt;code&gt;DatasourceError&lt;/code&gt;, so your team may not recognize them or connect them back to your rule.&lt;/p&gt;
&lt;h2 id=&#34;how-to-handle-evaluation-issues&#34;&gt;How to handle evaluation issues&lt;/h2&gt;
&lt;p&gt;
&lt;div class=&#34;learning-hub-image&#34;&gt;
  &lt;a href=&#34;no-data-handling.svg&#34; title=&#34;Diagram showing the four no-data and error handling options branching from a query that returns no data&#34;&gt;
    &lt;img
      class=&#34;lazyload d-inline-block&#34;
      data-src=&#34;no-data-handling.svg&#34;
      alt=&#34;Diagram showing the four no-data and error handling options branching from a query that returns no data&#34; width=&#34;800&#34; height=&#34;320&#34;/&gt;
    &lt;div class=&#34;learning-hub-image__zoom&#34;&gt;
      &lt;svg width=&#34;24&#34; height=&#34;24&#34; viewBox=&#34;0 0 24 24&#34; fill=&#34;none&#34; xmlns=&#34;http://www.w3.org/2000/svg&#34;&gt;
        &lt;path d=&#34;M21 21L15 15M17 10C17 13.866 13.866 17 10 17C6.13401 17 3 13.866 3 10C3 6.13401 6.13401 3 10 3C13.866 3 17 6.13401 17 10Z&#34; stroke=&#34;currentColor&#34; stroke-width=&#34;2&#34; stroke-linecap=&#34;round&#34; stroke-linejoin=&#34;round&#34;/&gt;
        &lt;path d=&#34;M10 7V13M7 10H13&#34; stroke=&#34;currentColor&#34; stroke-width=&#34;2&#34; stroke-linecap=&#34;round&#34;/&gt;
      &lt;/svg&gt;
    &lt;/div&gt;
  &lt;/a&gt;
&lt;/div&gt;

You can choose other options to keep your rule out of the &lt;strong&gt;No Data&lt;/strong&gt; and &lt;strong&gt;Error&lt;/strong&gt; states. This means no separate alert is created, and the response stays tied to your rule&amp;rsquo;s own name and routing.&lt;/p&gt;
&lt;section class=&#34;expand-table-wrapper&#34;&gt;&lt;div class=&#34;responsive-table-wrapper&#34;&gt;
    &lt;table&gt;
      &lt;thead&gt;
          &lt;tr&gt;
              &lt;th&gt;Alert state&lt;/th&gt;
              &lt;th&gt;Use this state when&lt;/th&gt;
              &lt;th&gt;What happens&lt;/th&gt;
          &lt;/tr&gt;
      &lt;/thead&gt;
      &lt;tbody&gt;
          &lt;tr&gt;
              &lt;td&gt;Alerting&lt;/td&gt;
              &lt;td&gt;No data means something is broken, like a heartbeat check where silence equals an outage&lt;/td&gt;
              &lt;td&gt;Makes your own rule fire&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Normal&lt;/td&gt;
              &lt;td&gt;Gaps are expected and harmless, like a metric that only reports during business hours&lt;/td&gt;
              &lt;td&gt;Keeps your rule quiet and healthy&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;Keep Last State&lt;/td&gt;
              &lt;td&gt;Gaps are brief and self-healing, and you want to avoid the rule flapping on a missed scrape&lt;/td&gt;
              &lt;td&gt;Holds whatever state your rule had before the gap&lt;/td&gt;
          &lt;/tr&gt;
          &lt;tr&gt;
              &lt;td&gt;No Data/Error (default)&lt;/td&gt;
              &lt;td&gt;You want a separate signal that the data pipeline broke, routed apart from your rule&lt;/td&gt;
              &lt;td&gt;Leaves your rule quiet and raises a separate alert named &lt;code&gt;DatasourceNoData&lt;/code&gt; (for No Data) or &lt;code&gt;DatasourceError&lt;/code&gt; (for Error)&lt;/td&gt;
          &lt;/tr&gt;
      &lt;/tbody&gt;
    &lt;/table&gt;
  &lt;/div&gt;
&lt;/section&gt;&lt;h2 id=&#34;common-mistake&#34;&gt;Common mistake&lt;/h2&gt;
&lt;p&gt;The &lt;strong&gt;Configure no data and error handling&lt;/strong&gt; options in Grafana are powerful, but they require close attention. Don&amp;rsquo;t set the &lt;strong&gt;Alert state if no data or all values are null&lt;/strong&gt; option to &lt;strong&gt;Normal&lt;/strong&gt; unless you&amp;rsquo;re certain that data gaps are safe. Otherwise your rule stays silent during a real outage, and you hear nothing when the underlying data source stops reporting.&lt;/p&gt;
]]></content><description>&lt;h2 id="no-data-and-error-handling">No-data and error handling&lt;/h2>
&lt;p>Each time an alert rule runs, it evaluates its query and decides whether to fire or stay quiet. Sometimes the rule runs but can&amp;rsquo;t decide whether to fire for two reasons:&lt;/p></description></item></channel></rss>