Logstashフィルター使用

アウトライン

logstashは、フィルタプラグインのその豊富で、強力かつ人気があった不可分です

フィルターは、単にフィルタ機能は、フィルタを入力する生データを処理するためのロジックを複雑にし、さらにはその後の処理に固有の新しいイベントを追加することができません提供します

 

GROKは、彼がどのような形式でテキストを解析することができ、非常に強力なlogstashフィルタプラグインである、彼は現在解析logstashに非構造化ログデータへの最善の方法です

 

 

基本的な使い方

 

GROKの文法規則は、次のとおりです。

%{構文:セマンティクス}

「文法」は、デジタルを一致させることができます番号のパターンを使用して、例えば、パターンマッチングを指し、IPは、IPアドレス127.0.0.1これと一致します。

%{NUMBER:lasttime}%{IP:クライアント}

デフォルトでは、すべての文字列として保存されている「意味」、あなたはまた、データ型の変換に追加することができます

%{NUMBER:lasttime:int型}%{IP:クライアント}

現在、唯一の変換int型とfloatをサポートしています

 

 

カバレッジ - 上書き

 

使用GROK上書きパラメータ情報は、ログを被覆することができます

コードをコピー
フィルタ{ 
    GROK { 
        マッチ=> { "メッセージ" => "%{SYSLOGBASE}%{DATA:メッセージ}"} 
        上書き=> [ "メッセージ"] 
    } 
}
コードをコピー

ログフィールドにメッセージがカバーされます

 

 

 

以下のログについては、実際にはHTTPリクエストラインです:

 

15824 0.043 /index.htmlが55.3.244.1 GET

Logstash我々は、以下の構成を使用することができます。

コードをコピー
入力{ 
ファイル{ 
パス=> "/var/log/http.log" 
} 
} 
フィルタ{ 
GROK { 
マッチ=> { "メッセージ" =>「%{IP:クライアント}%{WORD:メソッド}%{URIPATHPARAM:要求}%{NUMBER:バイト}%{NUMBER:期間}」} 
} 
}
コードをコピー

 

結果を見ることができます収集:

クライアント:55.3.244.1 
メソッド:GETの
リクエスト:/index.htmlが
バイト:15824 
期間:0.043

データ構造は、Aのように構成された出力せずに実現されています

 

彼は任意の正規表現を解決することができるようにGROKは、(鬼車ライブラリを使用して)正規表現に基づいて実装されています

 

 

作成モード

 

ログフィールド抽出と正規表現抽出ルールのフィールドとして:

(?ここでは<FIELD_NAME>パターン)

まず、スキーマファイルを作成するには、正規表現を記述する必要があります。

#./patterns/postfixの内容:
POSTFIX_QUEUEID [0-9A-F] {10,11}

次に、あなたのLogstashを設定します。

コードをコピー
フィルタ{ 
    GROK { 
        patterns_dir => "./patterns" 
            マッチ=> { "メッセージ" => "%{SYSLOGBASE}%{POSTFIX_QUEUEID:というqueue_id}:%{GREEDYDATA:syslog_message}"} 
    } 
}
コードをコピー

ログの場合:

1月1日午前6時25分43秒mailserver14ポストフィックス/クリーンアップ[21403]:BEF25A72965:メッセージID = <[email protected]>

これは、一致させることができます。

タイムスタンプ:1月1日午前六時25分43秒

LOGSOURCE:mailserver14

プログラム:postfixの/クリーンアップ

PID:21403

queue_id:BEF25A72965

syslog_message:メッセージID = <[email protected]>

 

IP位置プラグ - のGeoIP

上記メッセージLogstash 1.3.0は、IP対応するプラグインのGeoIPの位置を得るために使用することができる、それのような統計的なアクセスログのために、非常に有用な供給源であるIP

 

 

使用

GeoIP { 
    ソース=> ... 
}

フィルタ{ 
    のGeoIP { 
        ソース=> "メッセージ" 
    } 
}

結果:

