🎉

Amazon Timestream のデータを Grafana で参照する際に、表示したい時刻範囲をクエリに反映する方法

2022/09/17に公開

結論

問題

Amazon TimestreamのデータをGrafanaで参照した時、5分の範囲指定でもなかなかグラフが表示されない。

対応

調査

Grafanaのinspectでは 504 Gateway Time-out が出ていた。
おそらくクエリが重い。

クエリによってスキャンされたバイト数も大きそう。
比較対象を持ち合わせていないのでどれだけ厳しめなのか分からないが、少なくとも60秒では捌けないということ。

クエリを改善したい。

解決策

https://grafana.com/grafana/plugins/grafana-timestream-datasource/
を見て、$__timeFilter を指定するようにした。
例えば、where name='foo' and $__timeFilterのような形。

これを指定すると、表示したい時刻範囲が、Grafanaが発行するクエリに追加される。
例えば、 time BETWEEN from_milliseconds(1663377042720) AND from_milliseconds(1663378842720) が追加される。

30分の範囲で見ても400Mなので、だいぶ収まった。

全範囲とってきて表示する際に調整、みたいなことになっていたんだろうか・・恐ろしい。

余談

今回適した解決策ではないが、timeoutの時間を長くする手もあるように思う。
が、どうやるか見つけられなかった。

https://docs.aws.amazon.com/ja_jp/timestream/latest/developerguide/API_query_Query.html
には、

Query is a synchronous operation that enables you to run a query against your Amazon Timestream data. Query will time out after 60 seconds. You must update the default timeout in the SDK to support a timeout of 60 seconds. See the code sample for details.

Queryは、Amazon Timestreamのデータに対してクエリを実行することができる同期操作です。Query は 60 秒後にタイムアウトします。60秒のタイムアウトをサポートするために、SDKのデフォルトのタイムアウトを更新する必要があります。詳しくはコードサンプルをご覧ください。

(翻訳はDeepL)
とあり、SDKで何かしらできそうだがよく分かっていない。

https://docs.aws.amazon.com/ja_jp/general/latest/gr/timestream.html
には、

クエリの実行期間 (時間)
サポートされている各リージョン: 1

とあるので、1時間までは許容される手段がありそうには思う。

Discussion