0

IIS ログと Elasticsearch で解決しようとしている問題があります。何が起こっているのかというと、IIS ログのユーザー名にスラッシュ (/) ではなくバックスラッシュ () が含まれているということです。Elasticsearch が名前を返すと、入力時にエスケープされることを望んでいた \ がなくなりました。そのため、Elasticsearch または Kibana で結果を表示すると、ユーザー名に \ がなく、そこにあるスラッシュが正規表現として扱われます。この例として、ユーザー名 abcd\bob は abcdob として返されます。

また、IIS からの各エントリに _grokparsefailure タグが追加されるのは、この問題が原因であると考えています。

助言がありますか?

データを取得する私のNXLOGファイル:

    ## ROOT を nxlog がインストールされたフォルダに設定してください。
    ## そうしないと起動しません。

    #define ROOT C:\Program Files\nxlog
    ルート C:\Program Files (x86)\nxlog を定義します

    Moduledir %ROOT%\modules
    CacheDir %ROOT%\data
    pidfile %ROOT%\data\nxlog.pid
    SpoolDir %ROOT%\data
    ログファイル %ROOT%\data\nxlog.log

    <拡張json>
        モジュール xm_json
    </拡張子>

    #<拡張子 w3c>
      #iis ログ フィールドをフィールド タイプにマップする
    # モジュール xm_csv
    # フィールド $date, $time, $website, $serverip, $method, $url, $querystring, $port, $username, $clientip, $version, $useragent, $referer, $status, $substatus, $sc_win32_status, $sc_bytes、$cs_bytes、$time_taken
    # FieldTypes 文字列、文字列、文字列、文字列、文字列、文字列、文字列、文字列、文字列、文字列、文字列、文字列、文字列、整数、整数、整数、整数、整数、整数
    #    
    # #フィールド $date、$time、$website、$hostname、$serverip、$verb、$request、$querystring、$dstport、$user、$clientip、$httpversion、$useragent、$cookie、$referrer、$fqdn 、$status、$substatus、$sc_win32_status、$sc_bytes、$cs_bytes、$time_taken
    # #FieldTypes 文字列、文字列、文字列、文字列、文字列、文字列、文字列、文字列、文字列、文字列、文字列、文字列、文字列、文字列、文字列、整数、整数、整数、整数、整数、整数
    # デリミタ ' '
    # QuoteChar '"'
    # EscapeControl FALSE
    # UndefValue -
    #</拡張子>

    <拡張子w3c>
      #iis ログ フィールドをフィールド タイプにマップする
        モジュール xm_csv
        フィールド $date、$time、$website、$hostname、$serverip、$verb、$request、$querystring、$dstport、$user、$clientip、$httpversion、$useragent、$cookie、$referrer、$fqdn、$ステータス、$substatus、$sc_win32_status、$sc_bytes、$cs_bytes、$time_taken
        FieldTypes 文字列、文字列、文字列、文字列、文字列、文字列、文字列、文字列、文字列、文字列、文字列、文字列、文字列、文字列、文字列、文字列、文字列、整数、整数、整数、整数、整数
        区切り文字 ' '
    </拡張子>


    # Nxlog 内部ログ
    <内部入力>
       モジュール im_internal
       Exec $EventReceivedTime = integer($EventReceivedTime) / 1000000; to_json();
    </入力>


    # Windows イベント ログ
    <入力イベントログ>
    # Windows Vista/2008 以降では im_msvistalog のコメントを外します
       モジュール im_msvistalog

    # Windows XP/2000/2003 の場合は im_mseventlog のコメントを外します
    # モジュール im_mseventlog

       Exec $EventReceivedTime = integer($EventReceivedTime) / 1000000; to_json();
    </入力>

    <入力 iis-logs>
        モジュール im_file
        ファイル「C:\inetpub\logs\LogFiles\W3SVC1\u_ex*.log」
        ReadFromLast TRUE
        Exec if $raw_event =~ /^#/ drop(); \
                    そうしないと \
                    { \
                        w3c->parse_csv(); \
                        $EventTime = parsedate($date + " " + $time); \
                        to_json (); \
                    }
    </入力>


    <アウトプットアウト>
       モジュール om_tcp
       ホスト ログ。{ドメインが削除されました}.com
       ポート 3515
    </出力>

    <出力 iis-out>
        モジュール om_tcp
        ホスト ログ。{ドメインが削除されました}.com
        ポート 3516
    </出力>


    <ルート1>
       パス内部、イベントログ => 出力
    </ルート>

    <ルート2>
        パス iis-logs => iis-out
    </ルート>