コードをコピー
{ 
    "メッセージ" => "183.60.92.253"、
    "@version" => "1"、
    "@timestamp" => "2014-08-07T10:32:55.610Z"、
    "ホスト" =>「raochenlindeMacBookエアー.LOCAL " 
    "のGeoIP"=> { 
        " "IP" =>" 183.60.92.253 
        country_code2 "=> "CN"、" 
        "country_code3"=> "CHN"、
        "COUNTRY_NAME"=> "中国"、
        " continent_code "=> "AS"、
        "REGION_NAME"=> "30"、
        "CITY_NAME"=> "広州"、
        "緯度"=> 23.11670000000001、 
        "経度" => 113.25、
        "時間帯" => "アジア/重慶"、
        "real_region_name" => "広東"、
        "位置" => [ 
            [0] 113.25、
            [1] 23.11670000000001 
        ] 
    } 
}
コードをコピー

私たちは、見IPのメッセージ欄に抽出することでlogstash、地理的位置に関連する一連の情報を解決することができます

もちろん、解析された多くのデータのために、あなたはフィールドオプションによってフィルタリングすることができます

コードをコピー
フィルタ{ 
    のGeoIP { 
        フィールド=> [ "CITY_NAME"、 "continent_code"、 "country_code2"、 "country_code3"、 "COUNTRY_NAME"、 "dma_code"、 "IP"、 "緯度"、 "経度"、 "POSTAL_CODE"、「REGION_NAME 」、 "タイムゾーン"] 
    } 
}
コードをコピー

オプション

 

我々は2つのオプションがソースを参照し、フィールドの上、のGeoIPは、次のオプションも用意されています。

GeoIPを提供して選択可能なオプション
オプション タイプ あなたがする必要がありますか デフォルト値 意味
add_field ハッシュ ノー {} 現在のイベントのためにフィールドを追加します。
タグ付けする アレイ ノー [] 現在のイベントの増加を識別するタグ
データベース パス ノー ノー 場所場所ファイルリポジトリ
フィールド アレイ ノー ノー リターンのGeoIPでスクリーニング結果の一部のフィールド
lru_cashe_size int型 1000年 geoipの占有キャッシュサイズ
periodic_flush BOOL ノー かどうかは、定期的にリフレッシュパーティの電子と呼ばれます
remove_field アレイ ノー [] 結果からフィールドを削除します
remove_tag アレイ ノー [] 結果からタグを削除
ソース それはあります ノー IPフィールド名を解決する必要があります
ターゲット ノー "geoipの" 解析結果保存のGeoIPフィールド名の結果へ戻ります

 

JSON

ログJSONの形式はJSONエンコーディングコーデックによって解決することができますが、レコードは、JSONの一部である場合にのみ、この時間は、あなたがにプラグインフィルタをデコードし、JSONを使用する必要があります

コードをコピー
フィルタ{ 
    JSON { 
        ソース=> "メッセージ" 
        ターゲット=> "jsoncontent" 
    } 
}
コードをコピー

結果:

