4

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="&quot;%{HOST}i&quot; - %h %t &quot;%m&quot; &quot;%U&quot; - &quot;%q&quot; - &quot;%H&quot; - %s %B &quot;%{User-Agent}i&quot; %T %D &quot;%p&quot;" prefix="access.log" rotate="true">
            <directory path="."/>
        </access-log>
    </virtual-server>
</subsystem>

現在、ログファイルを elk スタックに送信する方法が 2 つあります。まず、タイムスタンプなしで access.log に書き込み、ローテーションでタイムスタンプを追加して、logstash フォワーダーが常に access.log を読み取れるようにします。2 つ目は、常に最新の access.log ファイルをチェックするようにフォワーダー設定をセットアップすることです。このように、タイムスタンプ付きのファイル名は問題になりません。しかし、それが可能かどうかはわかりません。

アドバイスをいただければ幸いです。ありがとうございます。セバスチャン

4

1 に答える 1