52
アプリケーション開発と分析のための Log Analytics 第5回 Tokyo Jazug Night 2016/11/24 JAZUG Kentaro Aoki https://twitter.com/kekekekenta

アプリケーション開発と分析のための Log Analytics

Embed Size (px)

Citation preview

アプリケーション開発と分析のためのLog Analytics

第5回 Tokyo Jazug Night 2016/11/24

JAZUG Kentaro Aoki

https://twitter.com/kekekekenta

自己紹介

{

"objectType": "User",

“displayName”: “Kentaro Aoki",

“Twitter": "@kekekekenta",

“Blog”: “http://kentablog.cluscore.com/”

“company”: “MITSUI KNOWLEDGE INDUSTRY CO., LTD",

"onPremisesSecurityIdentifier": “MAS”

}

2

ちょうど一年前ぐらい

• Raspberry PiのログをLogAnalytics(当時はOperational Insights)で収集

3http://kentablog.cluscore.com/2015/12/raspberry-pi-iot-oms_62.html

Log Analyticsのプラン

• Log Analyticsは2つのプランから選択。(続く)

4

https://azure.microsoft.com/ja-jp/pricing/details/log-analytics/

OMS Log Analyticsのプランとしては

• OMSのE2を選ぶことにより本当の力が発揮される

– プランを選んだ後に、ソリューションパックを追加

5

お試しはこちら: https://experience.mms.microsoft.com/

OMSの詳細はこちら

6

https://www.microsoft.com/en-us/cloud-platform/operations-management-suite-pricing

Log Analytics

• Log Analyticsはログデータを収集と分析を提供するプラットフォーム

7OMSとかOperational Insightsとかサービス名が変わっているが、今はLog Analyticsで落ち着いている。

ポータルのイメージ(List表示)

8

ポータルのイメージ(Table表示)

9

ポータルのイメージ(Metrics表示)

10

ポータルのイメージ(Chart表示)

11

ポータルのイメージ(Chart表示)

12

検索言語

13

Log Analytics検索について

• 取集されたログデータの検索には、Log Analyticsの検索言語を使用します。

• 一般的なクエリ構文

– フィルタは、収集されたログデータを絞り込む条件を記述

– コマンドは、フィルタによって絞り込まれたログデータを加工するアクションを記述

14

フィルタ | コマンド1 | コマンド2 …

Log Analyticsの検索言語:フィルタ

• ログデータ文字列から絞り込む

– 文字列によるフィルタ(ワイルドカードは”引用符”で囲まない)

15

*

Failed password

Log Analyticsの検索言語:フィルタ

• プロパティ値により絞り込む

– “:”, “=“ 演算子で値が同じものを絞り込む

– “!=“ 演算子で値が異なるものを絞り込む

– “>”, “<“, “>=”, “<=“ 演算子で数値条件で絞り込む

– [xx..xx]を使うと連続する値で絞り込む(”:”演算子利用)

16

Type=Perf ObjectName=Processor InstanceName=0 CounterName="% Processor Time"

Type=Perf ObjectName=Processor InstanceName:[0..2] CounterName="% Processor Time"

※↑InstanceNameは文字列が入ってくるので、あまり良くない例です

Log Analyticsの検索言語:フィルタ

• 複数のフィルタ使用して絞り込む

– スペースはANDと同じ。ANDを明示的に使うこともできる

– OR、NOTなどがある。

17

Type=Syslog Facility=authprivNOT(SeverityLevel=notice OR SeverityLevel=info)

Log Analyticsの検索言語:フィルタ

• 期間を指定して絞り込む

– “>”, ”<“, “>=“, “<=“などを使用して期間を絞り込む

– 注意点としては暗黙的にポータルには期間設定が含まれているため、「ポータル画面で設定されている期間」と「検索クエリのフィルタで指定した期間」の重なる期間が出力される。

18

* TimeGenerated>NOW-60MINUTES

* TimeGenerated>=2016-11-22

ポータル画面で設定されている期間

検索クエリのフィルタで指定した期間

Log Analyticsの検索言語:フィルタ

• 期間を指定して絞り込む

