SAP HANA データソースへの接続 - Amazon Managed Grafana

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

SAP HANA データソースへの接続

SAP HANA は、データ駆動型のリアルタイムの決定と \ アクションを高速化する、高性能のインメモリデータベースです。SAP によって開発、販売されています。SAP HANA データソースプラグインは、SAP HANA インスタンスを Grafana に接続するために役立ちます。

SAP HANA Grafana Enterprise プラグインを使用すると、ご使用の SAP HANA データを Grafana の他のすべてのデータソースと一緒に視覚化し、コンテキスト内のログデータとメトリクスデータを視覚化できます。このプラグインにはビルトインのクエリエディタが含まれており、注釈がサポートされ、アラートしきい値の設定、アクセスの制御、アクセス許可の設定などを実行できます。

注記

このデータソースは、Grafana Enterprise 専用です。詳細については、「Enterprise プラグインへのアクセス許可の管理」を参照してください。

さらに、バージョン 9 以降をサポートするワークスペースでは、このデータソースに適切なプラグインをインストール必要がある可能性があります。詳細については、「プラグインを使用したワークスペースの拡張」を参照してください。

機能

  • [クエリエディタ] — プラグインには、時系列またはテーブルデータを視覚化し、基本的な Grafana マクロを自動補完できる、構文強調表示付きの SQL クエリエディタが組み込まれています。

  • [データソースのアクセス許可] — Grafana で SAP HANA データを表示またはクエリできるユーザーを制御します。

  • [注釈] — SAP HANA イベントまたはデータを Grafana グラフにオーバーレイして、イベントを他のグラフデータに関連付けます。

  • [アラート] — SAP HANA にアラートベースのメトリクスストアを設定します。

  • [クエリの変数] — Grafana に SAP HANA データに基づくテンプレート変数を作成し、SAP HANA クエリに変数を含めてダッシュボードをインタラクティブにします。

データソースの追加

  1. Amazon Managed 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 プラグインには、任意の HANA クエリを入力できる SQL クエリエディタが用意されています。クエリが時系列データを返す場合は、グラフパネルでそれらを視覚化するための時系列としてフォーマットできます。クエリエディタには、サポートされている Grafana マクロと SQL クエリの構文強調表示の自動補完が用意されています。

‏注釈

SAP HANA クエリは Grafana 注釈のソースとして使用できます。注釈クエリは、少なくとも 1 つの時間列と 1 つのテキスト列を返す必要があります。注釈の詳細については、「‏注釈」を参照してください。

SAP HANA から注釈を作成する方法
  1. [ダッシュボード設定] 歯車アイコンを選択します。

  2. 左メニューから、[注釈][新規] を選択します。

  3. [データソース] ドロップダウンメニューから、SAP HANA データソースのインスタンスを選択します。

  4. [クエリ] フィールドに、少なくとも 1 つの時間フィールドと 1 つのテキストフィールドを返す SAP HANA クエリを入力します。

  5. [フォーマット形式] で、[時系列] を選択します。

  6. 注釈ごとに、[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>) — 未加工のクエリで使用する場合、Grafana の時間範囲を指定列に適用します。time/timestamp/long 時間列に適用されます。

  • $__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 の [to time over a time] フィールドに基づく時間条件を返します。

  • $__toTimeFilter(<time_column>, <comparison_predicate>) — 上記と同じですが、 comparison_predicate を指定できます。

  • $__toTimeFilter(<time_column>, <format>) — 上記と同じですが、時間列の形式を指定できます。

  • $__toTimeFilter(<time_column>, <comparison_predicate>) — 上記と同じですが、 comparison_predicate を指定できます。

  • $__timeGroup(<time_column>, <interval>) — 時間列を間隔グループに展開します。time/timestamp/long 時間列に適用されます。

$__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 形式にすることができます。例えば、YYYYMMDDHH24MISS はデータが 20210421162012 形式で保存される場合に有効な形式です。

$__timeFilter(<time_column>, "epoch" <format>) マクロ

場合によっては、タイムスタンプはデータベースにエポックタイムスタンプとして保存されます。次の例では、$__timeFilter(<time_column>, "epoch" <format>) マクロについて説明します。このマクロは、grafana のタイムピッカーに基づいてエポックタイムスタンプをフィルタリングするのに役立ちます。マクロでは、形式は 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

$__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 タイムピッカーの from 時間に基づく時間フィールドにわたる条件に拡張されます。

これには 3 つのパラメータを使用できます。最初のパラメータは時間フィールドの名前です。2 番目の引数として、comparison_predicate または時刻列の形式を渡すことができます。その両方を渡す場合、format が 2 番目のパラメータとなり、3 番目のパラメータとして comparison_predicate を使用します。

<format> 形式が指定されない場合、プラグインは時間列が timestamp/date タイプであると想定します。時間列が timestamp/date 以外の形式で保存されている場合は、その形式を 2 番目の引数として渡します。<format> は、epoch_s、epoch_ms、epoch_ns、または YYYY-MM-DD などの他のカスタム形式のいずれかになります。

<comparison_predicate> オプションパラメータ。渡されない場合、プラグインは比較述語として > を使用します。<comparison_predicate> は =、!=、<>、<、<=、>、>= のいずれかになります。

$__toTimeFilter() は、$__fromTimeFilter() と同じように機能します。Grafana の from 時間を使用する代わりに、to 時間を使用します。また、デフォルトの比較述語は < になります。

$__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 マクロで使用する場合は、選択した [並べ替え] フィールドが [group by] フィールドと同じ名前になっていることを確認してください。異なる場合は、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 アラートを設定する方法
  1. ダッシュボード内にグラフパネルを作成します。

  2. 時系列形式で SAP HANA クエリを作成します。

  3. [アラート] タブを選択してアラート条件を指定します。

  4. [ルールのテスト] を選択してアラートクエリをテストします。

  5. アラートの受信者、メッセージ、エラー処理を指定します。

  6. ダッシュボードを保存します。

時系列以外のデータのアラート

時系列以外のデータをアラートするには、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'