logstash从Telegram

时间:2018-05-23 22:18:33

标签: logstash logstash-grok

我通过电报历史(txt文件)进行处理,我需要提取&处理相当复杂(嵌套)的多行模式。 这是整个模式

Free_Trade_Calls__AltSignals:IOC/ BTC (bittrex)

BUY :  0.00164

SELL :

TARGET 1 : 0.00180
TARGET 2 : 0.00205
TARGET 3 : 0.00240

STOP LOS : 0.000120
2018-04-19 15:46:57 Free_Trade_Calls__AltSignals:TARGET

基本上我正在寻找以

开头的模式
Free_Trade_Calls__AltSignals: ^%(

以时间戳结束。 在那个模式里面(电报留言)

 - exchange - in brackets in the 1st line 
 - extract value after BUY 
 - SELL values in a array of 3 SELL[3] : target 1-3
 - STOP loss value (it can be either STOP, STOP LOSS, STOP LOS)....

我发现了这个Logstash grok multiline message,但我对logstash firend非常陌生,建议我这样做。我试图在NodeJS中解析这个文本,但它确实是痛苦的屁股和疯狂的。

谢谢Rob:)

1 个答案:

答案 0 :(得分:1)

由于您需要从每一行中获取值,因此您不需要使用多行修饰符。您可以使用%{SPACE}字符跳过空行。

对于您的给定日志,可以使用此模式,

Free_Trade_Calls__AltSignals:.*\(%{WORD:exchange}\)\s*BUY\s*:\s*%{NUMBER:BUY}\s*SELL :\s*TARGET 1\s*:\s*%{NUMBER:TARGET_1}\s*TARGET 2\s*:\s*%{NUMBER:TARGET_2}\s*TARGET 3\s*:\s*%{NUMBER:TARGET_3}\s*.*:\s*%{NUMBER:StopLoss}

请注意\s*等于%{SPACE} 它会输出,

{
  "exchange": [
    [
      "bittrex"
    ]
  ],
  "BUY": [
    [
      "0.00164"
    ]
  ],
  "BASE10NUM": [
    [
      "0.00164",
      "0.00180",
      "0.00205",
      "0.00240",
      "0.000120"
    ]
  ],
  "TARGET_1": [
    [
      "0.00180"
    ]
  ],
  "TARGET_2": [
    [
      "0.00205"
    ]
  ],
  "TARGET_3": [
    [
      "0.00240"
    ]
  ],
  "StopLoss": [
    [
      "0.000120"
    ]
  ]
}