クラスタのビジュアライゼーション
クラスタリングは、機械学習を使用してログ・レコードのパターンを識別し、類似したパターンを持つログをグループ化します。
クラスタ・ビューの上部には、次のタブを含むサマリー・バナーが表示されます:
-
合計クラスタ: 選択したログ・レコードのクラスタの合計数。
ノート
このパネルの上にカーソルを置くと、ログ・レコードの数(「1,413,036ログ・レコードからの260個のクラスタ」など)も表示されます。
-
潜在的な問題: 潜在的な問題があるクラスタの数(エラー、致命的、例外などの単語を含むログ・レコードに基づく)。
-
外れ値: 指定された期間内に1回のみ発生したクラスタの数。
-
トレンド: 期間内の一意のトレンドの数。多くのクラスタに同じトレンドが含まれる可能性があります。そのため、このパネルをクリックすると、各トレンドのクラスタが表示されます。
いずれかのタブをクリックすると、クラスタのヒストグラム・ビューが、選択したタブのレコードを表示するように変更されます。
クラスタ・パターンごとに次が表示されます:
-
トレンド: この列には、レコードをクラスタ化したときに選択した時間範囲に基づいて、(クラスタの)ログ・メッセージ生成のトレンドを示したスパークライン(トレンド・シェイプと呼ばれる)が表示されます。各トレンド・シェイプは、1、2、3などのシェイプIDによって識別されます。これは、クラスタ化したレコードをトレンド・シェイプに基づいてソートする際に役立ちます。
トレンド・エントリの左側にある矢印をクリックすると、クラスタ結果の時系列ビジュアライゼーションが表示されます。このビジュアライゼーションには、問合せで選択した時間範囲に基づいて、クラスタ内のログ・レコードがどのように分散しているかが表示されます。トレンド・シェイプは、時系列のスパークライン表現です。
-
ID: この列には、クラスタIDがリストされます。IDは収集内で一意です。
-
件数: この列には、同じメッセージ・シグネチャを含むログ・レコードの数がリストされます。
-
サンプル・メッセージ: この列には、メッセージ・シグネチャのサンプル・ログ・レコードが表示されます。
-
ログ・ソース: この列には、クラスタのメッセージを生成したログ・ソースがリストされます。
「類似したトレンドの表示」をクリックすると、クラスタがトレンド・シェイプの昇順でソートされます。1つまたは複数のクラスタIDを選択して「レコードの表示」をクリックし、選択したIDのすべてのレコードを表示することもできます。
出力が乱雑に見える場合は、クラスタ結果からクラスタ・メッセージまたは複数のクラスタを非表示にすることもできます。必要なクラスタを右クリックし、「クラスタの非表示」を選択します。
各レコードで、変数値は強調表示されています。「サンプル・メッセージ」セクションで変数をクリックすると、各クラスタの類似した変数をすべて表示できます。変数をクリックすると、その特定の変数の(レコード・セット全体に含まれる)すべての値が表示されます。
「サンプル・メッセージ」セクションでは、一部のクラスタ・パターンに「<n>個の追加サンプル...」リンクが表示されます。このリンクをクリックすると、選択したクラスタ・パターンと類似した別のクラスタが表示されます。
「トレンドに戻る」をクリックすると、コンテキスト付きで前のページに戻ります(ドリルダウンする変数を選択した場所にスクロールして戻ります)。ブラウザの「戻る」ボタンでも前のページに戻りますが、コンテキストは維持されません(この場合、clusterコマンドが再実行されるため)。
SQLフィールドを使用したログ・データのクラスタ化
大量のログ・レコードは89個のクラスタに削減されるため、分析するログ・データのグループが少なくなります。
変数を選択してクラスタをドリルダウンできます。たとえば、前述のクラスタ・セットから、サンプル・メッセージSELECT version FROM V$INSTANCE
を含むクラスタを選択します:
指定したサンプル・メッセージを含むログ・レコードのヒストグラム・ビジュアライゼーションが表示されます。これで、元のログ・コンテンツを分析できます。「クラスタに戻る」をクリックして、クラスタ・ビジュアライゼーションに戻ります。
「トレンド」パネルには、類似した実行パターンを持つSQLが表示されます。
「外れ値」パネルには、まれで個別的なSQLが表示されます。
クラスタ比較ユーティリティの使用
クラスタ比較ユーティリティを使用すると、クラスタの現在のセットをベースラインと比較し、共通のクラスタまたは重複するクラスタを排除することで結果を削減して、新しい問題を識別できます。いくつかの一般的なシナリオは次のとおりです:
- 先週と比較して今週はどのクラスタが異なっていますか。
タイム・シフトによるクラスタ比較を参照してください。
- エンティティAのクラスタ・セットとエンティティBのセットの違いは何ですか。
現在時刻によるクラスタ比較を参照してください。
- X月は問題なく動作していました。今月は何が変わりましたか。
カスタム時間によるクラスタ比較を参照してください。
ログ・データの2つのセットがある場合、クラスタ比較ユーティリティは、共通のクラスタに関連するデータを削除し、ヒストグラム・データと各セットに固有のレコード表を表示します。たとえば、x週とy週のログ・データを比較する場合、両方の週に共通するクラスタは単純化のために削除され、各週に固有のデータが表示されます。これにより、特定の週に固有のパターンを識別し、その動作を分析できます。
clustercompare
コマンドの構文およびその他の詳細は、clustercompareを参照してください。
- クラスタのビジュアライゼーションで、現在の時間範囲を選択します。デフォルトでは、問合せは
*
です。問合せを調整してログ・データをフィルタできます。 - 「ビジュアル化」パネルで、「クラスタ比較」をクリックします。
「クラスタ比較」ダイアログ・ボックスが開きます。
- 現在の問合せと現在の時間範囲が参照用に表示されていることがわかります。
- ベースライン問合せ: デフォルトでは、これは現在の問合せと同じです。必要に応じて、をクリックしてベースライン問合せを変更します。
- ベースライン時間範囲: デフォルトでは、クラスタ比較ユーティリティは、「タイム・シフトの使用」オプションを使用してベースライン時間範囲を決定します。そのため、ベースライン時間範囲は、現在の時間範囲と同じ期間であり、現在の時間範囲より前の期間にシフトされます。これを変更するには、アイコンをクリックし、「カスタム時間の使用」または「現在時刻の使用」を選択します。「カスタム時間の使用」を選択した場合は、メニューを使用してカスタム時間範囲を指定します。
- 「比較」をクリックします。
これで、2つのログ・セット間のクラスタ比較を表示できます。
各セットに対応するボタンをクリックすると、そのセットに固有のクラスタ、潜在的な問題、外れ値、トレンド、レコード表などの詳細が表示されます。このページには、2つのログ・セット間で共通するクラスタの数も表示されます。
前述の例では、11個のクラスタが現在の範囲内でのみ検出され、4個のクラスタがベースライン範囲内でのみ検出され、30個のクラスタが両方の範囲に共通しています。現在の時間範囲のヒストグラムには、現在の時間範囲に固有のログ・データのみを使用したビジュアライゼーションが表示されます。
現在の範囲でのみ見つかったクラスタが最初に返され、次にベースライン範囲でのみ見つかったクラスタが返されます。結合結果は500クラスタに制限されます。クラスタ比較結果を減らすには、現在の時間範囲を減らすか、結果の数を制限するコマンドを追加します。たとえば、 | head 250
を追加すると、現在のクラスタとベースライン・クラスタの両方がそれぞれ250に制限されます。カスタム時間オプションを使用する際、クラスタ・ヒストグラムで複数選択(クリックしてドラッグ・ホールド)して、現在の時間範囲を減らします。時間範囲シフト値は、現在の時間範囲とベースライン時間範囲との間に時間のギャップや重複が発生しないように、分数または秒数に変換できます。
クラスタでのディクショナリ・ルックアップの使用
cluster
コマンドの後にディクショナリ・ルックアップを使用して、クラスタに注釈を付けます。
Linux Syslog Logsに対するcluster
の結果について考えます。Cluster Sampleフィールドに基づいてラベルを追加するためのディクショナリを定義するには:
-
次の内容を含むCSVファイルを作成します:
Operator,Condition,Issue,Area CONTAINS IGNORE CASE,invalid compare operation,Compare Error,Unknown CONTAINS IGNORE CASE REGEX,DNS-SD.*?Daemon not running,DNS Daemon Down,DNS CONTAINS ONE OF REGEXES,"[[Cc]onnection refused,[Cc]onnection .*? closed]",Connection Error,Network CONTAINS IGNORE CASE,syntax error,Syntax Error,Validation CONTAINS IGNORE CASE REGEX,Sense.*?(?:Error|fail),Disk Sensing Error,Disk CONTAINS IGNORE CASE REGEX,device.*?check failed,Device Error,Disk
Linux Error Categoriesという名前を使用して、これをディクショナリ・タイプ・ルックアップとしてインポートします。このルックアップには、一致条件に従って返すことができるIssueおよびAreaという2つのフィールドが含まれます。ディクショナリ・ルックアップの作成を参照してください。
-
クラスタのディクショナリを使用してフィールドを返します:
Linux Syslog Logsに対して
cluster
コマンドを実行します。次に示すように、cluster
の後にlookup
コマンドを追加します:'Log Source' = 'Linux Syslog Logs' | cluster | lookup table = 'Linux Error Categories' select Issue using 'Cluster Sample'
各行のCluster Sampleの値は、Linux Error Categoriesディクショナリで定義されているルールに対して評価されます。一致する各行からIssueフィールドが返されます。
-
lookup
コマンドで各フィールドを選択して、複数のフィールドを返します:'Log Source' = 'Linux Syslog Logs' | cluster | lookup table = 'Linux Error Categories' select Issue as Category, Area using 'Cluster Sample'
前述の問合せでは、Issueフィールドが選択され、名前もCategoryに変更されます。Areaフィールドも選択されますが、名前は変更されません。
-
ディクショナリ・フィールドを使用して、クラスタ結果をフィルタします:
特定のフィールドで
where
コマンドを使用して、クラスタをフィルタします。次の問合せについて考えます:'Log Source' = 'Linux Syslog Logs' | cluster | lookup table = 'Linux Error Categories' select Issue as Category, Area using 'Cluster Sample' | where Area in (Unknown, Disk)
Areaフィールドに指定した値に一致するレコードのみが表示されます。
セマンティック・クラスタリング
クラスタ・ビジュアライゼーションでは、ログ・レコードのテキスト・メッセージをクラスタ化できます。クラスタは、同じような数の単語を文内に含むメッセージをグループ化し、それらの文内で変化する単語を識別することで機能します。クラスタでは、グループ化中に単語の文字の意味は考慮されません。
nlp
コマンドでは、セマンティック・クラスタリングがサポートされます。セマンティック・クラスタリングは、メッセージから関連するキーワードを抽出し、それらのキーワードに基づいてクラスタ化することで行われます。類似する単語を含むメッセージの2つのセットがグループ化されます。このような各グループには、確定的なクラスタIDが割り当てられます。
次の例は、Linux Syslog LogsでのNLPクラスタリングおよびキーワードの使用を示しています:
'Log Source' = 'Linux Syslogs Logs'
| link Time, Entity, cluster()
| nlp cluster('Cluster Sample') as 'Cluster ID',
keywords('Cluster Sample') as Keywords
| classify 'Start Time', Keywords, Count, Entity as 'Cluster Keywords'
セマンティック・クラスタリングのユース・ケースの追加例は、セマンティック・クラスタリングの例を参照してください。
nlp
コマンド
nlp
コマンドは、link
コマンドの後にのみ使用でき、2つのファンクションをサポートします。cluster()
は指定したフィールドをクラスタ化するために使用でき、keywords()
は指定したフィールドからキーワードを抽出するために使用できます。
nlp
コマンドは、link
コマンドの後にのみ使用できます。nlpを参照してください。
-
nlp cluster()
:cluster()
は、リンクで生成されたフィールドの名前を取得し、クラスタ値ごとにクラスタIDを返します。返されるクラスタIDは数値で、文字列として表されます。クラスタIDは、問合せで使用してクラスタをフィルタできます。例:
nlp cluster('Description') as 'Description ID'
- これは、Description
フィールドから関連するキーワードを抽出します。Description ID
フィールドには、生成されたクラスタごとに一意のIDが含まれます。 -
nlp keywords()
:指定されたフィールド値からキーワードを抽出します。キーワードは、ディクショナリに基づいて抽出されます。ディクショナリ名は、
table
オプションを使用して指定できます。ディクショナリを指定しない場合、即時利用可能なデフォルト・ディクショナリのNLP General Dictionaryが使用されます。例:
nlp keywords('Description') as Summary
- これは、Description
フィールドから関連するキーワードを抽出します。キーワードには、Summary
フィールドを使用してアクセスできます。nlp table='My Issues' cluster('Description') as 'Description ID'
- デフォルト・ディクショナリのかわりに、カスタム・ディクショナリMy Issuesを使用します。
NLPディクショナリ
セマンティック・クラスタリングは、メッセージを単語に分割し、関連する単語を抽出してから、類似する単語を含むメッセージをグループ化することによって機能します。そのため、クラスタリングの品質は、抽出されるキーワードの関連性に依存します。
- ディクショナリは、メッセージのどの単語を抽出するかを決定するために使用されます。
- ディクショナリ内の項目の順序は重要です。最初の行の項目は、2番目の行の項目よりランキングが高くなります。
- ディクショナリは、.csvファイルとして作成され、ディクショナリ・タイプ・オプションのあるルックアップ・ユーザー・インタフェースを使用してインポートされます。
- 単語のランキングを変更しないかぎり、ディクショナリを作成する必要はありません。ディクショナリを指定しない場合、デフォルトの即時利用可能な
NLP General Dictionary
が使用されます。これには、事前トレーニング済の英語の単語が含まれます。
ディクショナリ・ルックアップの作成を参照してください。
次に、ディクショナリ例のiSCSI Errorsを示します:
演算子 | 条件 | 値 |
---|---|---|
|
error |
noun |
|
reported |
verb |
|
iSCSI |
noun |
|
connection |
noun |
|
closed |
verb |
最初のフィールドは、将来使用するために予約されています。2番目のフィールドは単語です。3番目の単語は、その単語のタイプを指定します。タイプは、任意の文字列にすることができ、category
パラメータを使用して問合せから参照できます。
前述の例では、単語のerrorは単語のreportedまたはiSCSIよりランキングが高くなります。同様に、connectionはclosedよりランキングが高くなります。
ディクショナリの使用
次のテキストがMessage
フィールドに見られるとします:
Kernel reported iSCSI connection 1:0 error (1020 - ISCSI_ERR_TCP_CONN_CLOSE: TCP connection closed) state (2) Please verify the storage and network connection for additional faults
前述のメッセージが解析され、単語に分割されます。アルファベット以外の文字は削除されます。次に、分割から生成される一意の単語の一部を示します:
Kernel reported iSCSI connection error ERR TCP CONN CLOSE closed state ... ...
メッセージには、合計24個の単語があります。デフォルトでは、セマンティック・クラスタリングは、20個の単語を抽出し、これらの単語を使用してクラスタリングを実行しようとします。前述のような場合、システムではどの単語が重要であるかを認識する必要があります。これを実現するには、ディクショナリを使用します。
ディクショナリは順序付きリストです。iSCSI Errorsが使用される場合、NLPは、ERR、TCPまたはCONNを抽出しません(これらの単語はディクショナリに含まれていないため)。同様に、単語のerror、reported、iSCSI、connectionおよびclosedは、ディクショナリのランキングに従って高い優先度を割り当てられます。