Журналы доступа JBoss с ротацией журналов

Я пытаюсь сказать своему jboss написать журнал доступа со всей необходимой мне информацией и использовать ежедневную ротацию журнала. Пока это не вопрос. Конечная цель — отправить все записи журнала доступа в стек elk с помощью пересылки logstash. Тоже не такое уж большое дело. Проблема, с которой я сталкиваюсь сейчас, заключается в том, чтобы определить имена журналов доступа.

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. Во-первых, запись в access.log без временной метки и добавление временной метки при чередовании, чтобы программа пересылки logstash всегда могла прочитать access.log. Во-вторых, настроить конфигурацию серверов пересылки, чтобы всегда проверять новейший файл access.log. Таким образом, имя файла с отметкой времени не будет проблемой. Но я не знаю, возможно ли это.

Буду благодарен за любой совет. Спасибо и привет. Себастьян


person Sebastian Sommerfeld    schedule 19.02.2015    source источник
comment
Задумывались ли вы об использовании собственного клапана, который соответствует вашим потребностям? Знаю, это не бесплатно, но у меня есть для вас пример: gist.github.com /mp911de/c558d1bc48effe4844e2   -  person mp911de    schedule 06.03.2015


Ответы (1)


Примечание

  • Приведенное ниже решение протестировано на EAP 7.0/Wildfly 10.
  • Вся конфигурация, показанная ниже, выполняется в standalone.xml

Ротация журнала, которая идет непосредственно с журналом доступа JBoss EAP/Wildfly, очень проста и имеет некоторые ограничения. В вопросе выше ротация логов активируется следующим образом

<access-log .... rotate="true" />

В нашем случае мы решили проблему плохой ротации журналов, не используя ее и отправляя журнал доступа в общий журнал сервера (примечание use-server-log="true").

<subsystem xmlns="urn:jboss:domain:undertow:4.0">
  ...
  <server name="default-server">
    <http-listener  name="default" socket-binding="http"  record-request-start-time="true" redirect-socket="https" />
    <https-listener name="https"   socket-binding="https" record-request-start-time="true" security-realm="ApplicationRealm" />
    <host name="default-host" alias="localhost">
      <!-- how to access log see https://access.redhat.com/solutions/2423311 -->
      <!-- access log pattern see http://undertow.io/javadoc/1.3.x/io/undertow/server/handlers/accesslog/AccessLogHandler.html -->
      <!-- Hint: access log is sent to server log (use-server-log="true") in order to add proper log file rolling/purging and set a readable timestamp -->
      <access-log pattern="%h %l %u &quot;%r&quot; %s %b &quot;%{i,Referer}&quot; &quot;%{i,User-Agent}&quot; &quot;%{i,COOKIE}&quot; &quot;%{o,SET-COOKIE}&quot; %S &quot;%I&quot; %T" use-server-log="true"/>
      ...
    </host>
  </server>

Важно, не забудьте поставить record-request-start-time="true" на http-listener, иначе вы не получите журналы синхронизации.

В разделе <subsystem xmlns="urn:jboss:domain:logging мы настроили логирование доступа следующим образом:

<profile>
    <subsystem xmlns="urn:jboss:domain:logging:3.0">
        ...
        <!-- log rotate access.log by size to avoid disk-full -->
        <size-rotating-file-handler name="ACCESS" autoflush="true">
            <formatter>
                <pattern-formatter pattern="[%d] - %s%n"/>
            </formatter>
            <file relative-to="jboss.server.log.dir" path="access.log"/>
            <rotate-size value="10485760"/>
            <max-backup-index value="5"/>
            <append value="true"/>
        </size-rotating-file-handler>
        ...
        <logger category="io.undertow.accesslog" use-parent-handlers="false">
            <handlers>
                <handler name="ACCESS"/>
            </handlers>
        </logger>
        <root-logger>
            <level name="INFO"/>
            <handlers>
                <handler name="CONSOLE"/>
                <handler name="FILE"/>
            </handlers>
        </root-logger>
        ...
    </subsystem>

Это создаст не более 5 файлов журнала доступа по 10 МБ каждый. Существуют также другие обработчики журналов, например. ежедневная прокатка.

Информация о том, как настроить JBoss Logging/LogHandlers:

Дополнительная информация здесь для тех, у кого есть учетная запись RedHat:

person Marc Schmid    schedule 17.06.2019