私の Logstash.conf ファイル:

    入力 {
        TCP {
            ポート => 5000
            タイプ =>「syslog」
        }
        TCP {
            タイプ => 「イベントログ」
            ポート => 3515
            コーデック => json_lines
        }
        TCP {
            タイプ => "iislog"
            ポート => 3516
            コーデック => json_lines
        }
    }

    フィルター {
        [タイプ] == "syslog" {
            グルク{
                match => { "message" => "<%{POSINT:syslog_pri}>%{DATA:syslog_timestamp} %{DATA:syslog_program}\[%{NUMBER:syslog_pid}\]\: %{GREEDYDATA:syslog_message}" }
                add_field => [ "received_at", "%{@timestamp}" ]
    # add_field => [ "received_from", "%{@source_host}" ]
            }
            syslog_pri { }
            日にち {
                一致 => [「syslog_timestamp」、「yyyy:MM:dd-HH:mm:ss」]
            }
            「_grokparsefailure」が[タグ]にない場合{
                突然変異 {
                    置換 => [ "@message", "%{syslog_message}" ]
                }
            }
            突然変異 {
                削除 => [「syslog_message」、「syslog_timestamp」]
            }
            kv {
                ソース=>「@メッセージ」
            }
        }
        [タイプ] == "イベントログ" {
            # nxlog からの受信 Windows イベント ログ
            # EventReceivedTime フィールドには数字のみを含める必要があります。そうしないと、無効なメッセージになります
    # if [EventReceivedTime] !~ /\d+/ { drop { } }
    #グレップ{
    # 一致 => [ "EventReceivedTime", "\d+" ]
    # }
            突然変異 {
                # 常に大文字の一部の値を小文字にします
                小文字 => [ "EventType", "FileName", "Hostname", "Severity" ]
            }
            突然変異 {
                # ソースをメッセージの内容に設定
                名前の変更 => [「ホスト名」、「@source_host」]
            }
            日にち {
                # タイムスタンプを整数から UTC に変換する
                一致 => [ "EventReceivedTime", "UNIX" ]
            }
            突然変異 {
                # 一部のフィールドの名前をより便利なものに変更
                名前の変更 => [「メッセージ」、「@メッセージ」]
                名前の変更 => [「重大度」、「eventlog_severity」]
                名前の変更 => [ "SeverityValue", "eventlog_severity_code" ]
                名前の変更 => [「チャンネル」、「eventlog_channel」]
                rename => [ "SourceName", "eventlog_program" ]
                名前の変更 => [「ソースモジュール名」、「nxlog_input」]
                名前の変更 => [「カテゴリ」、「eventlog_category」]
                名前の変更 => ["EventID", "eventlog_id"]
                rename => [ "RecordNumber", "eventlog_record_number" ]
                名前の変更 => [「ProcessID」、「eventlog_pid」]
            }
            突然変異 {
                # 冗長なフィールドを削除
                削除 => [「SourceModuleType」、「EventTimeWritten」、「EventTime」、「EventReceivedTime」、「EventType」]
            }
            [イベントログ ID] == 4624 {
                突然変異 {
                    add_tag => [「広告ログオン成功」]
                }
            }
            [イベントログ ID] == 4634 {
                突然変異 {
                    add_tag => [「広告ログオフ成功」]
                }
            }
            if [eventlog_id] == 4771 or [eventlog_id] == 4625 or [eventlog_id] == 4769 {
                突然変異 {
                    add_tag => [「広告ログオン失敗」]
                }
            }
            [eventlog_id] == 4723 {
                突然変異 {
                    add_tag => [「広告パスワード変更」]
                }
            }
            [eventlog_id] == 4724 {
                突然変異 {
                    add_tag => [「広告パスワードのリセット」]
                }
            }
            if "ad-logon-success" in [tags] {
                メトリクス {
                    add_tag => [「ドロップ」、「メトリック」、「広告ログオン成功」]
                    メーター => 「広告ログオン成功メトリック」
                }
            }
            if "ad-logon-failure" in [tags] {
                メトリクス {
                    add_tag => [「ドロップ」、「メトリック」、「広告ログオン失敗」]
                    メーター => 「広告ログオン失敗メトリック」
                }
            }
        }
        [タイプ] == "iislog" の場合
        {
            グルク{
    # match => ["message", "%{TIMESTAMP_ISO8601:log_timestamp} %{WORD:iisSite} %{IPORHOST:site} %{IP:hostip} %{WORD:method} %{URIPATH:page} %{NOTSPACE: querystring} %{NUMBER:port} %{NOTSPACE:username} %{IPORHOST:clientip} %{NOTSPACE:httpversion} %{NOTSPACE:useragent} %{NOTSPACE:referer} %{NUMBER:status} %{NUMBER:sub- status} %{NUMBER:win32-status} %{NUMBER:bytes-received} %{NUMBER:bytes-sent} %{NUMBER:time-taken}"]
                match => ["message", "%{DATESTAMP:log_timestamp} %{WORD:sitename} %{HOSTNAME:computername} %{IP:hostip} %{URIPROTO:method} %{URIPATH:request} (?:%{ NOTSPACE:queryparam}|-) %{NUMBER:port} (?:%{NOTSPACE:username}|-) %{IP:clientip} %{NOTSPACE:httpversion} %{NOTSPACE:user-agent} (?:%{ NOTSPACE:cookie}|-) (?:%{NOTSPACE:referer}|-) (?:%{HOSTNAME:host}|-) %{NUMBER:status} %{NUMBER:sub-status} %{NUMBER:win32 -status} %{NUMBER:bytes-received} %{NUMBER:bytes-sent} %{NUMBER:time-taken}"]
            }
            ユーザーエージェント {
                ソース=>「ユーザーエージェント」
            }
            #geoip {
            # ソース => "clientip"
            #}
        }
        メトリクス {
            メーター => 「イベント」
            add_tag => [「ドロップ」、「メトリック」、「イベント メトリック」]
        }
    }

    出力 {
        if "drop" not [tags] {
            エラスティックサーチ {
            ホスト => 「127.0.0.1」
            クラスター => 「ログ」
        }
    # stdout { codec => ruby​​debug }
        }
    }

