11
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Azure Log Analytics のデータを Blob Storage と Azure Data Explorer に退避してみた - 2年以上ログを検索できるようにしたいときに

Last updated at Posted at 2020-04-12

本記事について

本記事では、ログの保持期間が最長2年間である Log Analytics の中のデータをより長い期間保存し、さらに同じ検索言語である Kusto Query Language (KQL) でサーチしたいときに利用できる Azure Data Explorer をご紹介していきます。たとえば Azure Sentinel で取得した Office 365 の監査ログを 5年や10年保存しておきたい時などに便利です。

具体的に、Log Analytics から Data Explorer にデータを退避し、かつ Log Analytics と同じクエリを利用できることを見ていきます。

image.png

また、Log Analyticsのデータの長期保管については、こちらの記事にてオプションをまとめてみましたので合わせてご覧ください。

Azure Data Explorer について

Azure Data Explorer の概要については、公式ウェブサイトのdocsのほか、こちらの Qiita 記事でも詳細にご説明されていらっしゃいます。Data Explorer はログと利用統計情報データのための、高速で拡張性に優れたデータ探索サービスです。検索には、Kusto Query Language (KQL)を利用します。

また、KQL は、Azure Log Analytics や Azure Application Insights, Microsoft Defender ATP でも利用されているマイクロソフトのクエリ言語で、Azure を利用する際にはマスターしておくと便利です。

Log Analytics から Data Explorer への退避と検索

1. Log Analytics からのデータの取得

Log Analytics は API を提供しており、API 経由で検索してデータを取得することができます。Qiita では、こちらの記事が詳細な手順をご説明くださっており、本記事ではそのまま利用します。

なお、API には制限があるので、ご注意ください。

Query limits
As well as call rate limits and daily quota caps, there are also limits on queries themselves:
Queries cannot return more than 500,000 rows
Queries cannot return more than 64,000,000 bytes (~61 MiB total data)
Queries cannot run longer than 10 minutes by default. See this for details.

Rest API のリクエストの中身は、下記のようなサーバーの Heartbeat の取得にしてみます。

let startdatetime=datetime(2020-04-02T00:00:00);
let enddatetime=datetime(2020-04-02T23:59:59);
Heartbeat | where TimeGenerated between(startdatetime .. enddatetime)
$body = @{query = 
'let startdatetime=datetime(2020-04-02T00:00:00);
let enddatetime=datetime(2020-04-02T23:59:59);
Heartbeat | where TimeGenerated between(startdatetime .. enddatetime)
'
}| ConvertTo-Json

具体的には、こんな感じの CSV のファイルを取得できます。
image.png

2. Azure Data Explorer のクラスターの作成

こちらの Qiita 記事 の手順に従って Data Explorer クラスターとデータベースを作成していきます。

クラスターは、ここでは Dev を選択しました。
image.png

データベースも作成します。

image.png

3. Azure Data Explorer へのデータのアップロード

次にデータベースにテーブルを用意します。概要ページの URI にブラウザの別タブでアクセスします。

image.png

すると下記のようなページが出てきます。こちらが Data Explorer でデータを扱うためのサイトになります。

image.png

ここで、さきほど作成したデータベースにテーブルを作っていきます。データベースを右クリックして、Ingest new data (preview) を選択します。

image.png

テーブル名を Heartbeat として、Ingestion type を from file としてさきほど取得した CSV ファイルをアップロードします。

image.png

次にスキーマの設定に進みます。ここでは TimeGenerated を datetime に変更します。

image.png

そして、Start ingestion をクリックすると、データが取り込まれます。試しに、Heartbeat と打って実行すると、Log Analytics と全く同じ要領で検索ができます。

image.png

4. Azure Storage からのデータの取り込み

次に、Azure Storage に入った CSV を検索できるようにしていきます。

まず、Azure Storage と Event Hub / Event Grid を用意します。
Storage については、Storage Account と Blob コンテナーをひとつずつ用意します。

Event Hub については、Event Hub 名前空間を作り、そのなかに Event Hub をひとつ作ります。

image.png

image.png

次に Event Grid サブスクリプションを作っていきます。Event Grid のサブスクリプションでは、さきほど作った Storage Account をトピック、Event Hub をエンドポイントとして作成していきます。

image.png

これで準備完了です。Azure Portal の Data Explorer クラスターのページに戻り、データベースに進んで作ったデータベースをクリックします。(ここからの手順の詳細については、公式ドキュメントもご参照ください。)

image.png

そして、データ接続の追加をクリックします。

image.png

ここでは接続を Blob ストレージとして、イベントグリッドをさきほど作成したサブスクリプション、テーブルを Heartbeat, データ形式を CSV にします。そして作成します。

image.png

これでストレージから Data Explorer への取り込みの準備は完了です。あとは、Heartbeatの検索結果で、さきほどとは TimeGenerated の条件を変えた別のCSVファイルを用意して、Blobストレージのコンテナーにそれをアップロードします。

image.png

すると、新しいデータも Heartbeat テーブルに格納されます。この仕組みを使って、継続的に Log Analytics から Storage にデータを退避させると、新しいデータを Data Explorer で検索することができます。

5. Azure Data Explorer での検索

Log Analytics での検索と全く同じクエリを Data Explorer でも使うことができます。
試しに以下のクエリを試してみます。

let startdatetime=datetime(2020-04-03T00:00:00);
let enddatetime=datetime(2020-04-03T23:59:59);
Heartbeat 
| where TimeGenerated between(startdatetime .. enddatetime)
| summarize count() by bin(TimeGenerated, 1h), Computer
| render timechart 
  • Log Analytics での結果

image.png

  • Data Explorer での結果

image.png

若干 UI は違いますが、同じクエリを使うことができることが確認できます。

最後に

本記事では、Log Analytics から Data Explorer にデータを退避し、同じクエリを利用できることを確認していきました。実際に退避をする際には、Azure Functions などを利用して、継続的にログを送信する仕組みを利用すると、ダウンロード・アップロードも自動化できます。

*本稿は、個人の見解に基づいた内容であり、所属する会社の公式見解ではありません。また、いかなる保証を与えるものでもありません。正式な情報は、各製品の販売元にご確認ください。

11
9
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
11
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?