😊

Chat GPT を使ってKQL を書くと楽だよ

2023/03/26に公開

やりたいこと

最近業務でもよくやってますが、KQLをChatGPTで生成したいと思います。

KQL とは、Kusto Query Language の略で、Azure Data Explorer や Azure Monitor などのサービスでデータを探索したり分析したりするための言語です。

SQL に似た構文を持ち、テーブルや列などのスキーマエンティティに対してクエリを実行できます。

また、キーワードやプロパティ制限、演算子などを使って複雑なクエリを作成することもできます。

では、実装手順とサンプルコード集を見ていきましょう。

概要

Azure で KQL を書くには、まず Azure Data Explorer や Azure Monitor などのサービスにアクセスする必要があります。
それぞれのサービスには、KQL を実行できる Web ベースのツールが用意されています。
たとえば、Azure Data Explorer では Kusto.Explorer や Kusto.WebExplorer、Azure Monitor では Log Analytics や Application Insights などがあります。
これらのツールでは、データベースやテーブルを選択して、クエリエディタに KQL を入力し、実行ボタンをクリックすることで、クエリ結果を表示できます。

また、KQL をプログラムから実行することもできます。

Azure Data Explorer や Azure Monitor は REST API を提供しており、HTTP リクエストで KQL を送信し、JSON 形式でレスポンスを受け取ることができます 。

さらに、.NET や Java などの言語用の SDK も提供されており、コード内で KQL を組み立てて実行することができます 。

Chat GPTの使い方.

Chat GPTに書いてもらいたいクエリを日本語で説明します。

KQLでどういう操作ができるのか、事前知識が必要ですが、アバウトにお願いしてもクエリを書いてくれます。

生成例は以下です。

image1

サンプルコード集

ここでは、Azure Monitor, Azure Firewall , Sentinel で利用する例をそれぞれ示します。
これらのサービスでは、KQL を使ってログやメトリックスなどのデータを分析したり可視化したりすることができます 。

Azure Monitor

Azure Monitor では、KQL を使って Azure リソースやアプリケーションのパフォーマンスや状態を監視したり、アラートやダッシュボードを作成したりすることができます。
以下は、Azure Monitor の Log Analytics ワークスペースで実行できる KQL の例です。

  • VM の CPU 使用率の平均値と最大値を時系列で表示するKQLを書いてください
Perf
| where ObjectName == "Processor" and CounterName == "% Processor Time"
| summarize avg(CounterValue), max(CounterValue) by bin(TimeGenerated, 1h), Computer
| render timechart
  • アプリケーションの例外数と種類を集計して表示するKQLを書いてください
exceptions
| summarize count() by type, bin(timestamp, 1d)
| render barchart
  • ネットワークインターフェイスの送受信バイト数を表示するKQLを書いてください
Perf
| where ObjectName == "Network Adapter" and (CounterName == "Bytes Received/sec" or CounterName == "Bytes Sent/sec")
| summarize sum(CounterValue) by CounterName, bin(TimeGenerated, 1h)
| render timechart

Azure Firewall

Azure Firewall では、KQL を使ってファイアウォールのログを分析したり、トラフィックや脅威の傾向を把握したりすることができます。
以下は、Azure Firewall のログを収集する Log Analytics ワークスペースで実行できる KQL の例です。

  • アプリケーション ルールによって許可されたトラフィックの数と量を表示するKQLを書いてください
AzureDiagnostics
| where ResourceType == "AZUREFIREWALLS" and Category == "AzureFirewallApplicationRule"
| where msg_s contains "Action: Allow"
| summarize count(), sum(BytesSent_d + BytesReceived_d) by bin(TimeGenerated, 1h)
| render timechart

Sentinel

Sentinel では、KQL を使ってセキュリティ関連のデータを分析したり、検出ルールやブックレットを作成したりすることができます。
以下は、Sentinel のログを収集する Log Analytics ワークスペースで実行できる KQL の例です。

  • サインインの失敗回数と原因を表示するKQLを書いてください
SigninLogs
| where ResultType !in ("0", "50125", "50140")
| summarize count() by ResultType, ResultDescription
| render piechart
  • マルウェアに感染したデバイスの数と種類を表示するKQLを書いてください
DeviceTvmSoftwareInventory
| where ThreatStatusRank == 1
| summarize count() by DeviceName, ThreatName
| render barchart
  • 異常なネットワーク アクティビティを検出するKQLを書いてください
let threshold = 5;
let timeframe = 1d;
NetworkCommunicationEvents
| where CommunicationDirection == "Outbound"
| where TimeGenerated > ago(timeframe)
| summarize Dcount = dcount(RemoteUrl) by DeviceId, bin(TimeGenerated, 1h)
| where Dcount > threshold
| project TimeGenerated, DeviceId, Dcount

以上が、Azure で KQL を書く方法についての紹介です。
KQL は、Azure のさまざまなサービスでデータを効率的に探索したり分析したりするための強力なツールです。
ぜひ、KQL を使ってみてください。

参考サイト

https://learn.microsoft.com/ja-jp/sharepoint/dev/general-development/keyword-query-language-kql-syntax-reference

GitHubで編集を提案

Discussion