Connect 至 SAP HANA 資料來源 - Amazon Managed Grafana

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

Connect 至 SAP HANA 資料來源

SAP HANA 是高效能的記憶體內資料庫,可加速資料導向的即時決策和動作。它是由 SAP 開發和銷售。SAP HANA 資料來源外掛程式可協助您將 SAP HANA 執行個體與 Grafana 連線。

使用 SAP HANA Grafana 企業外掛程式,您可以視覺化您的 SAP HANA 資料以及 Grafana 中的所有其他資料來源,以及內容中的日誌和指標資料。該插件包括一個內置的查詢編輯器,支持註釋,它允許您設置警報閾值,控制訪問,設置權限等。

注意

此資料來源僅適用於 Grafana 企業版。如需詳細資訊,請參閱 管理企業外掛程式的存取

此外,在支援版本 9 或更新版本的工作區中,此資料來源可能需要您安裝適當的外掛程式。如需詳細資訊,請參閱 使用外掛程式擴充工作區

功能

  • 查詢編輯器 — 該插件帶有語法突出顯示的內置 SQL 查詢編輯器,允許您可視化時間序列或表數據並 auto 完成基本的 Grafana 宏。

  • 資料來源權限 — 控制誰可以在 Grafana 中檢視或查詢 SAP HANA 資料。

  • 註釋 — 在任何 Grafana 圖形上覆蓋 SAP HANA 事件或資料,以便將事件與其他圖形資料建立關聯。

  • 警示 — 在 SAP HANA 中設定以警示為基礎的指標存放區。

  • 查詢變數 — 在 Grafana 中建立以 SAP HANA 資料為基礎的範本變數,並在 SAP HANA 查詢中包含變數以使儀表板互動。

新增資料來源

  1. 在 Amazon 受管的 Grafana 工作區中開啟 Grafana 主控台,並確認您已登入。

  2. 在 [設定] 下方的側邊功能表 (齒輪圖示) 中,選擇 [資料來源]。

  3. 選擇新增資料來源

    注意

    如果您在側邊功能表中沒有看到 [資料來源] 連結,表示您目前的使用者沒有該Admin角色。

  4. 從資料來源清單中選取 SAP HANA

  5. 在「Config」編輯器中,輸入下列資訊:

    • 針對「伺服器位址」,請提供 SAP HANA 執行個體的位址。例如:xxxxxxx-xxxx-xxxx-xxxx-xxxxxxx.hana.trial-us10.hanacloud.ondemand.com.

    • 針對伺服器連接埠,提供 SAP HANA 執行個體的連接埠。

    • 在「使用者名稱」中,輸入用於連線至 SAP HANA 執行個體的使用者名稱。

    • 密碼中,輸入此使用者的密碼。

    • (選擇性) 如果您要略過 TLS 驗證,請啟用「跳過 TLS 驗證」。

    • (選擇性) 如果您需要提供用戶端憑證和金鑰,請啟用 TLS 用戶端驗證。

    • (選擇性) 如果您要啟用驗證自我簽署 TLS 憑證,請啟用「使用 CA 憑證」。

    • (選擇性) 在「預設結構描述」中,輸入要使用的預設結構描述。如果省略此選項,則需要在每個查詢中指定結構描述。

存取權和權限

若要將 Grafana 連線至 SAP HANA,請使用專用的認證。僅向使用者提供必要的權限。首先,使用用戶名和密碼創建受限制的用戶。下列查詢是建立受限制使用者的範例。此查詢也會停用強制密碼變更。

CREATE RESTRICTED USER <USER> PASSWORD <PASSWORD> NO FORCE_FIRST_PASSWORD_CHANGE;

接下來,允許用戶通過客戶端(例如 Grafana)使用以下內容連接系統:

ALTER USER <USER> ENABLE CLIENT CONNECT;

最後,讓使用者存取必要的檢視、資料表和結構描述。

ALTER USER <USER> GRANT ROLE PUBLIC; GRANT SELECT ON SCHEMA <SCHEMA> TO <USER>;

使用者層級權限

按一下資料來源組態頁面中的 [權限] 索引標籤,以啟用資料來源權限,以限制對 SAP HANA 的存取。在權限頁面上,管理員可以啟用權限,並將查詢權限限制為特定使用者和團隊。

查詢編輯器

