Настройка logsta sh -совместимых шаблонов ведения журнала в Apache Storm Workers - PullRequest
2 голосов
/ 10 февраля 2020

У меня возникли некоторые трудности при переводе журналов рабочей / топологической информации Storm в ELK-совместимый формат (JSON) с Storm 2.1.0.

Это мои текущие рабочие конфигурации регистрации:

cluster.xml

<Configuration monitorInterval="60" shutdownHook="disable" packages="ch.qos.logback.core">
    <Properties>
        <property name="logstash">+ %msg +%n</property> <!-- only for 'bug' demonstration purposes -->
    </Properties>
    <Appenders>
        <Console name="CONSOLE">
            <PatternLayout>
                <Pattern>${logstash}</Pattern>
            </PatternLayout>
        </Console>
    </Appenders>
    <Loggers>
        <Root level="INFO">
            <AppenderRef ref="CONSOLE" />
        </Root>
    </Loggers>
</Configuration>

worker.xml

<Configuration monitorInterval="60" shutdownHook="disable" packages="ch.qos.logback.core">
        <Properties>
            <property name="logstash">{"@timestamp":"%d{yyyy-MM-ddTHH:mm:ss.SSS}", "logger": "%logger", "message":"%msg","thread_name":"%t","level":"%level"}%n</property>
    </Properties>
    <Appenders>
        <Console name="CONSOLE">
            <PatternLayout>
                    <Pattern>${logstash}</Pattern>
            </PatternLayout>
        </Console>
    </Appenders>
    <Loggers>
        <Logger name="org.com.package" level="DEBUG" additivity="false">
            <AppenderRef ref="CONSOLE"/>
        </Logger>
        <Root level="INFO">
            <AppenderRef ref="CONSOLE"/>
        </Root>
    </Loggers>
</Configuration>

В соответствии с моей конфигурацией, я бы ожидал сообщение журнала, отформатированное аналогично следующему (новые строки добавлены для ясности:

{
  "@timestamp": "2020-02-11 11:32:40,748",
  "logger": "org.com.package.aggregation.SomeAggregation",
  "message": "joinStateStream: values: [33333333-4e30-49a6-8e1c-f7817633bb34, 7c777777-a622-4ae4-a504-2490db47cafe, 2020-02-11]",
  "thread_name": "Thread-23-b-25-joinState-groupedQ-revQ-executor[22, 22]",
  "level": "DEBUG"
}

Однако создается впечатление, что сообщения «упаковываются» либо процессом супервизора, либо даже самим работником. Сообщения журнала, которые я получаю, выглядят следующим образом:

(новые строки / пробел добавлен для удобства чтения)

+ Worker Process 273c05df-f087-43ca-a59a-e281bae98ab1:  
{  
    "@timestamp":"2020-02-11 11:32:40,748",
    "logger": "STDERR",
    "message":
        "{
            "@timestamp":"2020-02-11 11:32:40,748",
            "logger": "org.com.package.aggregation.SomeAggregation",
            "message":"joinStateStream: values: [33333333-4e30-49a6-8e1c-f7817633bb34, 7c777777-a622-4ae4-a504-2490db47cafe, 2020-02-11]",
            "thread_name":"Thread-23-b-25-joinState-groupedQ-revQ-executor[22, 22]",
            "level":"DEBUG"
        }",  
    "thread_name":"Thread-2",
    "level":"INFO"} +

Здесь, кажется, происходит несколько вещей (идущих внутрь):

  1. Кажется, что руководитель упаковывает все рабочие сообщения и добавляет к ним Worker Process <worker-id>:. Это можно заметить по +, который упаковывает все сообщение.
  2. Работник, похоже, каким-то образом оборачивает свои собственные сообщения журнала. Часть журнала message содержит еще одно сообщение журнала.
  3. Можно ли отключить этот префикс журнала супервизора? Глядя на исходный код в org.apache.storm.daemon.supervisor.BasicContainer#launch, это кажется жестко закодированным. Я не могу себе представить, что правильное развертывание топологии должно привести к жестко заданному префиксу , который добавляется к каждому сообщению в журнале.

  4. Как может происходить это перенос рабочего сообщения? Как я вижу, «wrappee» - это мое реальное сообщение о топологии (которое я sh должен проанализировать), а «обертка» - это нечто совершенно иное (с регистратором STDERR? Почему он регистрируется в STDERR? С уровнем INFO ???)

По сути, я хочу просто регистрировать некоторые сообщения во время выполнения моей топологии и контролировать формат этих сообщений. Как я могу сделать это надежно с помощью Storm?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...