– 日付/時刻の構文

19

yyyy-mm-ddThh:mm:ss.dddZyyyy-mm-ddThh:mm:ss.ddd

yyyy-mm-ddThh:mm:ssyyyy-mm-ddThh:mm

yyyy-mm-dd

Log Analyticsの検索言語:フィルタ

• 期間を指定して絞り込む

– 日時/時刻をまるめて指定する構文。DatetimeをUnitでまとめます。午前0時を設定する場合はUnitをDAYにする。

– オフセットにより期間指定する構文。DatetimeからCountの時間を指定します。このCountは繋げると計算されます。Unitも使える。

– 例20

Datetime/Unit

Datetime[+|-]count/Unit

* TimeGenerated>NOW+1HOUR-10MONTHS/MINUTE

Log Analyticsの検索言語:フィルタ

• 期間を指定して絞り込む

– YEAR、YEARS(年)

– MONTH、MONTHS(月)

– DAY、DAYS、DATE(日)

– HOUR、HOURS(時間)

– MINUTE、MINUTES(分)

– SECOND、SECONDS(秒)

– MILLISECOND、MILLISECONDS、MILLI、MILLIS(ミリ秒)

21

Log Analyticsの検索言語:コマンド

• フィルタされたデータを特定のフィールドを基準に並べ替え

– Sort:asc/desc プレフィックスを使用(省略可能)

• フィルタされたデータを指定した数の上位に制限

– Top/Limit:制限数を指定

22

* TimeGenerated>=2016-11-22 | sort TimeGenerated asc

* TimeGenerated>=2016-11-22 | sort TimeGenerated asc | Top 5

Log Analyticsの検索言語:コマンド

• フィルタされたデータのプロパティを指定して出力

– Select:プロパティ名を並べて指定

• フィルタされたデータの数をスキップ

– Skip :スキップ数を指定

23

Type=Syslog | select TimeGenerated,SyslogMessage

* TimeGenerated>=2016-11-22 | sort TimeGenerated asc | Skip 3 | Top 5

Log Analyticsの検索言語:コマンド

• コマンドとしてフィルターする

– Where:演算子により条件を指定

• 重複しない一連の値を出力

– Distinct:プロパティを指定

24

Type=Perf CounterName:"% Processor Time" | Measure Avg(CounterValue) as AVGCPU by Computer | where AVGCPU > 80

Type=Syslog| Distinct Facility

Log Analyticsの検索言語:コマンド

• フィルタされたデータに集計関数を使用する

– measure:下記の関数を指定

• Count、Max、Min、Sum、Avg、Stddev、Countdistinct、Percentile##(Pct##)

25

Type=Syslog| Measure count() by Facility

* | Measure Min(TimeGenerated) by Computer

Type=Perf CounterName:"% Processor Time" | Measure Avg(CounterValue) by Computer

Log Analyticsの検索言語:コマンド

• Measureを指定した時間間隔で集計する

– Interval:間隔を指定する(複数のデータがある場合は複数の線でグラフが表示される)

26

Type=Perf CounterName:"% Processor Time" OR

CounterName:"% Privileged Time" | measure

avg(CounterValue) by CounterName Interval 1HOUR

Log Analyticsの検索言語:コマンド

• プロパティを関数により作成

– Extend:関数により値を作成

• Abs, acos, and, asin, atan, atan2, cbrt, ceil, cos, cosh, def, deg, div, dist, exists, exp, floor, hypo, if, linear, ln, log, map, max, min, mod, ms, not, or, pow, product, recip, rad, rint, sin, sinh, scale, sqrt, strdist, sub, sum, termfreq, tan, tanh

27

Type=Perf ObjectName=Processor InstanceName=_Total CounterName="% Privileged Time" | Extend product(CounterValue, 10) AS CounterValuex10

Log Analyticsの検索言語:コマンド

• サブ検索を使用する

– IN, NOT IN:Measureコマンドにより集計されたデータをサブ検索として利用(クエリの最後のフィルターとして使用)

28

Type=Syslog Computer IN {Type=Perf CounterName:"% Processor Time" | Measure Avg(CounterValue) as AVGCPU by Computer | where AVGCPU > 80}

