bugfix> logstash > 投稿

私はlogstash 7.6.2を使用しています。 json文字列であるログ行があります。各jsonには3つのフィールドがあります。「msg」はテキスト、「topic」はテキスト、「ts」は浮動小数点です。

これが私の一致する式です:

{"msg"\s*:\s*(?<msg>".*")\s*,\s*"topic"\s*:\s*(?<topic>".*")\s*,\s*"ts"\s*:\s*(?<ts>[+-]?([0-9]*[.])?[0-9]+)\s*}

次に、2つのログ行の例を示します。

{"msg": "2020-05-01 01:09:06,043 ERROR [luna_messaging.handlers.base] HTTP 400: {\"success\": false}\nTraceback (most recent call last):\n  File \"/home/lunalife/luna_messaging/handlers/base.py\", line 238, in wrapper\n    yield func(self, *args, **kwargs)\n  File \"/home/lunalife/.local/lib/python2.7/site-packages/tornado/gen.py\", line 1015, in run\n    value = future.result()\n  File \"/home/lunalife/.local/lib/python2.7/site-packages/tornado/concurrent.py\", line 237, in result\n    raise_exc_info(self._exc_info)\n  File \"/home/lunalife/.local/lib/python2.7/site-packages/tornado/gen.py\", line 1021, in run\n    yielded = self.gen.throw(*exc_info)\n  File \"/home/lunalife/luna_messaging/handlers/device_status.py\", line 41, in get\n    raise tornado.web.HTTPError(400, reason=json.dumps(reason))\nHTTPError: HTTP 400: {\"success\": false}", "topic": "com.walker.prod.luna_messaging.handlers.base", "ts": 1588295346.043578}
{"msg": "2020-05-01 01:09:06,076 ERROR [luna_messaging.handlers.base] HTTP 403: Forbidden\nTraceback (most recent call last):\n  File \"/home/lunalife/luna_messaging/handlers/base.py\", line 238, in wrapper\n    yield func(self, *args, **kwargs)\n  File \"/home/lunalife/.local/lib/python2.7/site-packages/tornado/gen.py\", line 1015, in run\n    value = future.result()\n  File \"/home/lunalife/.local/lib/python2.7/site-packages/tornado/concurrent.py\", line 237, in result\n    raise_exc_info(self._exc_info)\n  File \"/home/lunalife/.local/lib/python2.7/site-packages/tornado/gen.py\", line 1024, in run\n    yielded = self.gen.send(value)\n  File \"/home/lunalife/luna_messaging/handlers/device_status.py\", line 46, in get\n    raise tornado.web.HTTPError(403)\nHTTPError: HTTP 403: Forbidden", "topic": "com.walker.prod.luna_messaging.handlers.base", "ts": 1588295346.076928}```

私はこれを示すいくつかのgrokテスターを使用しました。https://grokdebug.herokuapp.com/ そしてhttps://grokconstructor.appspot.com/do/match

問題は、logstash構成に統合すると、構文エラーが発生することです。私が何を間違っているのかわかりません。

これは私のlogstash構成のgrok matcherです:

grok {
   match => {"msg"\s*:\s*(?<msg>".*")\s*,\s*"topic"\s*:\s*(?<topic>".*")\s*,\s*"ts"\s*:\s*(?<ts>[+-]?([0-9]*[.])?[0-9]+)\s*}
}

これはlogstash起動エラーです:

Expected one of [ \\t\\r\\n], \"#\", \"=>\" at line 44, column 21

私の一致表現は正しいと思いますが、それをgrok構成に追加する方法がわかりません。任意の助けいただければ幸いです。

回答 1 件
  • パターンマッチングを適用するフィールドをgrokフィルターに指示する必要があります。

    ドキュメント(https://www.elastic.co/guide/en/logstash/current/plugins-filters-grok.html#plugins-filters-grok-match)からわかるように、match-settingは構文に従います

    grok{
      match => { "FIELDNAME" => "PATTERN" }
    }
    
    

    デフォルトのフィールドLogstashは、ログ行のテキストを入れて呼び出されます message 。したがって、次のようにコードを調整します。

    grok{
      match => { "message" => "PATTERN" }
    }
    
    

    さらに、パターンは引用符で囲む必要があり、特殊文字はエスケープする必要があることに注意してください(以下の例では後者を使用していません)。パターン自体で二重引用符を使用するため、次のように単一引用符を使用する必要があります。

    grok{
      match => { 'message' => '{"msg"\s*:\s*(?<msg>".*")\s*,\s*"topic"\s*:\s*(?<topic>".*")\s*,\s*"ts"\s*:\s*(?<ts>[+-]?([0-9]*[.])?[0-9]+)\s*}' }
    }
    
    

    お役に立てれば幸いです。

あなたの答え