PostgreSQL データソースに接続する - Amazon Managed Grafana

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

PostgreSQL データソースに接続する

PostgreSQL データソースを使用して、Amazon Aurora PostgreSQL データベースからのデータをクエリおよび視覚化できます。

重要

Grafana バージョン 8 では、Postgres、MySQL、Microsoft SQL Server データソースのデータフレームの基盤となるデータ構造が変更されています。その結果、時系列クエリ結果が幅広い形式で返されます。詳細については、Grafana データフレームドキュメントの「ワイドフォーマット」を参照してください。ビジュアライゼーションをバージョン 8 以前と同じように機能させるには、いくつかの手動移行が必要になる場合があります。解決策の 1 つは、「Postgres/MySQL /MSSQL: 時系列クエリとデータ列 の順序に関連する v8.0 の重大な変更」で Github に記載されています。

Grafana バージョン 9 では、PostgreSQL データソースは、以前のバージョンとは異なる方法でデータベースに接続するためのルート証明書を設定します。ワークスペースをバージョン 8 から 9 に更新する場合、接続方法の変更が必要になる場合があります。詳細については、「更新されたワークスペースに関する問題のトラブルシューティング」を参照してください。

データソースの追加

  1. 上部のヘッダーにある Grafana アイコンを選択して、サイドメニューを開きます。

  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 (Grafana v5.4+)。
Max lifetime 接続を再利用できる秒単位の最大時間。デフォルトは 14400/4 時間 (Grafana v5.4+)。
Version このオプションは、クエリビルダーで使用できる関数を決定します (Grafana 5.3 以降でのみ使用可能)。
TimescaleDB TimescaleDB は、PostgreSQL 拡張機能として構築された時系列データベースです。有効にすると、Grafana は$__timeGroupマクロtime_bucketで を使用し、クエリビルダーに TimescaleDB 固有の集計関数を表示します (Grafana 5.3 以降でのみ使用可能)。

最小時間間隔

$_interval $_interval_ms 変数の下限。データを毎分書き込む1m場合など、書き込み頻度に設定することをお勧めします。このオプションは、データソースオプションのダッシュボードパネルで上書き/設定することもできます。この値は、 (1 分) や (30s30 秒) など、1m有効な時間識別子が続く数値としてフォーマットする必要があります。次の時間識別子がサポートされています。

識別子 説明
y
M
w
d
h 時間
m
s
ms ミリ秒

データベースユーザーのアクセス許可

重要

データソースの追加時に指定するデータベースユーザーには、クエリを実行する指定されたデータベースとテーブルに対する SELECT アクセス許可のみを付与する必要があります。Grafana はクエリが安全であることを検証しません。クエリには任意の SQL ステートメントを含めることができます。例えば、 DELETE FROM user;や などのステートメントDROP TABLE user;が実行されます。これを防ぐために、アクセス許可が制限された特定の PostgreSQL ユーザーを作成することを強くお勧めします。

次のコード例は、アクセス許可が制限された特定の PostgreSQL ユーザーの作成を示しています。

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

ユーザーがパブリックロールから不要なアクセス許可を取得していないことを確認します。

クエリエディタ

PostgreSQL クエリエディタは、グラフまたは Singlestat パネルの編集モードのメトリクスタブにあります。パネルタイトルを選択して編集モードに入り、編集します。

クエリエディタには、パネル編集モードでクエリが実行された後に表示される生成 SQL リンクがあります。これを選択すると、実行された未加工の補間された SQL 文字列が展開されて表示されます。

テーブル、時間列、メトリクス列 (FROM) を選択する

初めて編集モードに入るか、新しいクエリを追加すると、Grafana はタイムスタンプ列と数値列を持つ最初のテーブルをクエリビルダーに事前入力しようとします。

FROM フィールドで、Grafana はデータベースユーザーの search_path にあるテーブルを提案します。にないテーブルまたはビューを選択するには、search_path などの完全修飾名 (schema.table) を手動で入力できますpublic.metrics

Time 列フィールドは、時間値を保持する列の名前を参照します。メトリクス列フィールドの値の選択はオプションです。値を選択すると、メトリクス列フィールドがシリーズ名として使用されます。

