Memo/Grafana/Athena

https://dexlab.net:443/pukiwiki/index.php?Memo/Grafana/Athena
 

AWS Athena Datasource


mtanda/grafana-aws-athena-datasource


Cache Durationの指定

  • Queryの結果を保持する期間を設定できる。「10s」「5m」「1h」等
  • デフォルトの0sだと、ダッシュボード表示毎(自動的にリロード毎)に毎回Athenaにリクエストするためコストもかかるし、遅いのでCache Durationは設定した方が良い。

問題:

  • v2.2.7:
    • 「Max Rows」は「空欄」の状態から、値を入れるとデータが消える
    • キャッシュキーは「query execution id」と「Max Rows」
    • 明示的にキャッシュを削除する方法が不明

Time Formatの指定

  • デフォルトはgolangの RFC3339Nano が指定されており、「2006-01-02T15:04:05.999999999Z07:00」のようなフォーマット
  • データソースがそれ以外のフォーマット(例「2020-08-01 00:00:00」)だと、以下のエラーが発生する
    parsing time "2020-08-01 00:00:00" as "2006-01-02T15:04:05.999999999Z07:00": cannot parse " 00:00:00" as "T"
    • time.Parse() が使われている。
    • golangのParse(layout, value) のlayoutは「2006-01-02 15:04:05」を指定する。一般的な「YYYY-MM-DD hh:mm:ss」のような書式ではない。

Timestamp Columnの指定

  • 時系列のグラフを出したい時など、どのカラムがtimestampなのかを指定する必要がある
  • Timestamp Columnが未設定だと、文字列として扱われるようだ。
  • RFC3339(iso-8601)書式以外は、Time Formatに書式を指定する

ELB logの場合: timestampカラムがiso-8601形式

  • 空の場合: 2020-08-03T09:00:43.338346Z
  • timestampを設定後: 2020-08-03 09:00:43

トラブルシューティング


実行時間が長いqueryがNo dataと表示される

現象:

  • Grafana v7.0.6
  • 60秒程度のqueryの結果がGrafanaでは「No data」と表示される。30秒くらいで、ロード中のアイコンが消えて「No data」と表示される。
  • AWS consoleのAthenaで同じqueryを実行すると成功する。
  • /var/log/grafana/grafana.log のログ
    t=2020-09-01T02:03:04+0000 lvl=warn msg="Get Query Results Warning" logger=plugins.backend pluginId=mtanda-aws-athena-datasource warn="Query has not yet finished. Current state: RUNNING"

解決:

  • 不明

その他:

  • dataproxyのtimeoutを伸ばしても無関係

「AccessDenied (Service: Amazon S3; ...)」で失敗する場合

S3のどのAPIが失敗したのか表示されないため、getなのかputなのかの区別が付かず、原因解決が難しい

  • Grafana athena datasourceでOutput Locationの設定は必須。設定が無いと、Query Stringが表示されない。
  • 履歴を確認
    • スキャンしたデータ: 0KB -> スキャン対象のs3 bucketのreadに失敗している。
    • Query Stringの場合、s3:GetBucketLocation, s3:GetObject, s3:ListBucket権限があるか。
    • Query Execution idの場合、s3:GetObjectがあれば表示はされる。
  • 出力結果を書き込む対象のs3 bucketに対して、write権限があるか。
    • s3:AbortMultipartUpload, s3:PutObject が必要

Table Panelで一覧表示されない

  • 現象
    • ELBのlogだと、以下のようにヘッダと1行目は表示されるが、2行目以降がプルダウンになり、一覧で表示されない

athena-legend.png

  • 解決
    • issue を参考に修正。なぜこれで直るのか不明。
      Legend Format: {{ }}

Datasourceの説明を見る

  • PanelのDatasourceの右横にある「?」アイコンをクリック。内容は README.md と同じに見える

athena-datasource-help.png


Query String: GrafanaからSQLを実行

  • README.md に実験的な機能とある
  • SQLを指定して実行し、結果を取得できる。結果が動的に変わるような使い方に有効。
  • Query Execution Idは実行済みの結果。AthenaでSQLを実行するとIDが付く。S3に保存された結果を表示しているので静的?
  • Grafana > Configration > Data SoucesでAthena Workspaceの出力先を指定する。これがないと、SQLが保存されない?
    Output Location: s3://aws-athena-query-results-123456789012-ap-northeast-1/output/grafana/

