翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
SAP HANA データソースに接続する
SAP HANA
SAP HANA Grafana Enterprise プラグインを使用すると、SAP HANA データを Grafana の他のすべてのデータソースとともに視覚化し、コンテキスト内のログとメトリクスデータを視覚化できます。このプラグインには、組み込みのクエリエディタが含まれており、注釈をサポートしており、アラートのしきい値の設定、アクセスの制御、アクセス許可の設定などを行うことができます。
注記
このデータソースは Grafana Enterprise 専用です。詳細については、「Enterprise プラグインへのアクセスを管理する」を参照してください。
さらに、バージョン 9 以降をサポートするワークスペースでは、このデータソースで適切なプラグインのインストールが必要になる場合があります。詳細については、「プラグインを使用してワークスペースを拡張する」を参照してください。
機能
-
クエリエディタ — プラグインには、時系列またはテーブルデータを視覚化し、基本的な Grafana マクロを自動で完了できる構文強調表示付きの SQL クエリエディタが組み込まれています。
-
データソースのアクセス許可 — Grafana で SAP HANA データを表示またはクエリできるユーザーを制御します。
-
注釈 — Grafana グラフに SAP HANA イベントまたはデータをオーバーレイして、イベントを他のグラフデータと関連付けます。
-
アラート — SAP HANA にアラートベースのメトリクスストアを設定します。
-
クエリの変数 — SAP HANA データに基づく Grafana でテンプレート変数を作成し、SAP HANA クエリに変数を含めてダッシュボードをインタラクティブにします。
データソースの追加
-
Amazon Managed Grafana ワークスペースで Grafana コンソールを開き、ログインしていることを確認します。
-
設定 (歯車アイコン) のサイドメニューで、データソース を選択します。
-
[データソースを追加する] を選択する。
注記
サイドメニューにデータソースリンクが表示されない場合は、現在のユーザーに
Admin
ロールがないことを意味します。 -
データソースのリストから SAP HANA を選択します。
-
Config エディタで、次の情報を入力します。
-
サーバーアドレス には、SAP HANA インスタンスのアドレスを指定します。例:
xxxxxxx-xxxx-xxxx-xxxx-xxxxxxx.hana.trial-us10.hanacloud.ondemand.com
。 -
サーバーポート には、SAP HANA インスタンスのポートを指定します。
-
ユーザー名 には、SAP HANA インスタンスへの接続に使用するユーザー名を入力します。
-
パスワード には、このユーザーのパスワードを入力します。
-
(オプション) TLS 検証をスキップするかどうかを TLS 検証のスキップ を有効にします。
-
(オプション) クライアント証明書とキーを指定する必要がある場合は、TLS Client Auth を有効にします。
-
(オプション) 自己署名 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 プラグインには、任意の HANA クエリを入力できる SQL クエリエディタが付属しています。クエリが時系列データを返す場合は、グラフパネルでそれらを視覚化するための時系列としてフォーマットできます。クエリエディタは、サポートされている Grafana マクロの自動入力と SQL クエリの構文強調表示を提供します。
注釈
SAP HANA クエリを Grafana 注釈のソースとして使用できます。注釈クエリは、少なくとも 1 つの時間列と 1 つのテキスト列を返す必要があります。注釈の詳細については、「」を参照してください注釈。
SAP HANA から注釈を作成するには
-
ダッシュボード設定の歯車アイコンを選択します。
-
左側のメニューから、注釈 、新規 を選択します。
-
データソースドロップダウンメニューから、SAP HANA データソースインスタンスを選択します。
-
クエリフィールドに、少なくとも 1 つの時間フィールドと 1 つのテキストフィールドを返す SAP HANA クエリを入力します。
-
ドロップダウンメニューで、時系列 を選択します。
-
注釈ごとに、From フィールドを設定します。
テンプレートと変数
新しい SAP HANA クエリ変数を追加するには、「」を参照してくださいクエリ変数の追加。SAP HANA データソースをデータソースとして使用します。
次のクエリ例では、 users
テーブルusername
から の個別のリストを返します。
select distinct("username") from "users"
注記
変数クエリでは、必ず 1 つの列のみを選択してください。クエリが 2 つの列を返す場合、最初の列が表示値として使用され、2 番目の列が変数の実際の値として使用されます。クエリが 3 つ以上の列を返す場合、クエリは拒否されます。
テンプレートと変数
クエリでは任意の 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
の条件で使用できます。SAP HANA でwhere in
条件を有効にするには、変数を囲む角括弧に注意してください。
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>)
— raw クエリで使用すると、Grafana の時間範囲を指定された列に適用します。date/timestamp/long time 列に適用されます。 -
$__timeFilter(<time_column>, <format>)
— 上記と同じです。ただし、 では、データベースに保存されている time_column の形式を指定できます。 -
$__timeFilter(<time_column>, "epoch", <format>)
— 上記と同じですが、時間列がエポックの場合に使用できます。 形式は「s」、「ms」、「ns」のいずれかになります。 -
$__fromTimeFilter(<time_column>)
— 上記と同じですが、時間列がエポックの場合に使用できます。 形式は「s」、「ms」、「ns」のいずれかになります。 -
$__fromTimeFilter(<time_column>, <comparison_predicate>)
— 上記と同じですが、 comparison_predicate を指定できます。 -
$__fromTimeFilter(<time_column>, <format>)
— 上記と同じですが、時間列の形式を指定できます。 -
$__fromTimeFilter(<time_column>, <format>, <comparison_predicate>)
— 上記と同じですが、 comparison_predicate を指定できます。 -
$__toTimeFilter(<time_column>)
— grafana の時間フィールドに基づく時間条件を返します。 -
$__toTimeFilter(<time_column>, <comparison_predicate>)
— 上記と同じですが、 comparison_predicate を指定できます。 -
$__toTimeFilter(<time_column>, <format>)
— 上記と同じですが、時間列の形式を指定できます。 -
$__toTimeFilter(<time_column>, <comparison_predicate>)
— 上記と同じですが、 comparison_predicate を指定できます。 -
$__timeGroup(<time_column>, <interval>)
— 時間列を間隔グループに展開します。date/timestamp/long time 列に適用されます。
$__timeFilter (<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.
$__timeFilter (<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 形式の 1 つにすることができます。例えば、 YYYYMMDDHH24MISS
は、データが 形式で保存されている場合に有効な20210421162012
形式です。
$__timeFilter (<time_column>, "epoch" <format>) マクロ
場合によっては、タイムスタンプは DB にエポックタイムスタンプとして保存されます。次の例では、grafana のタイムピッカーに基づいてエポックタイムスタンプをフィルタリングするのに役立つ $__timeFilter(<time_column>, "epoch" <format>)
マクロについて説明します。マクロでは、形式は ms、s、ns のいずれかになります。指定しない場合、 はデフォルトの形式として扱われます。
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
$__timeFilter に 3 番目の引数を使用する代わりに、epoch_s、epoch_ms、または epoch_ns のいずれかを 2 番目の引数として使用できます。
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 タイムピッカーの時刻に基づいて、時刻フィールドで条件に拡張されます。
これにより、3 つのパラメータを使用できます。最初のパラメータは時間フィールド名です。comparison_predicate または time 列の形式を 2 番目の引数として渡すことができます。両方を渡す場合、形式は 2 番目のパラメータであり、3 番目のパラメータとして comparison_predicate を使用します。
<format> 形式が指定されていない場合、プラグインは time 列が timestamp/date 型であると仮定します。time 列が timestamp/date 以外の形式で保存されている場合は、形式を 2 番目の引数として渡します。<format> は、epoch_s、epoch_ms、epoch_ns、または YYYY-MM-DD などのその他のカスタム形式のいずれかになります。
<comparison_predicate> オプションのパラメータ。渡されない場合、プラグインは比較述語として > を使用します。<comparison_predicate> は =、!=、<>、<、<=、>、>= のいずれかになります。
$__toTimeFilter()
は $__fromTimeFilter() と同じように機能します。Grafana の を最初から使用する代わりに、 から を使用します。また、デフォルトの比較述語は < になります。
$__timeGroup (<time_column>、<interval>)
例えば、マクロ $__timeGroup (timecol,1h) は、クエリで SERIES_ROUND("timecol", 'INTERVAL 1 HOUR') に展開されます。
次の例では、 について説明します。 $__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 () 関数で間隔をハードコーディングしない場合は、間隔として $__interval を指定することで、その間隔を 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 アラートを設定するには
-
ダッシュボードにグラフパネルを作成します。
-
時系列形式で SAP HANA クエリを作成します。
-
アラートタブを選択し、アラート条件を指定します。
-
ルールのテストを選択して、アラートクエリをテストします。
-
アラート受信者、メッセージ、エラー処理を指定します。
-
ダッシュボードを保存します。
時系列以外のデータのアラート
時系列以外のデータをアラートするには、TO_TIMESTAMP('${__to:date}')
マクロを使用して時系列以外のメトリクスを時系列に作成します。これにより、メトリクスが単一ポイントの時系列クエリに変換されます。クエリの形式を以下に示します。
SELECT TO_TIMESTAMP('${__to:date}'), <METRIC> FROM <TABLE≶ WHERE <YOUR CONDITIONS>
次の例では、テーブルにはユーザー名、年齢、都市、ロールという 4 つのフィールドがあります。このテーブルには時間フィールドがありません。開発ロールを持つユーザーの数が 3 人未満になったときに通知します。
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'