コードをコピー
{ 
    "@version": "1"、
    "@timestamp": "2014-11-18T08:11:33.000Z"、
    "ホスト": "web121.mweibo.tc.sinanode.com"、
    "メッセージ":「{ \ "\ UID":3081609001、\ "タイプ\":\ "信号\"}」、
    "jsoncontent":{ 
        "UID":3081609001、
        "タイプ": "信号" 
    } 
}
コードをコピー

上記の例では、解析結果は、ターゲットノードの下に配置される他の分野におけるログ分析結果と、所望であれば、同じ出力レベルに維持され、その後、ターゲットのみを除去する必要が指摘:

コードをコピー
{ 
    "@version": "1"、
    "@timestamp": "2014-11-18T08:11:33.000Z"、
    "ホスト": "web121.mweibo.tc.sinanode.com"、
    "メッセージ":「{ \ "\ UID":3081609001、\ "タイプ\":\ "信号\"}」、
    "UID":3081609001、
    "タイプ": "信号" 
}
コードをコピー

時分割 - スプリット

mutilineがイベントに複数行のデータをlogstashましょうもちろん、logstashラインデータをサポートしてより多くのイベントとなり

logstashは、複数のイベントへのデータの行を分割するために使用される、分割されたプラグを提供します

 

例:

コードをコピー
フィルタ{ 
    スプリット{ 
        フィールド=> "メッセージ" 
        ターミネータ=> "#" 
    } 
}
コードをコピー

結果:

「test1の番号のTEST2」の場合は、上記のlogstashは、次の2つのイベントにそれを回すように設定します:

コードをコピー
{ 
    "@version": "1"、
    "@timestamp": "2014-11-18T08:11:33.000Z"、
    "ホスト": "web121.mweibo.tc.sinanode.com"、
    "メッセージ":「TEST1 " 
} 
、{ 
    "@version": "1"、
    "@timestamp": "2014-11-18T08:11:33.000Z"、
    "ホスト": "web121.mweibo.tc.sinanode.com"、
    "メッセージ": "TEST2" 
}
コードをコピー

 

スプリットの端部はプラグインを行い、直接出力段に、後続のすべてのフィルタが実行されない、ノート

 

logstashまた、フィルタのイベント内のデータへの変更をサポートしています

 

 

名前の変更 - 名前変更

 

そのフィールド名の名前を変更する既存のフィールドについては、

フィルタ{ 
    のmutate { 
        リネーム=> [ "syslog_host"、 "ホスト"] 
    } 
}

更新フィールドの内容 - 更新

 

フィールドが存在しない場合は、更新フィールドの内容は、新しいものではありません

フィルタ{ 
    のmutate { 
        アップデート=> { "サンプル" => "私の新しいメッセージ"} 
    } 
}

フィールドの内容を交換してください - 置き換えます

 

同じ機能を更新し、フィールドが存在しない場合、それは新しいフィールドを作成することを除いて、

フィルタ{ 
    のmutate { 
        置き換える=> { "メッセージ" => "%{source_hostこの}:私の新しいメッセージ"} 
    } 
}

データ型変換 - 変換

フィルタ{ 
    のmutate { 
        変換=> [ "REQUEST_TIME"、 "フロート"] 
    } 
}

テキスト置換 - GSUB

 

GSUB申し出テキスト置換機能は、正規表現によって達成されます

コードをコピー
filter {
    mutate {
        gsub => [
            # replace all forward slashes with underscore
            "fieldname", "/", "_",
            # replace backslashes, question marks, hashes, and minuses
            # with a dot "."
            "fieldname2", "[\\?#-]", "."
        ]
    }
}
コードをコピー

大小写转换 -- uppercase、lowercase

filter {
    mutate {
        uppercase => [ "fieldname" ]
    }
}

去除空白字符 -- strip

 

类似 php 中的 trim,只去除首尾的空白字符

filter {
    mutate {
        strip => ["field1", "field2"]
    }
}

删除字段 -- remove、remove_field

 

remove 不推荐使用,推荐使用 remove_field

filter {
    mutate {
        remove_field => [ "foo_%{somefield}" ]
    }
}

删除字段 -- remove、remove_field

 

remove 不推荐使用,推荐使用 remove_field

filter {
    mutate {
        remove_field => [ "foo_%{somefield}" ]
    }
}

分割字段 -- split

 

将提取到的某个字段按照某个字符分割

filter {
    mutate {
        split => ["message", "|"]
    }
}

针对字符串 "123|321|adfd|dfjld*=123",可以看到输出结果:

コードをコピー
{
    "message" => [
        [0] "123",
        [1] "321",
        [2] "adfd",
        [3] "dfjld*=123"
    ],
    "@version" => "1",
    "@timestamp" => "2014-08-20T15:58:23.120Z",
    "host" => "raochenlindeMacBook-Air.local"
}
コードをコピー

聚合数组 -- join

 

将类型为 array 的字段中的 array 元素使用指定字符为分隔符聚合成一个字符串

 

如我们可以将 split 分割的结果再重新聚合起来:

コードをコピー
filter {
    mutate {
        split => ["message", "|"]
    }
    mutate {
        join => ["message", ","]
    }
}
コードをコピー

输出:

コードをコピー
{ 
    "メッセージ" => "123321、adfd、dfjld * = 123"、
    "@version" => "1"、
    "@timestamp" => "2014-08-20T16:01:33.972Z"、
    "ホスト" = > "raochenlindeMacBook-Air.local" 
}
コードをコピー

アレイマージ - マージ

 

文字列または配列やハッシュのフィールドのいくつかのタイプのために、我々は、マージマージを使用することができます

フィルタ{ 
    のmutate { 
        マージ=> [ "dest_field"、 "added_field"] 
    } 
}

これは、2つのフィールドがありません、配列やハッシュマージを注意すべきです

 

おすすめ

転載: www.cnblogs.com/ExMan/p/11960459.html