5
5

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 APMでSnowflakeのSQLクエリを確認してみよう

Last updated at Posted at 2024-12-24

New Relic APMはアプリケーションから発行されたSQLクエリの実行回数やパフォーマンス、SQL文などを確認できます。この記事ではSnowflakeに発行されたSQLクエリを可視化してみます。

APMの概要について理解されたい方は以下の記事をご確認ください。

はじめてみよう

今回は「Integrating Snowflake with Spring Boot」で公開されている、アプリケーションをAmazon Linux 2023上で構築しNew Relic APMを導入してみます。

New Relicのアカウントをお持ちでない方は 無料アカウント を作成の上、お試しください! 全機能使い放題のユーザー1名と100GBのデータ転送が無料 で使えます。

1. アプリケーションのインストール

  1. Amazon Linux 2023にJavaとgitをインストールします。
    sudo yum install java git
    
  2. アプリケーションをCloneします。
    git clone https://github.com/kavyababu7/springboot-snowflake-connect
    
  3. プロジェクトディレクトリに移動します
    cd springboot-snowflake-connect
    

2. アプリケーションの設定

  1. pom.xmlに記述されているSnowflake JDBCの依存関係のバージョンを変更します。

    pom.xml
    <dependency>
        <groupId>net.snowflake</groupId>
        <artifactId>snowflake-jdbc</artifactId>
        <version>3.13.29</version>
    </dependency>
    
  2. Snowflakeの接続プロパティを設定します。

    src/main/resources/application.properties
    spring.datasource.username=<USERNAME>
    spring.datasource.password=<PASSWORD>
    spring.datasource.driverClassName=net.snowflake.client.jdbc.SnowflakeDriver
    snowflake.account=<SNOWFLAKE ACCOUNT>
    snowflake.schema=<SCHEMA>
    snowflake.database.name=<DATABASE NAME>
    snowflake.warehouse=<WAREHOUSE NAME>
    # Snowflake connection properties
    spring.datasource.url=jdbc:snowflake://${snowflake.account}.snowflakecomputing.com/?db=${snowflake.database.name}&schema=${snowflake.schema}&warehouse=${snowflake.warehouse}&JDBC_QUERY_RESULT_FORMAT=JSON
    
    spring.jpa.properties.hibernate.dialect=EmptyDialect
    

    クエリ結果をJSON形式で取得するため spring.datasource.url&JDBC_QUERY_RESULT_FORMAT=JSON を追加してください

  3. hibernate dialectを処理するための空のdialectを作成します。

    src/main/java/EmptyDialect.java
    import org.hibernate.dialect.Dialect;
    
    public class EmptyDialect extends Dialect {}
    

3. サンプルデータの投入

  1. Snowflakeにテーブルを作成しデータを追加します。

    create or replace TABLE NEWR.PUBLIC.T_CAR (
    	CAR_ID NUMBER(4,0),
    	CAR_NAME VARCHAR(10),
    	CAR_MODEL VARCHAR(10),
    	CAR_MAKE_YEAR NUMBER(4,0),
    	NUMBER_PLATE VARCHAR(4)
    );
    
    INSERT INTO NEWR."PUBLIC".T_CAR (CAR_ID, CAR_NAME, CAR_MODEL, CAR_MAKE_YEAR, NUMBER_PLATE) VALUES(1, 'CAR1', 'MODEL1', 2024, '1');
    INSERT INTO NEWR."PUBLIC".T_CAR (CAR_ID, CAR_NAME, CAR_MODEL, CAR_MAKE_YEAR, NUMBER_PLATE) VALUES(2, 'CAR2', 'MODEL2', 2024, '2');
    

4. アプリケーションの動作確認

  1. アプリケーションを起動します。

    ./mvnw clean package
    java -jar target/*.jar
    
  2. ブラウザでアクセスできることを確認します。本アプリケーションはデフォルトでTCP:8080でListenします。

    http://<URL>:8080/api/cars?numberPlate=1
    

Snowflake

  1. 起動確認できたらアプリケーションを Ctrl + C で停止します。

5. New Relic APMの導入

Spring BootにAPM Agentを導入しますが、弊社エンジニアが別の記事で手順を公開していますので、そちらを参考に導入してください。
[APM Agentを導入] -> [Amazon Linux 2023にインストール]

New Relic上に表示されるアプリケーション名は元の記事の画像にある「petclinic」ではなく、本アプリケーションを識別しやすい名称を入力してください

6. SQLクエリの確認

  1. New Relicの [APM & Services] から今回追加したアプリケーションを選択します。

  2. [Summary] の [Transactions] セクションから「api/cars (GET)」の 「Slowest trace」に表示される値をを選択します。
    Snowflake

  3. [Transaction trace] セクションから **** を選択すると、[Attribute]にSQLクエリが表示されます。
    Snowflake

  4. [Database queries] タブからもSQLクエリを確認することができます。
    Snowflake04


New Relic APMの簡単なセットアップで、JavaアプリケーションからSnowflakeに発行されるSQLクエリがNew Relic APMで確認できるようになりました。
皆さんのアプリケーションの品質維持や改善にぜひご活用ください!

その他

New Relicでは、新しい機能やその活用方法について、QiitaやXで発信しています!
無料でアカウント作成も可能なのでぜひお試しください!

New Relic株式会社のX(旧Twitter)Qiita OrganizationOrganizationでは、
新機能を含む活用方法を公開していますので、ぜひフォローをお願いします。

無料のアカウントで試してみよう!
New Relic フリープランで始めるオブザーバビリティ!

5
5
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
5
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?