クロスアカウントの場合のs3 bucket policy

  • 例: アカウントA(111111111111)から、アカウントB(222222222222)のexample-bucketの中身を読みたい。なぜかs3:ListBucket, s3:GetBucketLocationが無いと失敗する。
    {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Sid": "AthenaRead",
                "Effect": "Allow",
                "Principal": {
                    "AWS": "arn:aws:iam::222222222222:root"
                },
                "Action": [
                    "s3:ListBucket",
                    "s3:GetObject",
                    "s3:GetBucketLocation"
                ],
                "Resource": [
                    "arn:aws:s3:::example-bucket/*",
                    "arn:aws:s3:::example-bucket"
                ]
            }
        ]
    }
  • Query Execution Idのみ指定する場合は、s3:GetObjectだけで成功した。

インストール

Athenaの仕組みを理解している必要がある。

  • S3上のログをデータソースとする場合、Input用のs3 bucketが必要
  • Databaseや結果を保存するためのs3 bucketが必要。AWS consoleからAthenaを触ると勝手に作られる
    • outputには出力が貯まり続けて、コストが嵩むので、s3 life cycleで古いデータは消すように設定すると良い。シンプルに保つために、複数のWorkgroupの出力先を「output/<workspace>」にしている。例: prefix「output/」、「expiration days: 90」
    • 例: s3://aws-athena-query-results-123456789012-ap-northeast-1/output/grafana/
  • Athena Workgroup
    • 出力先s3 bucketを明示的に指定する。Databaseと検索結果が保存されているように見える
    • Grafana Dashbordを開く度にクエリが実行されるため、スキャン上限も100MB等の少なめに設定してから試した方が良い。 デフォルト(primary Workgroup)では無制限になっているためコスト的に危険なので、primaryにもスキャン上限を設定すると良い。
    • QueryでもCache Durationが設定できるため、「5m」「1h」といった指定でキャッシュできる
  • EC2上にGrafanaを構築してある場合

grafana-aws-athena-datasourceのバージョン:

  • v2.2.7
    • Grafana v7.0.6では動作した。 v6.7.4やv7.1.0ではDatasource追加時にエラーになる。
    • Grafana v7.x未満の場合、データソースの登録画面でエラーが出て、GUIでは消せないデータソースが増えるので、APIで消す。
    • v2.2.5: Grafana v6.5.2 〜 v6.7.4でのエラー
      Error: Object prototype may only be an Object or null: undefined Evaluating
    • Memo/Grafana/API#me99dc17 で壊れたデータソースを消す方法
  • Grafana Labsには未登録だが、grafana-cliからインストールできる。
  1. https://github.com/mtanda/grafana-aws-athena-datasource/releases からzipのurlをコピー
    sudo grafana-cli --pluginUrl https://github.com/mtanda/grafana-aws-athena-datasource/releases/download/2.2.7/grafana-aws-athena-datasource-2.2.7.zip plugins install mtanda-aws-athena-datasource
    
    # CentOS 7の場合: /var/lib/grafana/plugins/ に展開された。
  2. Grafana v7.xでは unsignedなpluginがloadされないため、allow_loading_unsigned_plugins に許可するpluginをカンマ区切りで入力する
    sudo vim /etc/grafana/grafana.ini
    --
    [plugins]
    allow_loading_unsigned_plugins =  mtanda-aws-athena-datasource
    --
    sudo service grafana-server restart
  3. Grafana > Configration > Data Souces > Add Data Sourceから追加。Test&Saveでエラーが出なければOK
    • Name: Athena(account + region ?)
    • Auth Provider: Access & SecretKey
    • Access Key ID: (athenaと同アカウント、同リージョンのec2のinstance profileの場合は空)
    • Secret Access Key: (athenaと同アカウント、同リージョンのec2のinstance profileの場合は空)
    • Default Region: ap-northeast-1
    • Output Location: s3:///aws-athena-query-results-123456789012-ap-northeast-1/output/grafana/
    • Save&Test

添付ファイル: fileathena-legend.png 3件 [詳細] fileathena-datasource-help.png 3件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2020-09-15 (火) 12:16:08 (12d)