質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
REST

REST(Representational State Transfer)はwebアプリケーションの構築スタイルの一種です。HTTP GET/POSTによってリクエストを送信し、レスポンスはXMLで返されます。SOAPのようなRPCの構築と比べるとサーバからクライアントを分離することが出来る為、人気です。

正規表現

正規表現とは特定の文字列によるパターンマッチングを行う際に用いられる宣言型プログラミングです。

Tomcat

TomcatはApache Software Foundation (ASF)で開発されたオープンソースのWebコンテナです。

Q&A

解決済

1回答

1912閲覧

tomcatのログを正規表現で表したい

SaintStar717

総合スコア5

REST

REST(Representational State Transfer)はwebアプリケーションの構築スタイルの一種です。HTTP GET/POSTによってリクエストを送信し、レスポンスはXMLで返されます。SOAPのようなRPCの構築と比べるとサーバからクライアントを分離することが出来る為、人気です。

正規表現

正規表現とは特定の文字列によるパターンマッチングを行う際に用いられる宣言型プログラミングです。

Tomcat

TomcatはApache Software Foundation (ASF)で開発されたオープンソースのWebコンテナです。

1グッド

1クリップ

投稿2020/01/27 06:52

前提・実現したいこと

REST-API(HTTP)をサービスしているtomcatが出力しているaccess.logをkibanaへ転送して解析を行おうとしています。
※filebeat等のエンジンを利用
出力されるtomcatの正規表現でLogFormatを定義しようとしていたところ、整形ができないログが出てきました。
うまく行かない場合を含めた正規表現を模索しておりますがうまく行かないため質問させていただきます。

試したこと・発生している問題・エラーメッセージ

定義した正規表現
^(?<client_ip>.+?) - - [(?<date>.+?)] "(?<method>.+?) /(?<ver>....)/(?<resource>.+)?/ (?<protocol>.+?)" (?<status_code>.+?) (?<size>.+?) (?<responsetime>.+) "X-Forwarded-For:(?<from_ip>.+),(?<to_ip>.+)"

きれいに整形されるパターン

生ログ:
127.0.0.1 - - [27/Jan/2020:13:44:09 +0900] "GET /v2.0/users?filters=user_id%3D%3DAAA HTTP/1.1" 200 189 97 "X-Forwarded-For:215.86.229.101, 215.160.172.105"

Match groups:
client_ip 127.0.0.1
date 27/Jan/2020:13:44:09 +0900
method GET
ver v2.0
resource users
request filters=user_id%3D%3DAAA
protocol HTTP/1.1
status_code 200
size 189
responsetime 97
from_ip 215.86.229.101
to_ip 215.160.172.105

うまく行かないパターン

生ログ:
215.160.135.36 - - [27/Jan/2020:00:11:38 +0900] "GET /v2.0/users?filters=user_id%3D%3DAAA HTTP/1.1" 200 6395 110 "X-Forwarded-For:-"
※LBを経由せずx-Forwarded-Forが出力されない場合

Match groups:
No Match

問題だと思う点

X-Forwarded-Forの後に値が出力されるか否か(","(カンマ))によって正規表現を分岐させようと思い

  • "|"(パイプ)
  • ",??"(カンマが0か1個)

のメタ文字を使っていろいろ試しましたがうまくいきません。

回答のクローズ条件

上記うまく行かないパターンにおいて、
Match groups:
client_ip 215.160.135.36
date 27/Jan/2020:13:44:09 +0900
method GET
ver v2.0
resource users
request filters=user_id%3D%3DAAA
protocol HTTP/1.1
status_code 200
size 189
responsetime 97
★from_ip -
★to_ip
※★印が出力したい情報

となるような正規表現形式を定義したい

補足情報(FW/ツールのバージョンなど)

正規表現参考サイト
https://rubular.com/

yureighost👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

こんなとこでどうでしょう。

^(?<client_ip>.+?) - - [(?<date>.+?)] \"(?<method>.+?) /(?<ver>....)/(?<resource>.+)[?/](?<request>.+?) (?<protocol>.+?)\" (?<status_code>.+?) (?<size>.+?) (?<responsetime>.+) \"X-Forwarded-For:(?<from_ip>[0-9.-]+),? ?(?<to_ip>[0-9.]*)\"

置換を何でやってるかまではわからなかったのですが、下記の置換文字列で
sakura editorの正規表現置換でご要望の通りと思われる形式で置換はできました。

client_ip \1\ndate \2\nmethod \3\nver \4\nresource \5\nrequest \6\nprotocol \7\nstatus_code \8\nsize \9\nresponsetime \10\nfrom_ip \11\nto_ip \12\n

投稿2020/01/27 12:51

yureighost

総合スコア2183

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

SaintStar717

2020/01/28 00:39

意図した状態で整形することができました。回答ありがとうございます。 X-foarawd-forの有無を[,? ?]で指定する部分がポイントでした。 Match 2 client_ip 215.160.135.36 date 27/Jan/2020:00:11:38 +0900 method GET ver v2.0 resource users request filters=user_id%3D%3DAAA protocol HTTP/1.1 status_code 200 size 6395 responsetime 110 from_ip - to_ip
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問