Connect 至 PostgreSQL 資料來源 - Amazon Managed Grafana

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

Connect 至 PostgreSQL 資料來源

您可以使用 PostgreSQL 資料來源查詢和視覺化來自 Amazon Aurora PostgreSQL 資料庫的資料。

重要

Grafana 表版本 8 改變了對於 Postgres 的數據幀的基礎數據結構, MySQL, 和 Microsoft SQL 服務器數據源. 因此,會以寬格式傳回時間序列查詢結果。如需詳細資訊,請參閱 Grafana 資料框文件中的寬幅格式。若要讓視覺效果像第 8 版之前一樣運作,您可能需要進行一些手動移轉。一個解決方案記錄在 Github 上的 Postgl/MSSQL:打破與時間序列查詢和數據列排序相關的 v8.0 中的更改

Grafana 第 9 版中,PostgreSQL 資料來源會設定根憑證來連線至您的資料庫,與舊版不同。如果您將工作區從版本 8 更新為 9,則可能需要變更連線方式。如需詳細資訊,請參閱疑難排解更新工作區問題

新增資料來源

  1. 通過選擇頂部標題中的圖標打開側面菜單圖標。

  2. 配置圖標下的側面菜單中,您應該找到一個數據源鏈接。

  3. 選擇頂部標題中的 + 添加數據源按鈕。

  4. 型下拉列表中選擇 PostgreSQL

資料來源選項

名稱 描述
Name 資料來源名稱。這是您在面板和查詢中查看數據源的方式。
Default 預設資料來源表示將為新面板預先選取該資料來源。
Host PostgreSQL 執行個體的 IP 位址/主機名稱和選用連接埠。請勿包含資料庫名稱。連接到 Postgres 的連接字符串將不正確,並且會導致錯誤。
Database 您的資 PostgreSQL 庫的名稱。
User 資料庫使用者登入/使用者名稱。
Password 資料庫使用者的密碼
SSL Mode 此選項決定是否要與伺服器交涉安全 SSL TCP/IP 連線,或是以何種優先順序進行。
Max open 數據庫的打開連接的最大數量,默認值unlimited(Grafana v5.4 +)。
Max idle 閒置連線集區中的最大連線數目 2 (預設值為 v5.4 +)。
Max lifetime 連線可以重複使用的最大時間 (以秒為單位),預設為 14400 /4 小時 (Grafana v5.4 +)。
Version 此選項會決定查詢建置器中可用的函數 (僅適用於 Grafana 5.3+ 版本)。
TimescaleDB 時間卡里 B 是一個建立為 PostgreSQL 擴展的時間序列數據庫。如果啟用,Grafana 將在$__timeGrouptime_bucket中使用,並在查詢生成器中顯示時間 Criedb 特定的聚合函數(僅適用於 Grafana 5.3+)。

最小時間間隔

$_interval$_interval_ms變數的下限。建議設置為寫入頻率,例1m如,如果您的數據每分鐘寫入一次。此選項也可以在資料來源選項下的管控面板中覆寫/設定。此值必須格式化為數字,後面接著有效的時間識別碼;例如 1m (1 分鐘) 或 30s (30 秒)。支援下列時間識別碼。

識別符 描述
y
M
w
d
h 小時
m 分鐘
s
ms 毫秒

數據庫用戶權限

重要

您在新增資料來源時指定的資料庫使用者,應該只被授與您要查詢之指定資料庫和資料表的 SELECT 權限。Grafana 不會驗證查詢是否安全。查詢可以包含任何 SQL 陳述式。例如,DROP TABLE user;會執行DELETE FROM user;和之類的陳述式。為了防止這種情況,我們強烈建議您建立具有受限權限的特定 PostgreSQL 使用者。

下列範例程式碼會示範建立具有受限權限的特定 PostgreSQL 使用者。

CREATE USER grafanareader WITH PASSWORD 'password'; GRANT USAGE ON SCHEMA schema TO grafanareader; GRANT SELECT ON schema.table TO grafanareader;

請確定使用者沒有從 public 角色取得任何不需要的權限。

查詢編輯器

您可以在「圖形」或「單一統計」面板的編輯模式的量度標籤中找到 PostgreSQL 查詢編輯器。您可以選擇面板標題,然後進入編輯模式。