SAP HANA Grafana 插件自帶的 SQL 查詢編輯器,您可以在其中輸入任何 HANA 查詢。如果您的查詢傳回時間序列資料,您可以將其格式化為時間序列,以便在圖形面板中視覺化這些資料。查詢編輯器會為支援的 Grafana 巨集提供 auto 完成功能,以及 SQL 查詢的語法醒目提示功能。

註釋

您可以使用 SAP HANA 查詢作為 Grafana 註釋的來源。您的註釋查詢應返回至少一個時間列和一個文本列。如需註釋的詳細資訊,請參閱註釋

若要從 SAP HANA 建立註釋
  1. 選擇儀表板設定齒輪圖示。

  2. 從左側選單中選擇註解 > 新增

  3. 資料來源下拉式功能表中,選取 SAP HANA 資料來源執行個體。

  4. 在「查詢」欄位中,輸入至少會傳回一個時間欄位和一個文字欄位的 SAP HANA 查詢。

  5. 格式化為下拉式功能表中,選取時間序列

  6. 對於每個註釋,配置「」字段。

模板和變量

若要新增 SAP HANA 查詢變數,請參閱新增查詢變數。使用您的 SAP HANA 資料來源做為資料來源。

下列範例查詢會usernameusers資料表傳回的不同清單。

select distinct("username") from "users"
注意

請務必只在變數查詢中選取一個資料欄。如果您的查詢返回兩列,第一列將用作顯示值,第二列將被用作變量的實際值。如果您的查詢返回兩列以上,它們將被拒絕。

模板和變量

您可以在查詢中使用任何 Grafana 變數。下列範例說明如何在查詢中使用單一/多變數。

-- For example, following query select * from "users" where "city" = ${city} -- will be translated into select * from "users" where "city" = 'london' --- where you can see ${city} variable translated into actual value in the variable

與文本類似,變量也適用於數字字段。在下面的例子中,${age}是一個文本框變量,它接受數字,然後與表中的數字字段進行比較。

select * from "users" where "age" > ${age} --- wil be translated into select * from "users" where "age" > '36'

如果你的變量返回多個值,那麼你可以在 SAP HANA 查詢的in條件下使用它,如下所示。請注意變數周圍的括號,以使where in條件在 SAP HANA 中有效。

select * from "users" where "city" in (${cities}) --- will be translated into select * from "users" where "city" in ('london','perth','delhi') --- where you can see ${cities} turned into a list of grafana variables selected. --- You can also write the same query using shorthand notation as shown below select * from "users" where "city" in ($cities)

巨集

  • $__timeFilter(<time_column>)— 在原始查詢中使用時,將 Grafana 的時間範圍套用至指定的資料行。適用於日期/時間戳記/長時間列。

  • $__timeFilter(<time_column>, <format>)— 與上述相同。但給出了指定存儲在數據庫中的 time_column 的格式的能力。

  • $__timeFilter(<time_column>, "epoch", <format>)-與上述相同,但可以在時間列位於時代時使用。格式可以是 's','ms' 和 'n' 之一。

  • $__fromTimeFilter(<time_column>)-與上述相同,但可以在時間列位於時代時使用。格式可以是 's','ms' 和 'n' 之一。

  • $__fromTimeFilter(<time_column>, <comparison_predicate>)— 與上述相同,但能夠指定比較謂詞。

  • $__fromTimeFilter(<time_column>, <format>)— 與上述相同,但能夠指定時間欄的格式。

  • $__fromTimeFilter(<time_column>, <format>, <comparison_predicate>)— 與上述相同,但能夠指定比較謂詞。

  • $__toTimeFilter(<time_column>)-返回基於 grafana 的時間在一個時間字段的時間條件。

  • $__toTimeFilter(<time_column>, <comparison_predicate>)— 與上述相同,但能夠指定比較謂詞。

  • $__toTimeFilter(<time_column>, <format>)— 與上述相同,但能夠指定時間欄的格式。

  • $__toTimeFilter(<time_column>, <comparison_predicate>)— 與上述相同,但能夠指定比較謂詞。

  • $__timeGroup(<time_column>, <interval>)— 將時間欄展開為間隔群組。適用於日期/時間戳記/長時間列。

$ __ 時間過濾器()宏 <time_column>

下面的例子說明了$__timeFilter(<time_column>)宏:

- In the following example, the query select ts, temperature from weather where $__timeFilter(ts) --- will be translated into select ts, temperature from weather where ts > '2021-02-24T12:52:48Z' AND ts < '2021-03-24T12:52:48Z' --- where you can see the grafana dashboard's time range is applied to the column ts in the query.

