

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 查詢和條件
<a name="v10-alerting-explore-rules-queries"></a>

****  
本文件主題專為支援 Grafana **10.x 版的 Grafana** 工作區而設計。  
如需支援 Grafana 9.x 版的 Grafana 工作區，請參閱 [使用 Grafana 第 9 版](using-grafana-v9.md)。  
如需支援 Grafana 8.x 版的 Grafana 工作區，請參閱 [使用 Grafana 第 8 版](using-grafana-v8.md)。

在 Grafana 中，查詢在從支援的資料來源擷取和轉換資料方面扮演重要角色，其中包括 MySQL 和 PostgreSQL 等資料庫、Prometheus、InfluxDB 和 Graphite 等時間序列資料庫，以及 OpenSearch、Amazon CloudWatch、Azure Monitor 和 Google Cloud Monitoring 等服務。

如需支援資料來源的詳細資訊，請參閱 [資料來源和 Grafana 提醒](v10-alerting-overview-datasources.md)。

執行查詢的程序包括定義資料來源、指定要擷取的所需資料，以及套用相關的篩選條件或轉換。系統會使用所選資料來源特有的查詢語言或語法來建構這些查詢。

在警示中，您可以定義查詢，以取得您要測量的資料，以及在警示規則觸發之前需要滿足的條件。

提醒規則包含一或多個查詢和表達式，這些查詢和表達式會選取您要測量的資料。

如需查詢和表達式的詳細資訊，請參閱 [查詢和轉換資料](v10-panels-query-xform.md)。

## 資料來源查詢
<a name="v10-alerting-explore-rules-queries-data-source-queries"></a>

Grafana 中的查詢可以透過各種方式套用，具體取決於使用的資料來源和查詢語言。每個資料來源的查詢編輯器都提供自訂的使用者介面，可協助您撰寫利用其唯一功能的查詢。

由於查詢語言之間的差異，每個資料來源查詢編輯器的外觀和功能都不同。根據您的資料來源，查詢編輯器可能會提供自動完成功能、指標名稱、變數建議或視覺化查詢建置界面。

一些常見的查詢元件類型包括：

**指標或資料欄位** – 指定您要擷取的特定指標或資料欄位，例如 CPU 用量、網路流量或感應器讀數。

**時間範圍** – 定義您要擷取資料的時間範圍，例如最後一個小時、特定日期或自訂時間範圍。

**篩選條件** – 套用篩選條件以根據特定條件縮小資料範圍，例如依特定標籤、主機或應用程式篩選資料。

**彙總** – 對資料執行彙總，以計算指定期間內的平均值、總和或計數等指標。

**分組** – 依特定維度或標籤分組資料，以建立彙總檢視或明細。