在面板編輯模式下,查詢編輯器具有「已產生的 SQL」連結,該連結會在執行查詢後顯示。選擇它,它將展開並顯示運行的原始插值 SQL 字符串。

選取表格、時間資料欄和測量結果資料欄 (FROM)

當您第一次進入編輯模式或新增查詢時,Grafana 會嘗試使用第一個具有時間戳記資料行和數值資料行的資料表預先填入查詢產生器。

在 FROM 欄位中,Grafana 會建議資料庫使用者中search_path的資料表。若要選取不在您的資料表或檢視表中,search_path您可以手動輸入完整名稱 (schema.table),例如。public.metrics

Time 列字段指的是保存您的時間值的列的名稱。選取「測量結果」欄位的值是選擇性的。如果選取值,則「量度」欄位會作為序列名稱使用。

度量列建議將只包含文本數據類型(字符,varchar,文本)的列。若要使用不同資料類型的資料欄作為量度資料欄,您可以使用轉換:來輸入資料欄名稱ip::text。您也可以在度量資料欄欄位中輸入任意 SQL 表示式,以評估為文字資料類型,例如hostname || ' ' || container_name

資料欄、視窗和彙總函數 (SELECT)

在該SELECT列中,您可以指定要使用的欄和函數。在欄欄位中,您可以撰寫任意運算式,而不是資料行名稱,例如column1 * column2 / column3

查詢編輯器中的可用功能取決於您在設定資料來源時選取的 PostgreSQL 版本。如果您使用彙總函式,則必須將結果集分組。如果您新增彙總函式,編輯器會自動新增GROUP BY time.

編輯器會嘗試簡化和統一查詢的這一部分。

您可以選擇加號按鈕並從功能表中選取 欄」來新增其他值欄。在圖形面板中,多個數值欄將繪製為單獨的序列。

篩選資料 (WHERE)

若要新增篩選器,請選擇WHERE條件右側的加號圖示。您可以選擇篩選並選取 [移除] 來移除篩選器。目前所選時間範圍的篩選條件會自動新增至新查詢。

分組依據

若要依時間或任何其他欄分組,請選擇 GROUP BY 列末端的加號圖示。建議下拉式清單只會顯示目前選取表格的文字欄,但您可以手動輸入任何欄位。您可以選擇項目,然後選取 [移除] 來移除群組。

如果您新增任何群組,則所有選取的資料行都必須套用彙總函數。當您添加分組時,查詢生成器將自動將彙總函數添加到所有列中,而無需彙總函數。

間隙填充

當您按時間分組時,Amazon 受管的 Grafana 可以填寫缺失的值。時間函數接受兩個參數。第一個參數是你想要分組的時間窗口,第二個參數是你希望 Grafana 填充缺少的項目的值。

文字編輯器模式 (RAW)

您可以選擇漢堡圖示並選取 [切換編輯器模式],或選擇查詢下方的 [編輯 SQL],切換至原始查詢編輯器模式

注意

如果您使用原始查詢編輯器,請確保您的查詢至少具有ORDER BY time和返回時間範圍的過濾器。

巨集

巨集可以在查詢中使用,以簡化語法並允許動態零件。

巨集範例 描述
$__time(dateColumn) 將被表達式替換為轉換為 UNIX 時間戳並將列重命名為time_sec。例如,UNIX_TIMESTAMP(日期列)作為時間 _ 秒。
$__timeEpoch(dateColumn) 將被表達式替換為轉換為 UNIX 時間戳並將列重命名為time_sec。例如,UNIX_TIMESTAMP(日期列)作為時間 _ 秒。
$__timeFilter(dateColumn) 將由使用指定列名稱的時間範圍過濾器替換。例如,從 _ 一次時間(1494410783)和來自一個時間(1494410983)之間的日期列
$__timeFrom() 將由當前活動時間選擇的開始替換。例如,從單一時間 (1494410783)。
$__timeTo() 將被當前活動時間選擇的結束所取代。例如,從單一時間 (1494410983)。
$__timeGroup(dateColumn,'5m') 將被 GROUP BY 子句中可用的表達式替換。例如,轉換(轉換(UNIX_TIMESTAMP(日期列)/(300)作為簽名)300 簽名),*
$__timeGroup(dateColumn,'5m', 0) 與前面的行相同,但使用填充參數,因此該系列中缺少的點將通過 grafana 添加,0 將被用作值。
$__timeGroup(dateColumn,'5m', NULL) 與上述相同,但 NULL 將被用作缺失點的值。
$__timeGroup(dateColumn,'5m', previous) 與上述相同,但如果沒有看到任何值,則該系列中的先前值將被用作填充值,但將使用 NULL(僅適用於 Grafana 5.3+)。
$__timeGroupAlias(dateColumn,'5m') 將被替換為相同 $__timeGroup,但與添加的列別名
$__unixEpochFilter(dateColumn)