IIS ログ エントリの例: 2015-05-06 15:41:18 W3SVC2 WEB1 10.11.10.137 GET /main/ - 80 ABCD\smith 10.11.11.127 HTTP/1.1 Mozilla/4.0+(compatible;+MSIE+7.0;+Windows+NT+6.3;+WOW64;+Trident/7.0;+Touch;+.NET4.0E;+.NET4.0C;+Tablet+PC+2.0;+.NET+CLR+3.5.30729;+.NET+CLR+2.0.50727;+.NET+CLR+3.0.30729;+InfoPath.3) cisession=a%3A4%3A%7Bs%3A10%3A%22session_id%22%3Bs%3A32%3A%22959e25c7a1663350eeb85edb676de096%22%3Bs%3A10%3A%22ip_address%22%3Bs%3A12%3A%2210.11.11.127%22%3Bs%3A10%3A%22user_agent%22%3Bs%3A120%3A%22Mozilla%2F4.0+%28compatible%3B+MSIE+7.0%3B+Windows+NT+6.3%3B+WOW64%3B+Trident%2F7.0%3B+Touch%3B+.NET4.0E%3B+.NET4.0C%3B+Tablet+PC+2.0%3B+.NET+CL%22%3Bs%3A13%3A%22last_activity%22%3Bi%3A1430926793%3B%7D08a40eacaf8b6eba6102c7746c35c46497a6502a http://my.domain.com/main/scheduling my.domain.com 200 0 0 11314 1009 1458

更新: 2 つ目の nxlog iis 入力/出力を追加し、logstash サーバーにデータを出力する代わりに、フラット ファイルに出力しました。

    <出力 iis2-out>
        モジュール om_file
        ファイル「C:\logs\logtest.txt」
    </出力>

この出力を確認したところ、logstash サーバーにアクセスする前に、ユーザー名からバックスラッシュが削除されていることがわかりました。

4

1 に答える 1

0

これも同じ問題だと思います。次のコマンドを使用して、デフォルトのバックスラッシュ エスケープ文字を無効にする必要があります。

EscapeChar 0x00
于 2015-05-11T22:20:44.963 に答える