Chat GPT を使ってKQL を書くと楽だよ
やりたいこと
最近業務でもよくやってますが、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でどういう操作ができるのか、事前知識が必要ですが、アバウトにお願いしてもクエリを書いてくれます。
生成例は以下です。
サンプルコード集
ここでは、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 を使ってみてください。
参考サイト
Discussion