將通過使用表示為 Unix 時間戳的時間指定列名稱的時間範圍過濾器替換。例如,* 日期列 > 1494410783 和日期列

$__unixEpochFrom()`

| 將被當前活動時間選擇的開始替換為 Unix 時間戳。舉例來說,*

$__unixEpochTo()

將被當前活動時間選擇的末尾替換為 Unix 時間戳。舉例來說,*

$__unixEpochNanoFilter(dateColumn)

將通過使用指定列名稱表示為納秒時間戳的時間範圍過濾器替換。例如,* 日期資料欄 > 14944107831515214 和日期欄

$__unixEpochNanoFrom()

將被當前活動時間選擇的開始替換為納秒時間戳。例如,*1494410783152415214*
$__unixEpochNanoTo()

將被當前活動時間選擇的末尾替換為納秒時間戳。例如,*14944971831414872*

$__unixEpochGroup(dateColumn,"5m", [fillmode])

與 $ __ 時間組相同,但對於存儲為 Unix 時間戳的時間。

表格查詢

如果查詢選項設置為格式表,你基本上可以做任何類型的 SQL 查詢。表格面板會自動顯示查詢傳回的任何欄和資料列的結果。

您可以使用一般 as SQL 欄選取語法來控制「表格」面板欄的名稱。

時間序列查詢

例如,如果您將「格式」設定為Time series,以便在圖形面板中使用,則查詢必須傳回名為的資料行,time該欄會傳回表示 Unix 紀元的 SQL 日期時間或任何數值資料類型。除了 time AND metric 之外的任何欄都會被視為值欄。您可以傳回名為的資料欄,metric該資料欄用作值資料欄的測量結果名稱。如果您傳回多個值資料行和名為的資料行metric,則此欄會用作序列名稱的前置字元。

時間序列查詢的結果集必須按時間排序。

下列範例程式碼會顯示metric資料行。

SELECT $__timeGroup("time_date_time",'5m'), min("value_double"), 'min' as metric FROM test_data WHERE $__timeFilter("time_date_time") GROUP BY time ORDER BY time

下面的程式碼範例會示範使用 $__timegroup 巨集中的 fill 參數,將空值轉換為零。

SELECT $__timeGroup("createdAt",'5m',0), sum(value) as value, measurement FROM test_data WHERE $__timeFilter("createdAt") GROUP BY time, measurement ORDER BY time

下列範例程式碼會顯示多個資料行。

SELECT $__timeGroup("time_date_time",'5m'), min("value_double") as "min_value", max("value_double") as "max_value" FROM test_data WHERE $__timeFilter("time_date_time") GROUP BY time ORDER BY time

模板

您可以在指標查詢中使用變量,而不是硬編碼(例如服務器,應用程序和傳感器名稱)的內容。變數會顯示為儀表板頂端的下拉式選取方塊。您可以使用這些下拉式方塊來變更顯示在儀表板中的資料。

如需範本變數和範本變數的詳細資訊,請參閱〈〉範本

查詢變數

如果您新增類型的範本變數Query,您可以撰寫 PostgreSQL 查詢,以傳回顯示為下拉式選取方塊的度量名稱、金鑰名稱或索引鍵值等項目。

例如,如果您在範本變數「查詢」設定hostname中指定如此查詢,則可以有一個包含資料表中資料行之所有值的變數。

SELECT hostname FROM host

查詢可以返回多個列和 Grafana 將自動從他們創建一個列表。例如,下面的查詢將返回一個包含來自hostname和值的列表hostname2

SELECT host.hostname, other_host.hostname2 FROM host JOIN other_host ON host.city = other_host.city

若要$__timeFilter(column)在查詢中使用與時間範圍相關的巨集,則必須將範本變數的重新整理模式設定為「在時間範圍變更時」。

SELECT event_name FROM event_log WHERE $__timeFilter(time_column)

另一個選項是可以創建鍵/值變量的查詢。查詢應傳回兩個名為__text和的資料行__value__text列值應該是唯一的(如果它不是唯一的,則使用第一個值)。在下拉列表中的選項將有一個文本和值,允許你有一個友好的名稱作為文本和一個 ID 作為值。一個示例查詢hostnameid為文本和值:

SELECT hostname AS __text, id AS __value FROM host

您也可以建立巢狀變數。使用名為的變數region,您可以讓 hosts 變數僅展示來自目前選取區域的主機。下列程式碼範例會顯示類似 this 的查詢 (如果region是多值變數,請使用IN比較運算子而非比=對多個值)。

SELECT hostname FROM host WHERE region IN($region)

__searchFilter來篩選查詢變數中的結果

__searchFilter在查詢字段中使用將根據用戶在下拉選擇框中鍵入的內容過濾查詢結果。當使用者未輸入任何內容時,的預設值__searchFilter%

注意

重要的是,你用引號圍住__searchFilter表達式,因為 Grafana 不會為你做這個。

下面的例子演示了如何使用__searchFilter作為查詢字段的一部分,使搜索,hostname而在下拉選擇框中的用戶類型。

SELECT hostname FROM my_host WHERE hostname LIKE '$__searchFilter'

在查詢中使用變數

只有當範本變數為時,才會引用範本變數值multi-value

如果變數是多值變數,請使用IN比較運算子,而非比=對多個值。

有兩種語法:

$<varname>範例的範本變數名稱為hostname

SELECT atimestamp as time, aint as value FROM table WHERE $__timeFilter(atimestamp) and hostname in($hostname) ORDER BY atimestamp ASC

[[varname]]範例的範本變數名稱為hostname

SELECT atimestamp as time, aint as value FROM table WHERE $__timeFilter(atimestamp) and hostname in([[hostname]]) ORDER BY atimestamp ASC

關閉多值變數的引用

Amazon 受管的 Grafana 會自動為多值變數建立一個加引號的逗號分隔字串。例如:如果server01server02被選中,那麼它將被格式化為:'server01', 'server02'。若要關閉引用,請針對變數使用 csv 格式選項。

${servers:csv}

如需變數格式化選項的詳細資訊,請參閱〈〉模板和變量

註釋

使用註釋在圖表上覆蓋豐富的事件信息。您可以透過「儀表板」功能表/「註釋」檢視來新增註釋 如需詳細資訊,請參閱 註釋

下列範例程式碼會顯示使用具有 epoch 值之時間資料行的查詢。

SELECT epoch_time as time, metric1 as text, concat_ws(', ', metric1::text, metric2::text) as tags FROM public.test_data WHERE $__unixEpochFilter(epoch_time)

下列範例程式碼會顯示使用具有 epoch 值的時間和時間結束資料行的區域查詢。

注意

此功能僅適用於 Grafana v6.6 +。

SELECT epoch_time as time, epoch_time_end as timeend, metric1 as text, concat_ws(', ', metric1::text, metric2::text) as tags FROM public.test_data WHERE $__unixEpochFilter(epoch_time)

下列範例程式碼會顯示使用原生 SQL 日期/時間資料類型之時間資料行的查詢。

SELECT native_date_time as time, metric1 as text, concat_ws(', ', metric1::text, metric2::text) as tags FROM public.test_data WHERE $__timeFilter(native_date_time)
名稱 描述
time 日期/時間欄位的名稱。可能是具有原生 SQL 日期/時間資料類型或紀元值的資料行。
timeend 結束日期/時間欄位的選擇性名稱。可能是具有原生的SQL 日期/時間資料類型或時代值的資料欄 (Grafana v6.6 +)。
text 事件描述欄位。
tags 用於以逗號分隔字串形式作為事件標籤的選擇性欄位名稱。

提醒

時間序列查詢應在警示條件下運作。警示規則條件尚不支援表格格式化查詢。