jboss に、必要なすべての情報を含むアクセス ログを書き込み、毎日のログ ローテーションを使用するように指示しようとしています。これまでのところ、これは問題ではありません。最終的な目標は、logstash フォワーダーを使用して、すべてのアクセス ログ エントリを elk スタックに送信することです。また、それほど大したことではありません。私が今抱えている問題は、アクセス ログの名前を定義することです。
JBoss はすぐに使用できるログ ローテーションを提供しますが、各ログ ファイルにタイムスタンプを追加するため、今日のファイルにもタイムスタンプ サフィックスがあります。
私が達成したいのは、Tomcat または jbosses server.log と同じ動作です。つまり、今日のファイルは単に access.log という名前にする必要があり、今日のファイルが昨日のファイルになり、したがって非アクティブ状態にローテーションされる場合にのみサフィックスを追加する必要があります。
私のjboss設定は次のようになります:
<subsystem xmlns="urn:jboss:domain:logging:1.3">
<periodic-rotating-file-handler name="FILE" autoflush="true">
<formatter>
<pattern-formatter pattern="%d{HH:mm:ss,SSS} %-5p [%c] (%t) %s%E%n"/>
</formatter>
<file relative-to="jboss.server.log.dir" path="server.log"/>
<suffix value=".yyyy-MM-dd"/>
<append value="true"/>
</periodic-rotating-file-handler>
<periodic-rotating-file-handler name="ACCESS" autoflush="true">
<formatter>
<pattern-formatter pattern="%d{HH:mm:ss,SSS} %-5p [%c] (%t) %s%E%n"/>
</formatter>
<file relative-to="jboss.server.log.dir" path="access.log"/>
<suffix value=".yyyy-MM-dd"/>
<append value="true"/>
</periodic-rotating-file-handler>
<logger category="com.arjuna">
<level name="WARN"/>
</logger>
<logger category="org.apache.tomcat.util.modeler">
<level name="WARN"/>
</logger>
<logger category="org.jboss.as.config">
<level name="DEBUG"/>
</logger>
<logger category="sun.rmi">
<level name="WARN"/>
</logger>
<logger category="jacorb">
<level name="WARN"/>
</logger>
<logger category="jacorb.config">
<level name="ERROR"/>
</logger>
<root-logger>
<level name="INFO"/>
<handlers>
<handler name="FILE"/>
<handler name="ACCESS"/>
</handlers>
</root-logger>
</subsystem>
そして、これがログローテーションを有効にした私のアクセスログ構成です (上記のタイムスタンプの動作があります)。rotate="false" を設定すると、評価されていない access.log が表示されます。
<subsystem xmlns="urn:jboss:domain:web:1.5" default-virtual-server="default-host" native="false">
<connector name="http" protocol="HTTP/1.1" scheme="http" socket-binding="http"/>
<virtual-server name="default-host" enable-welcome-root="true">
<alias name="localhost"/>
<alias name="example.com"/>
<access-log pattern=""%{HOST}i" - %h %t "%m" "%U" - "%q" - "%H" - %s %B "%{User-Agent}i" %T %D "%p"" prefix="access.log" rotate="true">
<directory path="."/>
</access-log>
</virtual-server>
</subsystem>
現在、ログファイルを elk スタックに送信する方法が 2 つあります。まず、タイムスタンプなしで access.log に書き込み、ローテーションでタイムスタンプを追加して、logstash フォワーダーが常に access.log を読み取れるようにします。2 つ目は、常に最新の access.log ファイルをチェックするようにフォワーダー設定をセットアップすることです。このように、タイムスタンプ付きのファイル名は問題になりません。しかし、それが可能かどうかはわかりません。
アドバイスをいただければ幸いです。ありがとうございます。セバスチャン