Опитвате се да влезете в Splunk с помощта на logback appender

Опитвам се да вляза в splunk директно в моето Java приложение, използвайки logback appender за splunk.

Изглежда, че нищо няма да се splunk, но когато ръчно издам команда post в REST клиент, виждам данните си в splunk.

Не успях да накарам и официалния тест за splunk logback да работи.

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

Пропускам ли нещо очевидно?

РЕДАКТИРАНЕ Ето връзка към моя проект - 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 фоновата нишка да завърши качването на регистрационния файл.

Адаптерът за логбек за 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 адреса, който имам в моя appender.. - 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/услуги/колектор - person Adi; 05.02.2018