**注意**  
Grafana 不支援具有範本變數的提醒查詢。如需詳細資訊，[請參閱](https://community.grafana.com/t/template-variables-are-not-supported-in-alert-queries-while-setting-up-alert/2514) Grafana 實驗室論壇。

## 表達式查詢
<a name="v10-alerting-explore-rules-queries-expression-queries"></a>

在 Grafana 中，表達式用於對資料來源查詢的資料執行計算、轉換或彙總。它可讓您根據數學操作、函數或邏輯表達式建立自訂指標或修改現有的指標。

透過利用表達式查詢，使用者可以執行任務，例如計算兩個值之間的百分比變更、套用對數或三角函數等函數、彙總特定時間範圍或維度的資料，以及實作條件式邏輯來處理不同的案例。

在警示中，您只能將表達式用於 Grafana 受管警示規則。對於每個表達式，您可以選擇數學、減少和重新取樣表達式。這些稱為多維規則，因為它們為每個序列產生單獨的提醒。

您也可以使用傳統條件，這會建立警示規則，在符合其條件時觸發單一警示。因此，即使多個序列符合提醒條件，Grafana 也會僅傳送單一提醒。

**注意**  
傳統條件主要基於相容性原因存在，應盡可能避免。

**減少**

將所選時間範圍中的時間序列值彙總為單一值。

**Math**

對時間序列和數字資料執行自由格式數學函數/操作。可用於預先處理時間序列資料，或定義數字資料的提醒條件。

**重新取樣**

將時間範圍重新對齊新的一組時間戳記，這在比較時間序列資料時非常有用，因為在不同資料來源中，時間戳記不會對齊。

**Threshold**

檢查任何時間序列資料是否符合閾值條件。

閾值表達式可讓您比較兩個單一值。當條件為 false `0` 且條件為 true `1` 時，它會傳回 。可使用下列閾值函數：
+ 高於 (x > y)
+ 低於 (x < y)
+ 在範圍內 (x > y1 AND x < y2)
+ 超出範圍 (x < y1 AND x > y2)

**傳統條件**

檢查任何時間序列資料是否符合提醒條件。

**注意**  
無論條件符合多少時間序列，傳統條件表達式查詢一律只會產生一個提醒執行個體。傳統條件主要基於相容性原因存在，應盡可能避免。

## 彙總
<a name="v10-alerting-explore-rules-queries-aggregations"></a>

Grafana 警示提供下列彙總函數，可讓您進一步精簡查詢。

這些函數僅適用於 **Reduce** 和 **Classic 條件**表達式。


| 函式 | 表達式 | 它的功能 | 
| --- | --- | --- | 
| avg | 減少 / Classic | 顯示值的平均值 | 
| min | 減少 / Classic | 顯示最低值 | 
| max | 減少 / Classic | 顯示最高值 | 
| sum | 減少 / Classic | 顯示所有值的總和 | 
| count | 減少 / Classic | 計算結果中的值數目 | 
| last | 減少 / Classic | 顯示最後一個值 | 
| median | 減少 / Classic | 顯示中位數值 | 
| 差異 | 傳統 | 顯示最新和最舊值之間的差異 | 
| diff\$1abs | 傳統 | 顯示 diff 的絕對值 | 
| percent\$1diff | 傳統 | 顯示最新和最舊值之間的差異百分比值 | 
| percent\$1diff\$1abs | 傳統 | 顯示 percent\$1diff 的絕對值 | 
| count\$1non\$1null | 傳統 | 顯示結果集中非 的值計數 null | 

## 警示條件
<a name="v10-alerting-explore-rules-queries-alert-condition"></a>

警示條件是查詢或表達式，決定警示是否會觸發，取決於其產生的值。只能有一個條件來決定觸發提醒。

定義查詢和/或表達式之後，請選擇其中一個做為提醒規則條件。

當查詢的資料滿足定義的條件時，Grafana 會觸發相關聯的提醒，其可設定為透過電子郵件、Slack 或 PagerDuty 等各種管道傳送通知。通知會通知您符合的條件，讓您採取適當動作或調查基礎問題。

根據預設，新增的最後一個表達式會用作提醒條件。

## 復原閾值
<a name="v10-alerting-explore-rules-queries-recovery-threshold"></a>

若要減少翻滾警示的雜訊，您可以設定與警示閾值不同的復原閾值。

當指標圍繞警示閾值條件移動，並可能導致頻繁的狀態變更，從而導致產生太多通知時，就會發生遮蔽警示。

Grafana 受管警示規則會針對特定時間間隔進行評估。每次評估時，都會針對警示規則中設定的閾值檢查查詢結果。如果指標的值高於閾值，則會觸發警示規則並傳送通知。當值低於閾值，且此指標有作用中的提醒時，會解析提醒，並傳送另一個通知。

為雜訊指標建立警示規則可能很困難。也就是說，當指標的值持續高於和低於閾值時。這稱為翻轉，並導致一系列射擊 - 已解決 - 射擊通知和雜訊提醒狀態歷史記錄。

例如，如果您的延遲警示閾值為 1000 毫秒，而數字波動大約 1000 （例如 980 ->1010 -> 990 -> 1020，以此類推），則每個警示都會觸發通知。

若要解決此問題，您可以設定 （自訂） 復原閾值，基本上表示有兩個閾值，而不是一個閾值。警示會在第一個閾值超過時觸發，並且只有在第二個閾值超過時才會解析。

例如，您可以設定 1000 毫秒的閾值和 900 毫秒的復原閾值。如此一來，警示規則只會在低於 900 毫秒時停止發射，並降低翻滾。