メトリクス列の候補には、テキストデータ型 (char、varchar、text) の列のみが含まれます。メトリクス列として異なるデータ型の列を使用するには、キャスト を使用して列名を入力しますip::text。などのテキストデータ型に評価されるメトリクス列フィールドに任意の SQL 式を入力することもできますhostname || ' ' || container_name

列、ウィンドウ、集計関数 (SELECT)

SELECT 行では、使用する列と関数を指定できます。列フィールドでは、 などの列名の代わりに任意の式を記述できますcolumn1 * column2 / column3

クエリエディタで使用できる関数は、データソースの設定時に選択した PostgreSQL のバージョンによって異なります。集計関数を使用する場合は、結果セットをグループ化する必要があります。集計関数を追加すると、エディタは自動的に を追加しますGROUP BY time

エディタは、クエリのこの部分を簡素化して統合しようとします。

さらに値列を追加するには、プラスボタンを選択し、メニューからを選択します。グラフパネルには、複数の値列が別々のシリーズとしてプロットされます。

データのフィルタリング (WHERE)

フィルターを追加するには、WHERE条件の右側にあるプラスアイコンを選択します。フィルターを削除するには、フィルターを選択し、 の削除を選択します。現在選択されている時間範囲のフィルターが新しいクエリに自動的に追加されます。

グループ化の基準

時間または他の列でグループ化するには、GROUP BY 行の末尾にあるプラスアイコンを選択します。提案ドロップダウンリストには、現在選択されているテーブルのテキスト列のみが表示されますが、手動で任意の列を入力できます。項目を選択し、 の削除 を選択すると、グループを削除できます。

グループ化を追加する場合、選択したすべての列に集計関数が適用されている必要があります。グループ化を追加すると、クエリビルダーは集計関数なしですべての列に集計関数を自動的に追加します。

ギャップ埋め

Amazon Managed Grafana は、時間別にグループ化すると、欠損値を入力できます。時間関数は 2 つの引数を受け入れます。最初の引数はグループ化する時間枠で、2 番目の引数は Grafana で欠落している項目を埋める値です。

テキストエディタモード (RAW)

raw クエリエディタモードに切り替えるには、ハンバーガーアイコンを選択し、エディタモードを切り替えるか、クエリの下にある SQL の編集を選択します。

注記

raw クエリエディタを使用する場合は、クエリに少なくとも ORDER BY timeと、返された時間範囲のフィルターがあることを確認してください。

マクロ

マクロはクエリ内で使用して構文を簡素化し、動的部分を可能にします。

マクロの例 説明
$__time(dateColumn) UNIX タイムスタンプに変換し、列の名前を に変更する式に置き換えられますtime_sec。例えば、UNIX_TIMESTAMP(dateColumn ) を time_sec として指定します。
$__timeEpoch(dateColumn) UNIX タイムスタンプに変換し、列の名前を に変更する式に置き換えられますtime_sec。例えば、UNIX_TIMESTAMP(dateColumn ) を time_sec として指定します。
$__timeFilter(dateColumn) 指定された列名を使用する時間範囲フィルターに置き換えられます。例えば、dateColumn BETWEEN FROM_UNIXTIME(1494410783) AND FROM_UNIXTIME(1494410983) などです。
$__timeFrom() 現在アクティブな時間選択の開始に置き換えられます。例えば、FROM_UNIXTIME(1494410783) などです。
$__timeTo() 現在アクティブな時間選択の終了に置き換えられます。例えば、FROM_UNIXTIME(1494410983) などです。
$__timeGroup(dateColumn,'5m') GROUP BY 句で使用できる式に置き換えられます。例えば、cast(cast(UNIX_TIMESTAMP(dateColumn )/(300) as signed)300 as signed)、*
$__timeGroup(dateColumn,'5m', 0) 前の行と同じですが、fill パラメータを指定すると、そのシリーズの欠落したポイントは grafana によって追加され、0 が値として使用されます。
$__timeGroup(dateColumn,'5m', NULL) 上記と同じですが、NULL が欠落ポイントの値として使用されます。
$__timeGroup(dateColumn,'5m', previous) 上記と同じですが、まだ NULL が表示されていない場合は、そのシリーズの以前の値がフィル値として使用されます (Grafana 5.3+ でのみ使用可能)。
$__timeGroupAlias(dateColumn,'5m') $__timeGroup と同じですが、列エイリアスが追加されます
$__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 タイムスタンプとして保存される時間。

