Connect 到一個 MySQL 資料來源 - Amazon Managed Grafana

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

Connect 到一個 MySQL 資料來源

添加 MySQL 數據源,以便能夠查詢和可視化來自 MySQL 兼容數據庫的數據。

重要

圖 Grafana 版本 8.0 改變了 MySQL 的數據幀的基礎數據結構, 郵政, 和 Microsoft SQL 服務器數據源. 因此,會以寬格式傳回時間序列查詢結果。如需詳細資訊,請參閱 Grafana 資料框文件中的寬幅格式

若要讓視覺效果像以前一樣運作,您可能需要進行一些手動移轉。一個解決方案記錄在 Github 上的 Postgl/MSSQL:打破與時間序列查詢和數據列排序相關的 v8.0 中的更改

新增資料來源

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

  2. 儀表板鏈接下的側面菜單中,您應該找到一個名為數據源的鏈接。

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

  4. 類型下拉列表中選擇 MySQL

資料來源選項

名稱 描述
Name 資料來源名稱。這是您在面板和查詢中查看數據源的方式。
Default 預設資料來源表示將為新面板預先選取該資料來源。
Host MySQL 執行個體的 IP 位址/主機名稱和選用連接埠。
Database 你的 MySQL 數據庫的名稱。
User 資料庫使用者登入/使用者名稱。
Password 資料庫使用者的密碼。
Max open 數據庫的打開連接的最大數量,默認值unlimited(Grafana v5.4 +)。
Max idle 閒置連線集區中的最大連線數目 2 (預設值為 v5.4 +)。
Max lifetime 連線可重複使用的時間上限 (秒),預設為 14400 /4 小時。這應該總是比 MySQL 中配置的等待超時低 (版本 v5.4 +).

最小時間間隔

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

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

數據庫用戶權限

重要

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

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

CREATE USER 'grafanaReader' IDENTIFIED BY 'password'; GRANT SELECT ON mydatabase.mytable TO 'grafanaReader';

若要授予對更多資料庫和資料表的存取權,您可以視需要使用萬用字元 (*) 來取代資料庫或資料表。

查詢編輯器

您可以在面板的編輯模式的度量標籤中找到 MySQL 查詢編輯器。您可以選擇面板標題,然後選擇「編輯」來進入編輯模式。

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

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

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

在 FROM 欄位中,Grafana 會建議已設定資料庫中的資料表。若要在資料庫使用者有權存取的其他資料庫中選取資料表或檢視表,您可以手動輸入完整名稱 (database.table),例如。otherDb.metrics

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

量度欄建議只會包含具有文字資料類型 (文字、文字、中間文字、長文字、varchar、字元) 的資料行。如果您想要使用具有不同資料類型的資料欄作為量度資料欄,您可以使用轉換:來輸入資料欄名稱CAST(numericColumn as CHAR)。您也可以在度量資料欄欄位中輸入任意 SQL 表示式,以評估為文字資料類型,例如CONCAT(column1, " ", CAST(numericColumn as CHAR))

資料行和彙總函式 (SELECT)

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

如果您使用彙總函式,則必須將結果集分組。GROUP BY time如果您新增彙總函式,編輯器會自動新增。

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

篩選資料 (WHERE)

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

分組依據

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

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

間隙填充

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

文字編輯器模式 (原始)

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

注意

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

巨集

為了簡化語法並允許動態零件 (例如日期範圍篩選器),查詢可以包含巨集。

