有する不規則なログ私はいくつかの通信機器から到来する(「メッセージ」の形で)イベントのトレース/ログを持っています。私の最終目標は、リアルタイムで(近くに)機器から来るデータストリームの監視と分析を行うことです。ELK - 複数のフォーマットと複数回線イベント
トレースはデバイスの内部操作のダンプのようなもので、複数のタイプのイベントが含まれています。複数の「メッセージ」にまたがるものもあります - 今はファイルを解析していますがstdinや何らかのストリームを解析します。
私は300万メッセージ時間を取得し、監視するために、いくつかのようなデバイスを持っていることを期待しています。私は現在、ちょうど:-)ものの始めた2つの課題(直面
:
マルチメッセージイベント
一部のイベントには、いくつかのメッセージの上に表示されます。
- 関連のメッセージは必ずしも連続していません。
- 通常、最初のメッセージは、イベントがセグメント化されていること、予想されるセグメント数、イベント識別子(キー)を含むことを示します。
- セグメントの残りの部分は同じイベント識別子
- は、分割ヘッダ及び他のセグメントは、
- 自分のプリアンブル/タイプ識別子を有しているセグメント化されたメッセージは、ちょうど真ん中に「カット」と、次のメッセージに続けています。例えば、
"<key xyz part 1> ... 12345"
、イベントのいくつかの種類があります( "不規則な" コンテンツを持つ)"<key xyz part 2> 67890 ..."
複数のイベントタイプ
が続く(20〜50 PROBが。)
各イベントの内容が異なります。
イベントのテキストは、任意の「固定」のパターンに従っていないようです。それはフリーテキストのキーと値のペア( "="セパレータとキーと値のペアと ":"セパレータ)を含んでいるようです。ここで助けてくれるのは、「フィールド」(それを呼び出すことができる場合)が「;」で区切られることが最も多いということだけです。
一部のフィールドは偶数値を持っていません。
(私は100%わからないけど)(フィールドの点で)ペイロードも同じメッセージタイプの中に変更することができそうです。
いくつかの例(私が "難読化")
[2016年8月11日11:47:44.340] [011400 \ 00] 1/RncLmUePT(1/someResource [209]) ../filename.cpp:335 INFO:some_signal_name信号が、SomeEventNameというカプセル名で受信されました。これは、TYPE_OF_EXEPTIONがAnotherPlaceに集められたことを示します。
これらの5つのメッセージは、マルチメッセージイベントの例です。最後のメッセージ(それは少し異なる開始)と、その3番目と4番目のメッセージが切断されている「ミッド文」の不規則性を注意してください
[2016年8月11日11:47:44.340] [021100 \ 01] 2/PdcLmPrPT somefile.cc:172 INFO:000001216649856キーは、4つの部分が続くため<セグメント化トレース>
[2016年8月11日11:47:44.340] [021100 \ 01] 2/PdcLmPrPT somefile.cc:179 CLIENT_CODE = UNDEF; CLIENT_CODE2 = 1424514436 [0x54e85d84]; devId = 33456; devFroId(デバイスID = 33456); INFO:「ExceptionCode = 521; TIMER somenameの期限切れ; InterfaceTimout(内部); Ueh; SomeCrypticName;接続に影響しない; callProc = = 871; prDevId = UNDEF; prDevFroId = UNDEF; spId = tc:p:225:1; typeModId = 20; "
[2016-08-11 11:47:44.340] [021100 \ 01] 2/PdcLmPrPT somefile.cc:179 INFO: "S-RNFF = 377540;原因コード= UNDEF;何も受け取られませんでした; sourceType = devNoValid; sPJK = 000000000000000000000000; targetType = someConnType; sPJK = 000000000000000000000000; UEキャップ= Rel9-00000000000000000000000000000010; fileNameに= ../anotherFileName.cpp;line = 9031;前の状態= someStateName;現在の状態=」
[2016年8月11日11:47:44.340] [ 021100 \ 01] 2/PdcLmPrPT somefile.cc:179 "WaitSomeOtherState; noOfSomeConnectionState = 459; noOfSomeResUsage = 598; ActiveDevId = [6548、-1、-1、-1、-1]; ActiveDevFroId = [871、-1 、-1、-1、-1]; raTimerStatus = 0; raLaxTimerStatus = 0; procedureTriggerReason = someTypeOfRequest; lastGrabRule = NameOfGrabRule、付加テキスト= EstablishmentCau」
[2016年8月11日11:47:44.340] [ 021100 \ 01] 2/PdcLmPrPT(2/SOME_EXCEPTION)../differentFile.cpp:4610 TRACE1: "seは登録(12)です。 PPT接続セットアップ完了またはPOMPリンク復元表示は受信されませんでした。 「
は私が可視化(kibana)などのために弾性を検索するには、このデータを置くことを考えて、私はlogstashが仕事のためのツールであるかどうかを確認します(または、少なくとも、既存のコーデック/プラグイン/フィルター)ないです。私は他の/より良いフレームワークについても聞いています。
これまで読んだことのあるものから、もっと一般的なデータでは、私はマルチラインコーデックと簡単な弾性出力プラグインはありますが、ここではこれらのツールが実行可能なオプションであるとは思われません。(私の評価で正しいですか?)
私が考えたのは多分一部のlogstashプラグインを自分でコーディングするか、スタンドアロンプログラムでトレースを処理してください。
私は既存のツールをどのように使用することができますか、またはこのシナリオの良いアプローチは何ですか?
P.S.私はRubyの経験はありませんが、java/js/pythonと.NET(C#)にはとても流暢です。
P.S.2 ELKで100%ロックされていません。それはそのような仕事のための最も一般的なツールの1つと思われます。私は、TSDBや列/ドキュメントDBもオプションとして考えています。
、(それらが連続していると仮定して)注文の問題を緩和するであろう、マルチフィルタはそれを扱うことができますか? –
もしあなたが正規表現を思いつくことができるなら、それはlogstashでできるはずです –