クラスタのビジュアライゼーション

クラスタリングは、機械学習を使用してログ・レコードのパターンを識別し、類似したパターンを持つログをグループ化します。

クラスタリングにより、探索する必要があるログ・エントリの合計数が大幅に減少し、外れ値を簡単に特定できます。グループ化されたログ・エントリは、サンプル・メッセージとして示されます。
  1. ナビゲーション・メニューを開き、「監視および管理」をクリックします。「ログ・アナリティクス」で、「ログ・エクスプローラ」をクリックします。
  2. エンティティ・セットのログを検索します。エンティティでのログの検索を参照してください。
  3. 「ビジュアル化」パネルで、「クラスタ」(クラスタを開く)を選択します。

    ヒストグラムおよびクラスタ・サマリーを示すクラスタ・ビジュアライゼーション

類似したログ・レコードがクラスタにグループ化され、時間間隔でグループ化されたすべてのレコードのヒストグラム・ビューとともに表示されます。ヒストグラムの特定の間隔セット(この場合は時間間隔でグループ化されたレコード)にズーム・インするには、左のマウス・ボタンを押したまま必要な間隔セット上で長方形を描画します。ズーム・インすると、選択した間隔に基づいてクラスタ・レコードが変更されます。

クラスタ・ビューの上部には、次のタブを含むサマリー・バナーが表示されます:

  • 合計クラスタ: 選択したログ・レコードのクラスタの合計数。


    クラスタ全体のバナー

    ノート

    このパネルの上にカーソルを置くと、ログ・レコードの数(たとえば、1,413,036ログ・レコードからの260個のクラスタ)も表示されます。

  • 潜在的な問題: 潜在的な問題があるクラスタの数(エラー、致命的、例外などの単語を含むログ・レコードに基づく)。


    クラスタバナー- 潜在的な問題

  • 外れ値: 指定された期間内に1回のみ発生したクラスタの数。


    クラスタ・バナー- 外れ値

  • トレンド: 期間内の一意のトレンドの数。多くのクラスタに同じトレンドが含まれる可能性があります。そのため、このパネルをクリックすると、各トレンドのクラスタが表示されます。


    クラスタ・バナー- トレンド

いずれかのタブをクリックすると、クラスタのヒストグラム・ビューが、選択したタブのレコードを表示するように変更されます。

クラスタ・パターンごとに次が表示されます:

  • トレンド: この列には、レコードをクラスタ化したときに選択した時間範囲に基づいて、(クラスタの)ログ・メッセージ生成のトレンドを示したスパークライン(トレンド・シェイプと呼ばれる)が表示されます。各トレンド・シェイプは、1、2、3などのシェイプIDによって識別されます。これは、クラスタ化したレコードをトレンド・シェイプに基づいてソートする際に役立ちます。

    トレンド・エントリの左側にある矢印をクリックすると、クラスタ結果の時系列ビジュアライゼーションが表示されます。このビジュアライゼーションには、問合せで選択した時間範囲に基づいて、クラスタ内のログ・レコードがどのように分散しているかが表示されます。トレンド・シェイプは、時系列のスパークライン表現です。

  • ID: この列には、クラスタIDがリストされます。IDは収集内で一意です。

  • 件数: この列には、同じメッセージ・シグネチャを含むログ・レコードの数がリストされます。

  • サンプル・メッセージ: この列には、メッセージ・シグネチャのサンプル・ログ・レコードが表示されます。

  • ログ・ソース: この列には、クラスタのメッセージを生成したログ・ソースがリストされます。

「類似したトレンドの表示」をクリックすると、クラスタがトレンド・シェイプの昇順でソートされます。1つまたは複数のクラスタIDを選択して「レコードの表示」をクリックし、選択したIDのすべてのレコードを表示することもできます。

出力が乱雑に見える場合は、クラスタ結果からクラスタ・メッセージまたは複数のクラスタを非表示にすることもできます。必要なクラスタを右クリックし、「クラスタの非表示」を選択します。

各レコードで、変数値は強調表示されています。「サンプル・メッセージ」セクションで変数をクリックすると、各クラスタの類似した変数をすべて表示できます。変数をクリックすると、その特定の変数の(レコード・セット全体に含まれる)すべての値が表示されます。

「サンプル・メッセージ」セクションでは、一部のクラスタ・パターンに「<n>個の追加サンプル...」リンクが表示されます。このリンクをクリックすると、選択したクラスタ・パターンと類似した別のクラスタが表示されます。

「トレンドに戻る」をクリックすると、コンテキスト付きで前のページに戻ります(ドリルダウンする変数を選択した場所にスクロールして戻ります)。ブラウザの「戻る」ボタンでも前のページに戻りますが、コンテキストは維持されません(この場合、clusterコマンドが再実行されるため)。

SQLフィールドを使用したログ・データのクラスタ化

次に、SQLフィールドをクラスタ化する例を示します:
cluster_sql.pngの説明が続きます

大量のログ・レコードは89個のクラスタに削減されるため、分析するログ・データのグループが少なくなります。

変数を選択してクラスタをドリルダウンできます。たとえば、前述のクラスタ・セットから、サンプル・メッセージSELECT version FROM V$INSTANCEを含むクラスタを選択します:


cluster_sql_variable.pngの説明が続きます

指定したサンプル・メッセージを含むログ・レコードのヒストグラム・ビジュアライゼーションが表示されます。これで、元のログ・コンテンツを分析できます。「クラスタに戻る」をクリックして、クラスタ・ビジュアライゼーションに戻ります。

