Попытка войти в Splunk с помощью logback appender

Я пытаюсь войти в splunk непосредственно в своем Java-приложении, используя приложение logback для splunk.

Кажется, ничего не собирается, но когда я вручную запускаю команду post в клиенте REST, я вижу свои данные в splunk.

Я также не смог заставить работать официальный тест журнала splunk.

logback.xml

  <appender name="SPLUNK" class="com.splunk.logging.HttpEventCollectorLogbackAppender">
    <url>http://mySplunkUrl:8088/services/collector</url>
    <token>1234566789</token>
    <disableCertificateValidation>true</disableCertificateValidation>
    <batch_size_count>1</batch_size_count>
    <layout class="ch.qos.logback.classic.PatternLayout">
      <pattern>%msg</pattern>
    </layout>
  </appender>

  <root level="trace">
    <appender-ref ref="SPLUNK" />
  </root>

</configuration>

Модульный тест

@Test
public void splunkLogger() {
    Logger logger = LoggerFactory.getLogger(LogFactoryTest.class);
    Date date = new Date();
    String jsonMsg = String.format("{event:'CancerCenterTest'}");
    logger.info("CancerCenterTest");
    logger.info(jsonMsg);
}

Это документация, которую я пытался использовать: http://dev.splunk.com/view/splunk-logging-java/SP-CAAAE7M

Я упускаю что-то очевидное?

EDIT Вот ссылка на мой проект - https://github.com/toymachiner62/splunk-logging


person Catfish    schedule 22.11.2016    source источник
comment
Можете ли вы отправить ZIP-файл вашего проекта на [email protected]? Я могу помочь, если у меня есть немного больше информации о том, как настроен ваш проект.   -  person Shakeel    schedule 23.11.2016
comment
@Shakeel Хорошо, я только что отправил это.   -  person Catfish    schedule 28.11.2016
comment
@Catfish, можете ли вы опубликовать строки импорта для модульного теста. Неясно, используются ли в тесте классы Slf4j или Logback Logger и LoggerFactory. Какие зависимости журналирования используются? Это проект maven? Если да, можете ли вы вставить соответствующую часть файла pom.xml. Также было бы неплохо, если бы вы могли поделиться zip с другими читателями;)   -  person anttix    schedule 28.11.2016
comment
@anttix хорошо, я обновил вопрос ссылкой и разместил свой код на github.   -  person Catfish    schedule 28.11.2016


Ответы (1)


Проблема, по-видимому, заключается в том, что JVM для модульного тестирования завершится до того, как фоновый поток Splunk завершит загрузку журнала.

Адаптер Logback для Splunk использует фоновый поток для пакетной отправки сообщений на сервер. Пакетирование управляется параметрами batch_interval, batch_size_bytes и batch_size_count. Даже если все они установлены на очень низкие уровни, JVM модульного тестирования, скорее всего, завершит работу и уничтожит поток до его завершения.

Попробуйте добавить сон в конец метода тестирования, например.

Thread.sleep(5000);

Также отправка может завершиться сбоем из-за какой-то ошибки. Их можно обнаружить, добавив этот фрагмент кода для обнаружения сбоев отправителя Splunk:

HttpEventCollectorErrorHandler.onError(new HttpEventCollectorErrorHandler.ErrorCallback() {
    public void error(final List<HttpEventCollectorEventInfo> events, final Exception ex) {
        // FIXME: Dumping stack trace to STDERR is not suitable for production use !
        ex.printStackTrace();
    }
});

Обратите внимание, что Похоже, что Splunk HttpEventCollectorSender не устанавливает никаких тайм-аутов HttpClient, поэтому, если конечная точка недоступна, может потребоваться несколько минут для истечения времени ожидания подключения и появления сообщения об ошибке.

РЕДАКТИРОВАТЬ: как оказалось, также была проблема с параметром url в logback.xml . URL-адрес должен быть указан без пути, например. http://mySplunkUrl:8088/ не http://mySplunkUrl:8088/services/collector

person anttix    schedule 28.11.2016
comment
Добавление Thread.sleep(5000) не сработало. Я также добавил этот проект в качестве зависимости от другого проекта и запустил его на своем сервере, но он все еще не отправлял журналы в splunk. - person Catfish; 29.11.2016
comment
Итак, я понял, что мой logback.xml перезаписывается файлом logback.xml зависимости, когда я запускаю свой проект на своем сервере. Я добавил этот фрагмент, чтобы увидеть сбои отправителя splunk, и теперь я получаю эту ошибку {"text":"The requested URL was not found on this server.","code":404}. Хотя я напрямую разместил ссылку на URL-адрес, который у меня есть в моем приложении. - person Catfish; 29.11.2016
comment
Глядя на код HttpEventCollectorSender , кажется, что путь (/services/collector/event/1.0) автоматически добавляется к URL-адресу. Я бы попытался удалить конец URL-адреса в logback.xml, например. http://example.com:8088/services/collector -› http://example.com:8088/ - person anttix; 29.11.2016
comment
Бинго! Это сработало! Можете ли вы указать мне на документацию, где вы обнаружили, что URL-адрес добавлен? - person Catfish; 29.11.2016
comment
Я использовал самую авторитетную доступную документацию :) Исходный код HttpEventCollectorSender, строка 108 - person anttix; 29.11.2016
comment
Теперь, если честно, документация Splunk, на которую ссылается вопрос, действительно указывает URL-адрес в формате %scheme%://%host%:%port%, однако, поскольку он представлен в формате заполнителя, его трудно читать и, следовательно, легко не заметить. - person anttix; 29.11.2016
comment
Спасибо за указание на то, что URL-адрес должен быть указан без пути, например. mySplunkUrl:8088 не mySplunkUrl:8088/services/collector - person Adi; 05.02.2018