テーブルクエリ

クエリオプションがテーブル としてフォーマットに設定されている場合、基本的に任意のタイプの SQL クエリを実行できます。テーブルパネルには、クエリが返す列と行の結果が自動的に表示されます。

通常の as SQL 列選択構文を使用して、テーブルパネル列の名前を制御できます。

時系列クエリ

Format を に設定した場合Time series、例えばグラフパネルで使用するには、クエリは SQL 日時または Unix エポックを表す任意の数値データ型を返timeす という名前の列を返す必要があります。time と を除くすべての列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 パラメータを使用して、代わりに null 値をゼロに変換しています。

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 クエリを記述できます。このクエリはドロップダウン選択ボックスとして表示されます。

例えば、テンプレート変数 Query 設定でこのようなクエリを指定した場合、テーブル内の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)

もう 1 つのオプションは、キー/値変数を作成できるクエリです。クエリは、 __textおよび という名前の 2 つの列を返す必要があります__value__text 列の値は一意である必要があります (一意でない場合は、最初の値が使用されます)。ドロップダウンリストのオプションには、わかりやすい名前をテキストとして、ID を値として指定できるテキストと値があります。をテキストhostname、 を値idとするクエリの例:

SELECT hostname AS __text, id AS __value FROM host

ネストされた変数を作成することもできます。という名前の変数を使用するとregion、ホスト変数に現在選択されているリージョンのホストのみを表示させることができます。次のコード例は、このようなクエリを示しています ( regionが複数値変数の場合は、複数の値と照合=するのではなく、IN比較演算子を使用します)。

SELECT hostname FROM host WHERE region IN($region)

__searchFilter を使用してクエリ変数で結果をフィルタリングする

クエリフィールド__searchFilterで を使用すると、ドロップダウン選択ボックスでユーザーが入力した内容に基づいてクエリ結果がフィルタリングされます。ユーザーによって何も入力されていない場合、 のデフォルト値は __searchFilterです%

注記

Grafana ではこれが行われないため、__searchFilter式を引用符で囲むことが重要です。

次の例は、 をクエリフィールド__searchFilterの一部として使用して検索を有効にする方法を示しています。hostnameドロップダウン選択ボックスのユーザータイプ。

SELECT hostname FROM my_host WHERE hostname LIKE '$__searchFilter'

クエリでの変数の使用

テンプレート変数の値は、テンプレート変数が の場合にのみ引用符で囲まれますmulti-value

変数が複数値変数の場合は、複数の値と照合=するのではなく、IN比較演算子を使用します。

次の 2 つの構文があります。

$<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 Managed Grafana は、複数値変数の引用符で区切られたカンマ区切りの文字列を自動的に作成します。例えば、 server01server02を選択した場合、 の形式になります'server01', 'server02'。引用を無効にするには、変数に csv フォーマットオプションを使用します。

${servers:csv}

可変フォーマットオプションの詳細については、「」を参照してくださいテンプレートと変数

‏注釈

注釈を使用して、グラフの上に豊富なイベント情報をオーバーレイします。ダッシュボードメニュー/注釈ビューを使用して注釈クエリを追加します。詳細については、「‏注釈」を参照してください。

次のサンプルコードは、エポック値を持つ時間列を使用したクエリを示しています。

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

次のサンプルコードは、エポック値を持つ時間および時間終了列を使用したリージョンクエリを示しています。

注記

これは 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 イベントタグにカンマ区切りの文字列として使用するオプションのフィールド名。

アラート

時系列クエリはアラート条件で機能する必要があります。テーブル形式のクエリは、アラートルール条件ではまだサポートされていません。