$ __ 時間過濾器(,)宏 <time_column><format>

在某些情況下,資料庫中的時間欄會以自訂格式儲存。下面的例子說明了$__timeFilter(<time_column>, <format>)宏,這有助於根據 grafana 的時間選擇器過濾自定義時間戳:

SELECT TO_TIMESTAMP("TS",'YYYYMMDDHH24MISS') AS METRIC_TIME , "VALUE" FROM "SCH"."TBL" WHERE $__timeFilter("TS","YYYYMMDDHH24MISS") -- TS is in 20210421162012 format SELECT TO_TIMESTAMP("TS",'YYYY-MON-DD') AS METRIC_TIME , "VALUE" FROM "SCH"."TBL" WHERE $__timeFilter("TS","YYYY-MON-DD") -- TS is in 2021-JAN-15 format

在宏中,格式可以是與您的時間戳列匹配的有效 HANA 格式之一。例如,YYYYMMDDHH24MISS當您的資料以格式儲存時,這是一種有效的20210421162012格式。

$ __ 時間過濾器(,「紀元」)宏 <time_column><format>

在某些情況下,時間戳記在數據庫中存儲為紀元時間戳。下面的例子說明了這有助於根據 grafana 的時間選擇器過濾紀元時間戳的$__timeFilter(<time_column>, "epoch" <format>)宏。在宏中,格式可以是 ms,s 或 ns 之一。如果未指定,s 將被視為默認格式。

SELECT ADD_SECONDS('1970-01-01', "TIMESTAMP") AS "METRIC_TIME", "VALUE" FROM "SCH"."TBL" WHERE $__timeFilter("TIMESTAMP","epoch") -- Example : TIMESTAMP field stored in epoch_second format 1257894000 SELECT ADD_SECONDS('1970-01-01', "TIMESTAMP") AS "METRIC_TIME", "VALUE" FROM "SCH"."TBL" WHERE $__timeFilter("TIMESTAMP","epoch","s") -- Example : TIMESTAMP field stored in epoch_second format 1257894000 SELECT ADD_SECONDS('1970-01-01', "TIMESTAMP"/1000) AS "METRIC_TIME", "VALUE" FROM "SCH"."TBL" WHERE $__timeFilter("TIMESTAMP","epoch","ms") -- Example : TIMESTAMP field stored in epoch_ms format 1257894000000 SELECT ADD_SECONDS('1970-01-01', "TIMESTAMP"/1000000000) AS "METRIC_TIME", "VALUE" FROM "SCH"."TBL" WHERE $__timeFilter("TIMESTAMP","epoch","ns") -- Example : TIMESTAMP field stored in epoch_nanoseconds format 1257894000000000000

而不是使用第三個參數 $ __ 時間過濾器,你可以使用 epoch_s,epoch_ms 或 epoch_ns 作為你的第二個參數。

SELECT ADD_SECONDS('1970-01-01', "TIMESTAMP"/1000) AS "METRIC_TIME", "VALUE" FROM "SCH"."TBL" WHERE $__timeFilter("TIMESTAMP","epoch","ms") -- is same as SELECT ADD_SECONDS('1970-01-01', "TIMESTAMP"/1000) AS "METRIC_TIME", "VALUE" FROM "SCH"."TBL" WHERE $__timeFilter("TIMESTAMP","epoch_ms")

$__ fromTimeFilter () 和 $__ toTimeFilter () 巨集

$__fromTimeFilter()宏擴展到根據 Grafana 時間選擇器從時間的時間字段的條件。

這接受三個參數。第一個參數是時間字段名稱。您可以通過比較 _ 謂詞或時間列的格式作為第二個參數。如果你想通過這兩個,那麼格式是第二個參數,並使用比較_謂詞作為你的第三個參數。

<format>如果未指定格式,則 plugin 將假設時間資料行為時間戳記/日期類型。如果您的時間列以時間戳/日期以外的任何其他格式存儲,則將格式作為第二個參數傳遞。 <format>可以是紀元之一,時代 _ 毫秒,時代 _ns 或任何其他自定義格式,如 YYYY-MM-DD。

<comparison_predicate>可選參數。如果未通過,插件將使用 > 作為比較謂詞。 <comparison_predicate>可以是 =、! =、<>、<、<=、>、> =

$__toTimeFilter()工作原理與 $__ fromTimeFilter () 相同。而不是從時間使用 Grafana 的,它將使用時間。另外,默認比較謂詞將是 <。