巨集範例 描述
$__time(dateColumn) 將被表達式替換為轉換為 UNIX 時間戳並將列重命名為time_sec; 例如,UNIX_TIMESTAMP(日期列)為 time_ sec。
$__timeEpoch(dateColumn) 將被表達式替換為轉換為 UNIX 時間戳並將列重命名為time_sec; 例如,UNIX_TIMESTAMP(日期列)為 time_ sec。
$__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但與添加的列別名(僅適用於 Grafana 5.3+)。
$__unixEpochFilter(dateColumn) 將通過使用表示為 Unix 時間戳的時間指定列名稱的時間範圍過濾器替換。例如 dateColumn > 1494410783 AND dateColumn < 1494497183
$__unixEpochFrom() 將被當前活動時間選擇的開始替換為 Unix 時間戳。例如 1494410783
$__unixEpochTo() 將被當前活動時間選擇的末尾替換為 Unix 時間戳。例如 1494497183
$__unixEpochNanoFilter(dateColumn) 將通過使用指定列名稱表示為納秒時間戳的時間範圍過濾器替換。例如 dateColumn > 1494410783152415214 AND dateColumn < 1494497183142514872
$__unixEpochNanoFrom() 將被當前活動時間選擇的開始替換為納秒時間戳。例如 1494410783152415214
$__unixEpochNanoTo() 將被當前活動時間選擇的末尾替換為納秒時間戳。例如 1494497183142514872
$__unixEpochGroup(dateColumn,"5m", [fillmode]) 相同,$__timeGroup但對於存儲為 Unix 時間戳的時間(僅適用於 Grafana 5.3+)。
$__unixEpochGroupAlias(dateColumn,"5m", [fillmode])` 與上面相同,但也添加了一個列別名(僅適用於 Grafana 5.3+)。

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

表格查詢

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

下列程式碼顯示範例查詢。

SELECT title as 'Title', user.login as 'Created By' , dashboard.created as 'Created On' FROM dashboard INNER JOIN user on user.id = dashboard.created_by WHERE $__timeFilter(dashboard.created)

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

時間序列查詢

如果您將 [格式] 設為 [時間序列],例如用於圖形面板中,查詢必須傳回名為的資料行,time該欄會傳回 SQL 日期時間或代表 Unix 紀元的任何數值資料類型。除了 time AND metric 之外的任何欄都會被視為值欄。您可以傳回名為的資料欄,metric該資料欄用作值資料欄的測量結果名稱。如果您傳回多個值資料行和名為的資料欄metric,此資料欄會用作序列名稱的前置字元 (僅適用於 Grafana 5.3+)。

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

下列程式碼範例顯示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_double) 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,您可以撰寫 MySQL 查詢,以傳回顯示為下拉式選取方塊的測量名稱、金鑰名稱或索引鍵值等項目。

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

SELECT hostname FROM my_host

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

SELECT my_host.hostname, my_other_host.hostname2 FROM my_host JOIN my_other_host ON my_host.city = my_other_host.city

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

SELECT event_name FROM event_log WHERE $__timeFilter(time_column)

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

下列程式碼範例會hostname以文字和值的id形式顯示查詢。

SELECT hostname AS __text, id AS __value FROM my_host

您也可以建立巢狀變數。例如,如果您有另一個名為的變數region。然後,您可以使 hosts 變量僅顯示來自當前選定區域的主機,這樣的查詢(如果region是多值變量,則使用IN比較運算符而不是與多個值匹配)。=

SELECT hostname FROM my_host WHERE region IN($region)

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

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

注意

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

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

SELECT hostname FROM my_host WHERE hostname LIKE '$__searchFilter'

在查詢中使用變數

從 Grafana 4.3.0 到 4.6.0,模板變量總是自動引用,所以如果它是一個字符串值,請不要將它們包裝在 where 子句中的引號中。

從 Grafana 4.7.0,模板變量值只有在模板變量是一個引用. multi-value

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

有兩種語法:

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

SELECT UNIX_TIMESTAMP(atimestamp) as time, aint as value, avarchar as metric FROM my_table WHERE $__timeFilter(atimestamp) and hostname in($hostname) ORDER BY atimestamp ASC

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

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

關閉多值變數的引用

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

${servers:csv}

如需變數格式化選項的詳細資訊,請參閱〈〉進階變數格式選項

註釋

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

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

SELECT epoch_time as time, metric1 as text, CONCAT(tag1, ',', tag2) as tags FROM public.test_data WHERE $__unixEpochFilter(epoch_time)

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

注意

僅適用於 Grafana v6.6 +。

SELECT epoch_time as time, epoch_timeend as timeend, metric1 as text, CONCAT(tag1, ',', tag2) as tags FROM public.test_data WHERE $__unixEpochFilter(epoch_time)

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

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

提醒

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