カスタムフィールド

29

カスタムフィールドについて

• テキストログなどの中に含まれる文字を抜き出して、プロパティを作成。これはFlashExtract という Microsoft Research のテクノロジを使用してプロパティを特定しています。 ユーザーが明示的な設定をしなくても自動で目的のデータを認識します。

30

カスタムフィールドの作成①

• 学習するためのログデータを選択

31

カスタムフィールドの作成②

• 選択したログからプロパティとして抜き出す文字を選択してカスタムフィールドを作成

32

カスタムフィールドの作成③

• サンプルで出力される検索結果から間違いを修正して学習させる

33

カスタムフィールドで異なるログを横断検索

• カスタムフィールドを使うことで異なるログメッセージから同じ意味の値を抽出することができる。これにより、異なるログを横断的に検索することが可能になる。

34

アラート

35

アラートの設定

• 指定した時間の間隔で指定した検索クエリを実行し、結果数によりメール通知などのアクションを実行する

36

LOG ANALYTICSを使ったアプリケーションの開発

37

Log Analytics APIs

38

• Log Analytics HTTP Data Collector API– OMS Log Analyticsに、ログ(JSON)を送信するためのAPI

• https://docs.microsoft.com/ja-jp/azure/log-analytics/log-analytics-data-collector-api

• Log Search API– Log Analyticsに収集されたログを検索するためのAPI。Azure Resource

Manager API から利用する。• https://docs.microsoft.com/ja-jp/azure/log-analytics/log-

analytics-log-search-api• Alert API

– Log Analyticsに収集されたログを定期的に検索して条件によりアクションを実行するためのAPI。Azure Resource Manager APIから利用する。• https://docs.microsoft.com/ja-jp/azure/log-analytics/log-

analytics-api-alerts

Log Analytics HTTP Data Collector API

• リクエストURI

• リクエストヘッダ

– 'content-type': “application/json”

– ‘Authorization’: 署名文字列

– ‘Log-Type’: タイプ

– ‘x-ms-date’: rfc1123形式による日付

– ‘time-generated-field‘: ISO 8601形式による日付

39

'https://' + ワークスペース ID + '.ods.opinsights.azure.com' + キー + '?api-version=2016-04-01'

Log Analytics HTTP Data Collector API

• ログを受信すると、カスタムログとしてタイプ名の後ろに“_CL”が付く

40

41

Log Analytics HTTP Data Collector API

• ログを受信すると、カスタムフィールドも作成される

42

ソリューション

43

ソリューション

44

OMS Portal

45

Azure Market Place

46

Azure Quickstart Templates

• https://azure.microsoft.com/en-us/resources/templates/

47

Deploy Azure Resource Manager template

• 自分で作ったARM Templateからデプロイ

– https://docs.microsoft.com/en-us/azure/operations-management-suite/operations-management-suite-solutions

48

• ARMを使ってソリューションを作成

– Web App Monitoring

• https://github.com/Azure/azure-quickstart-templates/tree/master/101-webappazure-oms-monitoring

– SQL Azure Monitoring

• https://github.com/Azure/azure-quickstart-templates/tree/master/101-sqlazure-oms-monitoring

49

さいごに

• 検索言語は、色々なところで使われる

– データソースの異なる横断的なログの検索

– 検索結果のグラフの作成

– アラートの条件

• 検索言語を知ると色々なことができるようになる

• まずは、検索言語から!

50

参考資料など

51

• Operations Management Suite (OMS) API

– Azure Automation

– Azure Backup

– Log Analytics

– Azure Site Recovery

– https://docs.microsoft.com/ja-jp/azure/operations-management-suite/operations-management-suite-sdk

参考資料など

• Log Analytics 検索リファレンス

– https://docs.microsoft.com/ja-jp/azure/log-analytics/log-analytics-search-reference

• デモサイト(Log Analytics だけでなくOMSのフル機能提供)

– https://experience.mms.microsoft.com/

• パフォーマンスカウンタについて

– https://technet.microsoft.com/ja-jp/library/cc748731.aspx

52