$ __ 時間組(,)<time_column><interval>

例如,在查詢中將宏 $ __ 時間組(時間分數,1 小時)擴展到 SERIES_ROUND(「時間軸」,「間隔 1 小時」)。

下面的例子說明 $__timeGroup(<time_column>, <interval>) macro.

SELECT $__timeGroup(timestamp,1h), "user", sum("value") as "value" FROM "salesdata" WHERE $__timeFilter("timestamp") GROUP BY $__timeGroup(timestamp,1h), "user" ORDER BY $__timeGroup(timestamp,1h) ASC

這被翻譯成下面的查詢,其$__timeGroup(timestamp,1h)中擴展到SERIES_ROUND("timestamp", 'INTERVAL 1 HOUR')

SELECT SERIES_ROUND("timestamp", 'INTERVAL 1 HOUR') as "timestamp", "user", sum("value") as "value" FROM "salesdata" WHERE "timestamp" > '2020-01-01T00:00:00Z' AND "timestamp" < '2020-01-01T23:00:00Z' GROUP BY SERIES_ROUND("timestamp", 'INTERVAL 1 HOUR'), "user" ORDER BY "timestamp" ASC
注意

當使用 $__timeGroup 宏的組時,請確保您的選擇,按字段排序遵循相同的名稱與您的組按字段相同的名稱。否則,HANA 可能無法識別查詢。

如果你不想硬編碼 $ __timegroup () 函數的間隔,那麼你可以把它留給 Grafana 通過指定 $ __ 間隔作為你的間隔。Grafana 將計算從儀表板時間範圍的時間間隔。查詢範例:

SELECT $__timeGroup(timestamp, $__interval), sum("value") as "value" FROM "salesdata" WHERE $__timeFilter("timestamp") GROUP BY $__timeGroup(timestamp, $__interval) ORDER BY $__timeGroup(timestamp, $__interval) ASC

該查詢會根據儀表板時間範圍轉換為以下查詢。

SELECT SERIES_ROUND("timestamp", 'INTERVAL 1 MINUTE'), sum("value") as "value" FROM "salesdata" WHERE "timestamp" > '2019-12-31T23:09:14Z' AND "timestamp" < '2020-01-01T23:17:54Z' GROUP BY SERIES_ROUND("timestamp", 'INTERVAL 1 MINUTE') ORDER BY SERIES_ROUND("timestamp", 'INTERVAL 1 MINUTE') ASC

提醒

若要在 Grafana 中設定 SAP HANA 警示
  1. 在儀表板中建立圖形面板。

  2. 以時間序列格式建立 SAP HANA 查詢。

  3. 選擇「警示」頁標並指定警示條件。

  4. 選擇「測試規則」以測試警示查詢。

  5. 指定警示收件者、訊息和錯誤處理。

  6. 儲存儀表板。

警示非時間序列資料

若要針對非時間序列資料發出警示,請使用TO_TIMESTAMP('${__to:date}')巨集將非時間序列量度製成時間序列。這會將您的指標轉換為單點時間序列查詢。查詢的格式如下

SELECT TO_TIMESTAMP('${__to:date}'), <METRIC> FROM <TABLE≶ WHERE <YOUR CONDITIONS>

在下面的例子中,一個表有四個字段稱為用戶名,年齡,城市和角色。此表格沒有任何時間欄位。我們希望在具有開發角色的用戶數少於三個時通知。

SELECT TO_TIMESTAMP('${__to:date}'), count(*) as "count" FROM ( SELECT 'John' AS "username", 32 AS "age", 'Chennai' as "city", 'dev' as "role" FROM dummy UNION ALL SELECT 'Jacob' AS "username", 32 AS "age", 'London' as "city", 'accountant' as "role" FROM dummy UNION ALL SELECT 'Ali' AS "username", 42 AS "age", 'Delhi' as "city", 'admin' as "role" FROM dummy UNION ALL SELECT 'Raja' AS "username", 12 AS "age", 'New York' as "city", 'ceo' as "role" FROM dummy UNION ALL SELECT 'Sara' AS "username", 35 AS "age", 'Cape Town' as "city", 'dev' as "role" FROM dummy UNION ALL SELECT 'Ricky' AS "username", 25 AS "age", 'London' as "city", 'accountant' as "role" FROM dummy UNION ALL SELECT 'Angelina' AS "username", 31 AS "age", 'London' as "city", 'cxo' as "role" FROM dummy ) WHERE "role" = 'dev'