2017-01-13 1 views
4

저는 Cron 기반의 스케줄링 전략을 사용하여 여러 GetSplunk 프로세서를 실행하고 있습니다. Cron 표현식은 '0 30 13 * *?'과 같습니다. 처음 실행될 때 모두 성공적으로 쿼리를 실행합니다. 하지만 다음 날에는 Splunk의 401 오류로 오류가 발생합니다. nifi-app.log의 오류는 다음과 같습니다. NiFi의 Cron 스케줄러는 QuartzScheduler입니다.Splunk throwing HTTP 401 Java SDK에서 NiFi로 호출했을 때 승인되지 않은 오류가 발생했습니다.

WARN [Timer-Driven Process Thread-7] o.a.n.c.t.ContinuallyRunProcessorTask Administratively 
Yielding GetSplunk[id=01581009-026c-114b-5e2e-401ebea6427d] due to uncaught Exception: 
com.splunk.HttpException: HTTP 401 -- call not properly authenticated 
2016-12-21 13:30:00,300 WARN [Timer-Driven Process Thread-2] o.a.n.c.t.ContinuallyRunProcessorTask 
com.splunk.HttpException: HTTP 401 -- call not properly authenticated 
at com.splunk.HttpException.create(HttpException.java:84) ~[na:na] 
at com.splunk.HttpService.send(HttpService.java:452) ~[na:na] 
at com.splunk.Service.send(Service.java:1293) ~[na:na] 
at com.splunk.HttpService.get(HttpService.java:165) ~[na:na] 
at com.splunk.Service.export(Service.java:222) ~[na:na] 
at com.splunk.Service.export(Service.java:237) ~[na:na] 
at org.apache.nifi.processors.splunk.GetSplunk.onTrigger(GetSplunk.java:461) ~[na:na] 
at org.apache.nifi.processor.AbstractProcessor.onTrigger(AbstractProcessor.java:27) ~[nifi-api-1.1.0-SNAPSHOT.jar:1.1.0-SNAPSHOT] 
at org.apache.nifi.controller.StandardProcessorNode.onTrigger(StandardProcessorNode.java:1064) ~[nifi-framework-core-1.1.0-SNAPSHOT.jar:1.1.0-SNAPSHOT] 
at org.apache.nifi.controller.tasks.ContinuallyRunProcessorTask.call(ContinuallyRunProcessorTask.java:136) [nifi-framework-core-1.1.0-SNAPSHOT.jar:1.1.0-SNAPSHOT] 
at org.apache.nifi.controller.tasks.ContinuallyRunProcessorTask.call(ContinuallyRunProcessorTask.java:47) [nifi-framework-core-1.1.0-SNAPSHOT.jar:1.1.0-SNAPSHOT] 
at org.apache.nifi.controller.scheduling.QuartzSchedulingAgent$2.run(QuartzSchedulingAgent.java:165) [nifi-framework-core-1.1.0-SNAPSHOT.jar:1.1.0-SNAPSHOT] 
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) [na:1.8.0_101] 
at java.util.concurrent.FutureTask.run(FutureTask.java:266) [na:1.8.0_101] 
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:180) [na:1.8.0_101] 
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293) [na:1.8.0_101] 
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) [na:1.8.0_101] 
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) [na:1.8.0_101] 
at java.lang.Thread.run(Thread.java:745) [na:1.8.0_101]` 

GetSplunk 프로세서는 Splunk 용 Java SDK를 사용합니다. 가장 빠른 시간은 '-24h'이고 가장 늦은 시간은 '지금'입니다. 나는 포트 8089로 splunkd를 치고있다. 몇 가지 조사를 한 후에 이것이 다중 스레드로 인해 문제가 될 수있다. 너 누구도 이걸 부딪 혔어? 감사합니다.

답변

4

몇 분 동안 코드를 살펴 본 후에 이것이 NiFi 프로세서의 문제라고 생각합니다.

public Service login(String username, String password) { 
     this.username = username; 
     this.password = password; 

     Args args = new Args(); 
     args.put("username", username); 
     args.put("password", password); 
     args.put("cookie", "1"); 
     ResponseMessage response = post("/services/auth/login", args); 
     String sessionKey = Xml.parse(response.getContent()) 
      .getElementsByTagName("sessionKey") 
      .item(0) 
      .getTextContent(); 
     this.token = "Splunk " + sessionKey; 
     this.version = this.getInfo().getVersion(); 
     if (versionCompare("4.3") >= 0) 
      this.passwordEndPoint = "storage/passwords"; 

     return this; 
    } 
:

https://github.com/apache/nifi/blob/master/nifi-nar-bundles/nifi-splunk-bundle/nifi-splunk-processors/src/main/java/org/apache/nifi/processors/splunk/GetSplunk.java#L372-L377

이 초기화의 일부로서, 인 Splunk 서비스 이런 로그인 메소드를 호출

프로세서 실행 처음 그것은 게으르게 인 Splunk 서비스 객체를 초기화

이것은 처음 프로세서가 실행될 때만 발생하기 때문에 프로세서를 중지했다가 시작하면 다시 발생합니다. 귀하의 경우 프로세서가 오래 실행되어 세션이 만료되고 프로세서가 계속 실행하려고 시도하고 있습니다. https://issues.apache.org/jira/browse/NIFI-3349

+0

아를해야합니다 :

나는이 문제에 대해이 JIRA를 만들었습니다. 지적하고 문제를 제기 해 주셔서 감사합니다. – MoDrags

관련 문제