「トレンド」パネルには、類似した実行パターンを持つSQLが表示されます。

「外れ値」パネルには、まれで個別的なSQLが表示されます。

クラスタ比較ユーティリティの使用

クラスタ比較ユーティリティを使用すると、クラスタの現在のセットをベースラインと比較し、共通のクラスタまたは重複するクラスタを排除することで結果を削減して、新しい問題を識別できます。いくつかの一般的なシナリオは次のとおりです:

ログ・データの2つのセットがある場合、クラスタ比較ユーティリティは、共通のクラスタに関連するデータを削除し、ヒストグラム・データと各セットに固有のレコード表を表示します。たとえば、x週とy週のログ・データを比較する場合、両方の週に共通するクラスタは単純化のために削除され、各週に固有のデータが表示されます。これにより、特定の週に固有のパターンを識別し、その動作を分析できます。

clustercompareコマンドの構文およびその他の詳細は、clustercompareを参照してください。

  1. クラスタクラスタを開くのビジュアライゼーションで、現在の時間範囲を選択します。デフォルトでは、問合せは*です。問合せを調整してログ・データをフィルタできます。
  2. 「ビジュアル化」パネルで、「クラスタ比較」をクリックします。

    「クラスタ比較」ダイアログ・ボックスが開きます。

  3. 現在の問合せと現在の時間範囲が参照用に表示されていることがわかります。
    • ベースライン問合せ: デフォルトでは、これは現在の問合せと同じです。必要に応じて、編集アイコンをクリックしてベースライン問合せを変更します。
    • ベースライン時間範囲: デフォルトでは、クラスタ比較ユーティリティは、「タイム・シフトの使用」オプションを使用してベースライン時間範囲を決定します。そのため、ベースライン時間範囲は、現在の時間範囲と同じ期間であり、現在の時間範囲より前の期間にシフトされます。これを変更するには、編集アイコンアイコンをクリックし、「カスタム時間の使用」または「現在時刻の使用」を選択します。「カスタム時間の使用」を選択した場合は、メニューを使用してカスタム時間範囲を指定します。
    • 「比較」をクリックします。

      これで、2つのログ・セット間のクラスタ比較を表示できます。

      各セットに対応するボタンをクリックすると、そのセットに固有のクラスタ、潜在的な問題、外れ値、トレンド、レコード表などの詳細が表示されます。このページには、2つのログ・セット間で共通するクラスタの数も表示されます。

      前述の例では、11個のクラスタが現在の範囲内でのみ検出され、4個のクラスタがベースライン範囲内でのみ検出され、30個のクラスタが両方の範囲に共通しています。現在の時間範囲のヒストグラムには、現在の時間範囲に固有のログ・データのみを使用したビジュアライゼーションが表示されます。

ノート

現在の範囲でのみ見つかったクラスタが最初に返され、次にベースライン範囲でのみ見つかったクラスタが返されます。結合結果は500クラスタに制限されます。クラスタ比較結果を減らすには、現在の時間範囲を減らすか、結果の数を制限するコマンドを追加します。たとえば、 | head 250を追加すると、現在のクラスタとベースライン・クラスタの両方がそれぞれ250に制限されます。カスタム時間オプションを使用する際、クラスタ・ヒストグラムで複数選択(クリックしてドラッグ・ホールド)して、現在の時間範囲を減らします。時間範囲シフト値は、現在の時間範囲とベースライン時間範囲との間に時間のギャップや重複が発生しないように、分数または秒数に変換できます。

クラスタでのディクショナリ・ルックアップの使用

clusterコマンドの後にディクショナリ・ルックアップを使用して、クラスタに注釈を付けます。

Linux Syslog Logsに対するclusterの結果について考えます。Cluster Sampleフィールドに基づいてラベルを追加するためのディクショナリを定義するには:

  1. 次の内容を含む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つのフィールドが含まれます。ディクショナリ・ルックアップの作成を参照してください。

  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フィールドが返されます。

  3. lookupコマンドで各フィールドを選択して、複数のフィールドを返します:

    'Log Source' = 'Linux Syslog Logs'
    | cluster
    | lookup table = 'Linux Error Categories' select Issue as Category, Area using 'Cluster Sample'

    前述の問合せでは、Issueフィールドが選択され、名前もCategoryに変更されます。Areaフィールドも選択されますが、名前は変更されません。

  4. ディクショナリ・フィールドを使用して、クラスタ結果をフィルタします:

    特定のフィールドで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'

Linux Syslog LogsでのNLPクラスタリングおよびキーワード

セマンティック・クラスタリングのユース・ケースの追加例は、セマンティック・クラスタリングの例を参照してください。

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を示します:

演算子 条件

CONTAINS IGNORE CASE

error

noun

CONTAINS IGNORE CASE

reported

verb

CONTAINS IGNORE CASE

iSCSI

noun

CONTAINS IGNORE CASE

connection

noun

CONTAINS IGNORE CASE

closed

verb

最初のフィールドは、将来使用するために予約されています。2番目のフィールドは単語です。3番目の単語は、その単語のタイプを指定します。タイプは、任意の文字列にすることができ、categoryパラメータを使用して問合せから参照できます。

前述の例では、単語のerrorは単語のreportedまたはiSCSIよりランキングが高くなります。同様に、connectionclosedよりランキングが高くなります。

ディクショナリの使用

次のテキストが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は、ERRTCPまたはCONNを抽出しません(これらの単語はディクショナリに含まれていないため)。同様に、単語のerrorreportediSCSIconnectionおよびclosedは、ディクショナリのランキングに従って高い優先度を割り当てられます。