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

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

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

MySQL データソースを追加して、MySQL 互換データベースからデータをクエリおよび視覚化できるようにします。

重要

Grafana バージョン 8.0 では、MySQL 、Postgres、Microsoft SQL Server データソースのデータフレームの基盤となるデータ構造が変更されます。その結果、時系列のクエリ結果が幅広い形式で返されます。詳細については、Grafana データフレームドキュメントの「ワイドフォーマット」を参照してください。

視覚エフェクトを以前と同じように機能させるには、手動による移行が必要になる場合があります。1 つの解決策は、Github の 「Postgres/MySQL/MSSQL: Breaking change in v8.0 related to time series queries and ordering of data column」に記載されています。

データソースの追加

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

  2. [ダッシュボード] リンクのサイドメニューには、[データソース] という名前のリンクがあります。

  3. 上部ヘッダーの [+ データソースの追加] ボタンを選択します。

  4. [タイプ] ドロップダウンリストから [MySQL] を選択します。

データソースオプション

名前 説明
Name データソース名。これは、パネルとクエリ内へのデータソースの表示のされ方です。
Default デフォルトのデータソースは、新しいパネル用に事前に選択されたデータソースです。
Host MySQL インスタンスの IP アドレス/ホスト名とオプションのポート。
Database MySQL データベースの名前。
User データベースユーザーのログイン/ユーザー名。
Password データベースユーザーのパスワード。
Max open データベースへのオープン接続の最大数。デフォルトは unlimited です (Grafana v5.4 以降)。
Max idle アイドル接続プールの最大接続数。デフォルトは 2 です (Grafana v5.4 以降)。
Max lifetime 接続を再利用できる秒単位の最大時間。デフォルトは 14400/4 時間です。これは常に MySQL (Grafana v5.4 以降) で設定された [wait_timeout] よりも小さくする必要があります。

最小時間間隔

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

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

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

重要

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

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

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

より多くのデータベースやテーブルへのアクセスを許可するには、必要に応じてデータベースやテーブルの代わりにワイルドカード文字 (*) を使用できます。

クエリエディタ

MySQL クエリエディタは、パネルの [編集] モードの [メトリクス] タブにあります。パネルタイトルを選択して [編集] モードに入り、次に [編集] を選択します。

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

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

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

FROM フィールドでは、Grafana は設定されたデータベースにあるテーブルを提案します。データベースユーザーがアクセスできる別のデータベースでテーブルまたはビューを選択するには、otherDb.metrics などの完全修飾名 (database.table) を手動で入力できます。

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

メトリクス列の提案には、テキストデータ型 (テキスト、小テキスト、中テキスト、ロングテキスト、varchar、char) の列のみが含まれます。メトリクス列として異なるデータ型を持つ列を使用する場合は、キャスト CAST(numericColumn as CHAR) を使用して列名を入力できます。CONCAT(column1, " ", CAST(numericColumn as CHAR)) などのテキストデータ型に評価される任意の SQL 式をメトリクス列フィールドに入力することもできます。

列と集計関数 (SELECT)

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

集計関数を使用する場合は、結果セットをグループ化する必要があります。集計関数を追加すると、エディタは自動的に GROUP BY time を追加します。

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

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

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

グループ化の条件

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

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

ギャップ埋め

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

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

ハンバーガーアイコン (三) を選択し、[スイッチエディタモード]を選択するか、クエリの下にある [SQL の編集] を選択して、未加工クエリエディタモードに切り替えることができます。

注記

未加工クエリエディタを使用する場合は、クエリに少なくとも 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 と同じように置き換えられますが、列エイリアスが追加されます (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 文字列が展開されて表示されます。

テーブルクエリ

[Format as] クエリオプションが[テーブル]に設定されている場合、基本的に任意のタイプの 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 列選択構文を使用して制御できます。

時系列クエリ

例えばグラフパネルで使用するために [Format as][時系列]に設定した場合、クエリは SQL 日時または Unix エポックを表す任意の数値データ型を返す time という名前の列を返す必要があります。time および 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 パラメータを使用して NULL 値をゼロに変換する方法を示しています。

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 はそれらの列からリストを自動的に作成します。例えば、次のクエリは、 hostnamehostname2 の値を含むリストを返します。

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)

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

次のコード例は、 hostname をテキストとして、 id を値として持つクエリを示しています。

SELECT hostname AS __text, id AS __value FROM my_host

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

SELECT hostname FROM my_host WHERE region IN($region)

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

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

注記

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

次の例は、__searchFilter をクエリフィールドの一部として使用してユーザーがドロップダウン選択ボックスに入力するときに hostname を検索できるようにします。

SELECT hostname FROM my_host WHERE hostname LIKE '$__searchFilter'

クエリでの変数の使用

Grafana 4.3.0 から 4.6.0 まで、テンプレート変数は常に自動的に引用符で囲まれるため、文字列値の場合は、その変数を引用符で囲まないでください。

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

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

2 つの構文があります。

$<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}

変数形式オプションの詳細については、「高度な変数フォーマットオプション」を参照してください。

‏注釈

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

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

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

次のコード例は、エポック値を持つ時間列と timeend 列を使用するリージョンクエリを示しています。

注記

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

[アラート]

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