アウトライン
logstashは、フィルタプラグインのその豊富で、強力かつ人気があった不可分です
フィルターは、単にフィルタ機能は、フィルタを入力する生データを処理するためのロジックを複雑にし、さらにはその後の処理に固有の新しいイベントを追加することができません提供します
強力なテキスト分析ツール - GROK
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正規表現を使用して
彼は任意の正規表現を解決することができるように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は、次のオプションも用意されています。
オプション | タイプ | あなたがする必要がありますか | デフォルト値 | 意味 |
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" }
スプリットの端部はプラグインを行い、直接出力段に、後続のすべてのフィルタが実行されない、ノート
データ変更 - のmutate
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つのフィールドがありません、配列やハッシュマージを注意すべきです