7
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

New RelicでSnowflakeの使用状況を可視化してみよう

Last updated at Posted at 2024-12-23

New RelicのSnowflake integrationを利用することで、Snowflakeのクエリ パフォーマンス、ストレージ システムやウェアハウスの状態、請求情報などを収集し可視化します。

Dashboard

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のセットアップ

  1. New Relicの管理画面にログインし、[+ Integrations & Agents] -> [Snowflake] を選択します。
    NewRelic

  2. [Begin installation] をクリックします。
    NewRelic

  3. User Keyを指定し、➁に表示されたコマンドをコピーしてLinux上で実行するとInfrastructure Agentのインストールが開始されます。
    NewRelic

  4. Infrastructure Agentが正常にインストールされたことを確認し、[Continue] をクリックします。

  5. Snowflakeの「ACCOUNT」「USERNAME」「PASSWORD」を入力します。入力した値がSnowSQLのコマンドに反映されます(黄色)。
    NewRelic

  6. 表示されたコマンドがLinux上で1分毎に実行されるようにcronを設定します。

    これらのコマンドによりSnowflakeにSQLクエリが実行され、コマンドの最後に指定された一時ファイルにデータが出力されます。New Relic Flexはこの一時ファイルを指定された間隔で読み取り、にインジェストします。

  7. cronの設定が完了したら、[Continue] をクリックします。

  8. New Relic Flexの構成ファイル (nri-snowflake-config.yml) を作成し、[Continue] をクリックします。
    NewRelic

    構成ファイル内の interval は 「30s」に設定されています。cronで実行するSnowSQLは[1分]なので重複したデータがインジェストされる場合があります。SQLクエリの内容に応じてこれらの間隔を変更してください。

  9. Infrastructure Agentを再起動し、[Continue] をクリックします。

  10. [Test connection] をクリックし、データのインジェストを確認します。
    Snow06.png

  11. Statusが「Successful」になることを確認し、[Continue] をクリックします。

  12. ダッシュボードやアラートが追加されます。
    NewRelic

  13. [See your data] をクリックすると追加したダッシュボードを確認できます。
    NewRelic

データを確認してみよう

ダッシュボードには次のデータが表示されます。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 フリープランで始めるオブザーバビリティ!

7
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?