New RelicのSnowflake integrationを利用することで、Snowflakeのクエリ パフォーマンス、ストレージ システムやウェアハウスの状態、請求情報などを収集し可視化します。
Snowflake integration with flex とは
Snowflake integration with flexは New Relic Flex でSQLクエリをSnowflakeに対して実行しACCOUNT_USAGEスキーマからデータを取得します。
ACCOUNT_USAGEスキーマにはSnowflakeアカウントのオブジェクトメタデータと使用状況を表示するビューが用意されており、これらのビューからSnowflakeの利用状況を可視化できるようになります。
Snowflake integration with flexでは次のビューからデータを取得しています。
ビュー | ビューに含まれるデータ |
---|---|
AUTOMATIC_CLUSTERING_HISTORY | 自動クラスタリングに対して請求されたクレジットの数など |
DATABASE_STORAGE_USAGE_HISTORY | データベースの1日あたりの平均ストレージ使用量 |
DATA_TRANSFER_HISTORY | Snowflakeテーブルから別のクラウドストレージプロバイダーのネットワークに転送されたデータの履歴 |
LOGIN_HISTORY | Snowflakeユーザーによるログイン試行 |
METERING_HISTORY | アカウントの時間単位のクレジット使用状況 |
PIPE_USAGE_HISTORY | Snowflakeテーブルにロードされたデータの履歴 |
QUERY_HISTORY | Snowflakeクエリの履歴 |
REPLICATION_USAGE_HISTORY | 指定したデータベースのレプリケーション履歴 |
STAGE_STORAGE_USAGE_HISTORY | アカウントのSnowflake内部ステージすべての1日あたりの平均データストレージ使用量 |
STORAGE_USAGE | 1日あたりの平均データストレージ使用量 |
TABLE_STORAGE_METRICS | テーブルレベルのストレージ使用率情報 |
WAREHOUSE_LOAD_HISTORY | ウェアハウスのワークロード |
WAREHOUSE_METERING_HISTORY | 単一のウェアハウス(またはアカウント内にあるすべてのウェアハウス)における毎時のクレジット使用状況 |
ACCOUNT_USAGEスキーマの詳細については公式ドキュメントを参照してください。
ACCOUNT_USAGEスキーマは最新のデータが反映されるまでの待機時間があります。
詳細は上記の公式ドキュメントをご確認ください。
はじめてみよう
それではSnowflake integration with flexをセットアップしてみましょう。
この手順ではLinux環境にSnowflake CLI クライアントとNew Relic Infrastructure Agentをインストールします。
New Relicのアカウントをお持ちでない方は 無料アカウント を作成の上、お試しください! 全機能使い放題のユーザー1名と100GBのデータ転送が無料 で使えます。
Infrastructure Agentのインストールはこちらの記事も参考にしてください。
1. Snowflake CLI クライアントのインストール
SnowSQLが実行するためのSnowflake CLI クライアントをインストールします。
インストール手順は公式ドキュメントを参考にしてください。
2. Snowflake integration with flexのセットアップ
-
New Relicの管理画面にログインし、[+ Integrations & Agents] -> [Snowflake] を選択します。
-
User Keyを指定し、➁に表示されたコマンドをコピーしてLinux上で実行するとInfrastructure Agentのインストールが開始されます。
-
Infrastructure Agentが正常にインストールされたことを確認し、[Continue] をクリックします。
-
Snowflakeの「ACCOUNT」「USERNAME」「PASSWORD」を入力します。入力した値がSnowSQLのコマンドに反映されます(黄色)。
-
表示されたコマンドがLinux上で1分毎に実行されるようにcronを設定します。
これらのコマンドによりSnowflakeにSQLクエリが実行され、コマンドの最後に指定された一時ファイルにデータが出力されます。New Relic Flexはこの一時ファイルを指定された間隔で読み取り、にインジェストします。
-
cronの設定が完了したら、[Continue] をクリックします。
-
New Relic Flexの構成ファイル (nri-snowflake-config.yml) を作成し、[Continue] をクリックします。
構成ファイル内の interval は 「30s」に設定されています。cronで実行するSnowSQLは[1分]なので重複したデータがインジェストされる場合があります。SQLクエリの内容に応じてこれらの間隔を変更してください。
-
Infrastructure Agentを再起動し、[Continue] をクリックします。
-
Statusが「Successful」になることを確認し、[Continue] をクリックします。
データを確認してみよう
ダッシュボードには次のデータが表示されます。Snowflakeのパフォーマンスやコストの確認、改善などに活用してください。
- Overview
- ストレージにスピルされたバイト数
- ログイン履歴
- ウェアハウスのパフォーマンス
- Query Performance
- クエリの実行時間
- Storage
- 平均データストレージ使用量
- ストレージにスピルされたバイト数
- Billing
- クレジットの使用状況
Tips
ここではSnowflake integration with flexのSnowSQLコマンドやSQLクエリのカスタマイズについて補足します。ご利用の環境にあわせて試してみてください。
-
SnowSQLのコマンドにユーザー名やパスワードを記述しない
[+ Integrations & Agents] でガイドされるSnowSQLのコマンドにはアカウントやユーザー名などの接続パラメータが直接記述されています。セキュリティや保守性などの観点から、これらの情報はSnowSQLのconfigファイルに記述することをご検討ください。
SnowSQL configの設定例
[connections] accountname = XXXXX username = YYYYY password = ZZZZZ
SnowSQLのコマンド例
snowsql -o output_format=json -o remove_comments=true -o header=true -o timing=false -o friendly=false -q .....
接続パラメータは以下のように名前付き接続定義で指定することもできます。
SnowSQL configの設定例 (名前付き接続定義)
[connections.example] accountname = XXXXX username = YYYYY password = ZZZZZ
SnowSQLのコマンド例 (名前付き接続定義)
snowsql -c example -o output_format=json -o remove_comments=true -o header=true -o timing=false -o friendly=false -q .....
-
データの期間範囲の調整
SQLクエリによってはすべての期間のデータを取得するため、インジェスト量が増えたり重複するデータが発生します。WHERE句で START_TIME カラムに対するフィルタ条件を指定してみてください。SQLクエリの例
SELECT QUERY_ID, QUERY_TEXT, (EXECUTION_TIME / 60000) AS EXEC_TIME, WAREHOUSE_NAME, USER_NAME, EXECUTION_STATUS FROM "SNOWFLAKE"."ACCOUNT_USAGE"."QUERY_HISTORY" WHERE EXECUTION_STATUS = '\''SUCCESS'\'' AND START_TIME > DATEADD("s", -60, current_timestamp()) ORDER BY EXECUTION_TIME DESC;
この例では現在日時から60秒前以降のデータを対象にしています。時間はcronの実行間隔にあわせてみてください。
-
レコードの日時をtimestampにマップする
デフォルトではインジェストした日時が timestamp にマップされます。クエリの実行履歴(QUERY_HISTORY)などでは、そのクエリの実行日時が timestamp であれば調査がしやすくなります。
timestamp を上書きするにはNew Relic Flexの構成ファイルでキーをリネームします。SQLクエリにSTART_TIMEを追加
SELECT START_TIME, QUERY_ID, QUERY_TEXT, (EXECUTION_TIME / 60000) AS EXEC_TIME, WAREHOUSE_NAME, USER_NAME, EXECUTION_STATUS FROM "SNOWFLAKE"."ACCOUNT_USAGE"."QUERY_HISTORY" WHERE EXECUTION_STATUS = '\''SUCCESS'\'' AND START_TIME > DATEADD("s", -60, current_timestamp()) ORDER BY EXECUTION_TIME DESC;
New Relic Flex 構成ファイルの変更例
- name: nri-flex interval: 30s config: name: snowflakeLongestQueries apis: - name: snowflakeLongestQueries file: /home/ubuntu/dev/snowflake-longest-queries.json timestamp_conversion: START_TIME: TIMESTAMP::2006-01-0215:04:05.000-0700 rename_keys: START_TIME: timestamp
その他
New Relicでは、新しい機能やその活用方法について、QiitaやXで発信しています!
無料でアカウント作成も可能なのでぜひお試しください!
New Relic株式会社のX(旧Twitter) や Qiita OrganizationOrganizationでは、
新機能を含む活用方法を公開していますので、ぜひフォローをお願いします。
無料のアカウントで試してみよう!
New Relic フリープランで始めるオブザーバビリティ!