こんばんは。今晩は、Azure Data Explorerについて勉強しました。
いったい何者なのか、何ができるのか、どんな時に使うとよいのか、調べて分かったことを参考文献とともに箇条書きメモ形式でまとめておきたいと思います。
これを最後まで見ていただくと使用感含めてなんとなくわかった気になれる、、ことを目指して笑 少しでもイメージアップに役立ちましたら幸いです。
それではまいります。
Contents
Azure Data Explorerとは?
https://docs.microsoft.com/ja-jp/azure/data-explorer/data-explorer-overview
- 大量のデータをほぼリアルタイムで簡単に分析できるようにする、フル マネージドかつハイ パフォーマンスなビッグ データ分析プラットフォーム
- 構造化・半構造化・非構造化データが時系列で分析され、Machine Learning が使用されるので、重要な分析情報の抽出、パターンと傾向の特定、予測モデルの作成が簡単になる
- スケーラブルかつ安全で堅牢、そしてエンタープライズに対応しており、ログ分析、時系列分析、IoT、汎用の調査分析に役立つ
- データの探索にはKQL (Kustoクエリ言語)を用いる
Azure Data Explorerの使いどころ
公式ドキュメントなどをあさりながらAzure Data Explorerの使いどころを調べてみました。
アーキテクチャドキュメントで多かったのは、RDBMSが得意とするトランザクショナルデータではなく、以下のようなIoT機器が出力する時系列データなどのデータストアとして利用するパターンが多いように見えました。
確かにそうしたデータは、分析・可視化が主な目的になってくるので、SQL DatabaseのようなRDBMSにためるよりも、Data Explorerにためておいた方が素早く活用できてよい気がしますね。
Azure Data Explorer による監視
Azure Data Explorer を使用した IoT 分析
こうしたログをData Explorerに蓄積するメリットは、高速なクエリ以外に、他の分析ストアサービスよりもコストが抑えられる点にもありそうです。この点の詳細は価格の章で説明します。
ログを Azure Data Explorer に格納することで、データのクエリの機能を維持しながらコストを削減することができ、特にデータが増大する場合に役立ちます。
長期的なログ保持のために Azure Data Explorer を統合する | Microsoft Docs
その他気になったこと
そういえば、Data ExplorerではAzure SQL DatabaseなどのRDBMSからのデータ取り込みオプションが見当たらないこと。(できるのかもしれませんが・・)ネットを漁ってみてもそういったユースケースの記事が見つからない・・
データの取り込み元としては、下のアーキテクチャ図のようにBlobストレージやIoT Hub、Event Grid、Event Hubなど。あれ、SQL Databaseなどと共存するようなサービスではないのかな・・?
SQL Databaseなどと連携したMicrosoft公式のアーキテクチャパターンがないか探してみました。
こんなのがあった。
Azure Data Explorer による対話型分析
このアーキテクチャでは、Azure Data ExplorerプラグインのFederated Queryなるものを使ってSQL DBやCosmosDBのデータをクエリできるように読み取れる。Federated Queryについてなぜか公式ドキュメントが見つからず正体が不明ですが、何かしらの方法でデータに接続することはできそう。
Azure Monitor (Log Analytics)との違いは?
Log Analyticsは短期の保存・分析・監視用、Data Explorerは長期の分析用、という使い方ができそうです。
これとか
長期的なログ保持のために Azure Data Explorer を統合する | Microsoft Docs
これとかが参考になりそうです。
Azure Data Explorer を使用して Azure Monitor からエクスポートされたデータのクエリを実行する – Azure Monitor | Microsoft Docs
まずは短期の保存・分析・監視用にAzure Monitor (Log Analytics)でデータを持っておいて、一定期間をすぎたものはストレージにアーカイブし、これを分析する際にData Explorerからクエリする、というモデルで説明されています。
ちなみに、Data ExplorerからLog AnalyticsやApplication Insightsへのクエリもできるらしい?!
Azure Data Explorer では、Azure Data Explorer、Application Insights (AI)、Log Analytics (LA) 間のクロス サービス クエリがサポートされています。 Azure Data Explorer のクエリ ツールを使用して Log Analytics または Application Insights ワークスペースに対してクロスサービス クエリでクエリを実行できます。
Azure Data Explorer を使用して Azure Monitor でデータのクエリを実行する | Microsoft Docs
Azure Data Explorerのアーキテクチャ
公式ドキュメントに以下の絵があります。
- 最上位の概念はクラスター
- Azure Data Explorerでは、外部のデータソースからデータを取り込んでData Explorer内のデータベースに保持している。クラスターには10,000個のデータベースを保持でき、1つのデータベースにはさらに10,000個までテーブル保持できる。(大量データを保持可能)
- その他EngineとData Managementというコンポーネントがある
- Data Management経由でデータを取り込んで、エンジンでデータを取得する
- Data Managementの詳細の公式ドキュメントはこちら
- Engineの方の公式ドキュメントはこれっぽい
EngineとData Managementコンポーネントの役割をもう少し細かく見てみます。
Data Managementのアーキテクチャ
https://docs.microsoft.com/ja-jp/azure/data-explorer/ingest-data-overview
- 外部データソースからデータをプルして読み込む
- データはバッチ処理かストリーミングで取り込まれる
- Data Managerはインジェストされたデータをエンジンにコミットする
- インジェスト時には、初期データに対するデータ形式の変換、スキーマ照合、インデックス生成、エンコード、圧縮などが自動的に行われている
- インジェストの方法には、マネージドパイプライン・コネクタとプラグイン・SDKを利用したプログラムによるインジェストの3パターンがある
- マネージドパイプラインとしては、Event Hub、Event Grid、IoT Hub、Azure Data Factoryがサポートされていて、これらのサービスからData Explorerにデータを転送することができる
- コネクタとプラグインのオプションでは、LogStash、Kafka、Power Automate、Apache Sparkがサポートされており、接続できる
- インジェストオプションの比較はこちら。
Engineのアーキテクチャ
https://docs.microsoft.com/ja-jp/azure/data-explorer/engine-v3
- Engineはクエリ用エンジン。ストレージとインデックスも含む。テレメトリ・ログ・時系列データの取り込みとクエリに特化してハイパフォーマンスが得られるように設計されている
- 行ストア(ストリーミングインジェスト用)と列ストアのストレージエンジンが含まれる
- ストリーミングインジェストの場合は、最初に行ストアに取り込まれ、その後列ストアのエクステントにインジェストされる
- インジェスト先のテーブルではシャードという単位でデータが管理されているが、このシャードはクラスターのノード間に均等に分散されていて、ローカルSSDとメモリの両方にキャッシュされている
- クエリプランナーとクエリエンジンにより、この構成の利点を生かす高度に分散された並列クエリが作成されるため、ハイパフォーマンスなクエリが実現できている
- なお、インジェスト先のテーブルは事前にData Explorer上に作成しておく必要がある
Azure Data Explorerの高可用性オプションは?
こちらにまとまっています。
https://docs.microsoft.com/ja-jp/azure/data-explorer/business-continuity-overview
なお、規定の可用性は99.9%です。99.9%というと月間で43.8分の停止に相当するので、ビジネスクリティカルな用途であれば高可用性化の対策が必要そうです。
https://azure.microsoft.com/ja-jp/support/legal/sla/data-explorer/v1_0/
Azure Data Explorerの価格は?
https://azure.microsoft.com/ja-jp/pricing/details/data-explorer/
Data Explorerの価格は、以下から構成されるようです。
- インスタンスの料金(エンジンインスタンスとデータ管理インスタンス)
- Azure Data Explorer割増料金
- ストレージの料金
- ネットワークの料金(Azure共通)
謎の割増料金がインスタンスのコア数に応じて上乗せされていますが、インスタンスの上でData Explorerの機能を実現する上での追加料金と考えれば納得できそうです。(もっとポジティブに聞こえる名前にしたらよいのに・・笑)
まず、大きなポイントは、ADXクラスターを停止している間は課金がほぼ発生しないという点。のおで、他のストレージサービスなどと比べてもだいぶコストを抑えられる点が利点かと思います。
ADX クラスターが停止または一時停止した場合、すべてのコンピューティング リソースが使用停止になります。Storage アーティファクトはすべてそのまま保持され、ADX クラスターが再び開始されると、同じ Storage アーティファクトを使用して Compute がデプロイされます。クラスターが停止した場合、お客様は大元のストレージ アカウントについてのみ請求されます。ADX 割増はエンジン コンピューティング リソースに対してのみ計算され、クラスターが停止した場合は ADX 割増の請求は発生しません。
Azure Data Explorer | Microsoft Azure
その上で、課金の内訳をみていくと、最もコストがかさむのはインスタンスの料金なので、大半はインスタンスの料金と考えておくとよさそうです。
インスタンスの料金はさらにエンジンとデータ管理インスタンスで分かれていますが、下の見積もりを見る感じエンジンの方が高額の模様。
https://azure.microsoft.com/ja-jp/pricing/calculator/
運用環境想定で、1ヶ月ずっと立ち上げっぱなしだと月々85000円程度。
なお、SLAのない開発/テスト環境にすると、一ヶ月立ち上げっぱなしにしていても月々25000円弱ほどのようなので、とりあえず検証してみるには、ここからスタートするとよいかもしれません。
実際に使ってみた
リソースの作成
リソース作成では、Azure Data Explorerクラスターを作成することになります。
基本情報。可用性ゾーンへのデプロイも最初に設定することができます。
スケーリングの設定もできます。
構成設定。
セキュリティ設定。
ネットワーク設定。閉域化の設定ができます。この辺りは最近の他のAzureサービスと一緒ですね。
リソースの作成は数分~10分程度で完了しました。
クラスター内にデータベースを作成
最初に行うことはデータベースの作成です。これがないと、外部データソースからデータをインジェストできません。
データベース作成時のオプションは最小限という感じです。名前とデータ保持期間・キャッシュ期間を指定するだけ。
データのインジェスト(From Azure SQL Database)
データベースができたらデータの取り込みです。
今回は、Azure Blob Storage上のCSVデータを取り込んでみたいと思います。
「概要」から「取り込み」に進みます。
「Ingest data from blob」を選択します。
取り込み先のData Explorer側のテーブルを作成します。この段階でテーブル定義は不要です。
続いて、取り込み元のBlobファイルのURL(SAS URL)を設定します。
すると・・おお!データ型が自動的に解析されて、プレビューに表示されました・・!これは便利だと思いました。
このままStart Ingestionに進むと、データの取り込みが即座に開始します。
操作も直感的で、とても簡単だったと思います。なお、今回はワンタイムの取り込みを試しましたが、もちろんこれをバッチで継続的に取り込む、といったこともできます。
クエリ実行
最後に、取り込んだデータをクエリしてみたいと思います。
Data Explorerの「クエリ」タブから、Kustoクエリを投げると・・・即座にデータが得られました・・!(今回は100行だけだからですが・・笑)
以上、入り口だけではありますが、Azure Data Explorerの概要についてのまとめでした。
少しでもイメージアップの参考になりましたら幸いです。また、役立った!という方は下のいいねボタンを押していただけると励みになります!
それではまた・・・!
コメントを残す