NiFi 1.24.0 Version 기준
$ cd {NiFi_ROOT}/logs
/opt/nifi/
내용 예시)
User 로그
2023-12-21 08:14:43,667 INFO [NiFi Web Server-25] o.a.n.w.s.NiFiAuthenticationFilter Authentication Started 10.0.2.2 [<anonymous>] GET http://192.168.100.170:29080/nifi-api/flow/current-user 2023-12-21 08:14:43,668 INFO [NiFi Web Server-25] o.a.n.w.s.NiFiAuthenticationFilter Authentication Success [anonymous] 10.0.2.2 GET http://192.168.100.170:29080/nifi-api/flow/current-user 2023-12-21 08:14:43,866 INFO [NiFi Web Server-24] o.a.n.w.s.NiFiAuthenticationFilter Authentication Started 10.0.2.2 [<anonymous>] GET http://192.168.100.170:29080/nifi-api/flow/client-id 2023-12-21 08:14:43,866 INFO [NiFi Web Server-24] o.a.n.w.s.NiFiAuthenticationFilter Authentication Success [anonymous] 10.0.2.2 GET http://192.168.100.170:29080/nifi-api/flow/client-id 2023-12-21 08:14:43,873 INFO [NiFi Web Server-20] o.a.n.w.s.NiFiAuthenticationFilter Authentication Started 10.0.2.2 [<anonymous>] GET http://192.168.100.170:29080/nifi-api/flow/config 2023-12-21 08:14:43,873 INFO [NiFi Web Server-20] o.a.n.w.s.NiFiAuthenticationFilter Authentication Success [anonymous] 10.0.2.2 GET http://192.168.100.170:29080/nifi-api/flow/config 2023-12-21 08:14:43,936 INFO [NiFi Web Server-22] o.a.n.w.s.NiFiAuthenticationFilter Authentication Started 10.0.2.2 [<anonymous>] GET http://192.168.100.170:29080/nifi-api/flow/banners 2023-12-21 08:14:43,936 INFO [NiFi Web Server-22] o.a.n.w.s.NiFiAuthenticationFilter Authentication Success [anonymous] 10.0.2.2 GET http://192.168.100.170:29080/nifi-api/flow/banners
- 웹 서버에 대한 사용자 인증 및 인가 활동을 기록한 것이다.
- 시간: 2023년 12월 21일 08시 14분 43초 667밀리초
- 로그 레벨: INFO
- 스레드: NiFi Web Server-25
- 클래스 및 필터: org.apache.nifi.web.security.NiFiAuthenticationFilter
- 인증 시작: 특정 요청에 대한 인증이 시작되었습니다.
- IP 주소: 10.0.2.2
- 사용자: [익명 사용자]
- HTTP 메서드 및 URL: GET http://192.168.100.170:29080/nifi-api/flow/current-user
App 로그
2023-12-22 13:55:49,494 INFO [Cleanup Archive for default] o.a.n.c.repository.FileSystemRepository Successfully deleted 0 files (0 bytes) from archive 2023-12-22 13:55:49,494 INFO [Cleanup Archive for default] o.a.n.c.repository.FileSystemRepository Archive cleanup completed for container default; will now allow writing to this container. Bytes used = 24> 2023-12-22 13:55:56,434 INFO [pool-7-thread-1] o.a.n.c.r.WriteAheadFlowFileRepository Initiating checkpoint of FlowFile Repository 2023-12-22 13:57:36,437 INFO [pool-7-thread-1] o.a.n.c.r.WriteAheadFlowFileRepository Successfully checkpointed FlowFile Repository with 0 records in 0 milliseconds ~~~
- NiFi에서의 FlowFile Repository의 체크포인트 작업과 관련된 정보를 나타낸다.
- 시간: 2023년 12월 22일 13시 55분 56초 434밀리초
- 로그 레벨: INFO
- 스레드: pool-7-thread-1
- 클래스: org.apache.nifi.controller.repository.WriteAheadFlowFileRepository
- 메시지: FlowFile Repository의 체크포인트가 시작되었습니다.
- 결론적으로 NiFi에서 데이터 이동을 추적하고 관리하는데 사용되는 중요한 부분입니다.
$ cd {NiFi_ROOT}/conf/
$ cat logback.xml
$ vi logback.xml
$ sudo nano logback.xml
크게 두 부분으로 나뉜다.
Logger(로거)를 생성하는 부분
<appender name="APP_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>${org.apache.nifi.bootstrap.config.log.dir}/nifi-app.log</file> <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"> <!-- For daily rollover, use 'app_%d.log'. For hourly rollover, use 'app_%d{yyyy-MM-dd_HH}.log'. To GZIP rolled files, replace '.log' with '.log.gz'. To ZIP rolled files, replace '.log' with '.log.zip'. --> <fileNamePattern>${org.apache.nifi.bootstrap.config.log.dir}/nifi-app_%d{yyyy-MM-dd_HH}.%i.log</fileNamePattern> <maxFileSize>100MB</maxFileSize> <!-- keep 30 log files worth of history --> <maxHistory>30</maxHistory> </rollingPolicy> <immediateFlush>true</immediateFlush> <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"> <pattern>%date %level [%thread] %logger{40} %msg%n</pattern> </encoder> </appender>
Logger(로거)의 로깅 레벨을 설정하는 부분
<logger name="org.apache.nifi" level="INFO"/> <logger name="org.apache.nifi.processors" level="WARN"/> <logger name="org.apache.nifi.processors.standard.LogAttribute" level="INFO"/> <logger name="org.apache.nifi.processors.standard.LogMessage" level="INFO"/> <logger name="org.apache.nifi.controller.repository.StandardProcessSession" level="WARN" /> <logger name="org.apache.parquet.hadoop.InternalParquetRecordReader" level="WARN" /> <logger name="org.apache.zookeeper.ClientCnxn" level="ERROR" /> <logger name="org.apache.zookeeper.server.NIOServerCnxn" level="ERROR" /> <logger name="org.apache.zookeeper.server.NIOServerCnxnFactory" level="ERROR" /> <logger name="org.apache.zookeeper.server.NettyServerCnxnFactory" level="ERROR" /> <logger name="org.apache.zookeeper.server.quorum" level="ERROR" /> <logger name="org.apache.zookeeper.ZooKeeper" level="ERROR" /> <logger name="org.apache.zookeeper.server.PrepRequestProcessor" level="ERROR" /> <logger name="org.apache.nifi.controller.reporting.LogComponentStatuses" level="ERROR" />
- 그 중,
로깅 레벨
을 설정하는 부분은 자주 변경할 일이 있으니 기억해두는 것이 좋다.
- NiFi를 포함하여 모든 서비스는 Log를 자동으로 생성한다.
- 2 ~ 3에서 확인했듯이 현재까지 NiFi를 이용하면서의 기록들이 남아있다.
- 그러나
이러한 Log들은 사용자가 원하지 않는 정보까지 모두 모아서 보여주므로 특정 상태의 Log를 원하는 사용자에게 너무 과다하다.
- 따라서
지정된 로그 수준에서 로그 메시지를 내보낼 수 있는 Processor가 존재한다.
- 바로 LogMessage 이다.
- Log Level
- 메시지를 기록할 때 사용할 로그 레벨
[trace, debug, info, warning, error]
- Log Prefix
- 로그 줄에 추가된 로그 접두사입니다.
- 이는 여러 LogMessage 프로세서의 출력을 구별하는 데 도움이 됩니다.
- Log Message
- 내보낼 로그 메시지
다음과 같이 Flow Test 준비 및 시도
- 오전 10시 15 ~ 16분에 시도
로그
~~~~~ 2023-12-27 10:15:41,204 INFO [Flow Service Tasks Thread-2] o.a.nifi.controller.StandardFlowService Saved flow controller org.apache.nifi.controller.FlowController@3b11a8f3 // Another save pending = false 2023-12-27 10:15:41,236 INFO [Timer-Driven Process Thread-6] o.a.nifi.processors.standard.LogMessage LogMessage[id=a8cecebe-018c-1000-d587-67964b8d0cba] [************ChanLogTest************]ChanChanChanCha> 2023-12-27 10:15:49,417 INFO [pool-7-thread-1] o.a.n.c.r.WriteAheadFlowFileRepository Initiating checkpoint of FlowFile Repository 2023-12-27 10:15:49,424 INFO [pool-7-thread-1] o.a.n.wali.SequentialAccessWriteAheadLog Checkpointed Write-Ahead Log with 0 Records and 0 Swap Files in 6 milliseconds (Stop-the-world time = 4 milliseconds)> ~~~
$ cat {NiFi_ROOT}/logs/nifi-app.log
- 로그가 생성됨을 확인할 수 있었다.
- 다만,
LogMessage Processor
가 생성한 로그를 파악하기 매우 어렵다.
- nifi-app.log에만 로그가 쌓여
가끔씩 에러로그와 뒤섞여 가독성이 떨어지고 tail & split에도 과부하가 걸린다.
NiFi의 Log 설정을 수정하여
LogMessage가 생성한 Log만 따로 저장해보기
$ vi {nifi_root}/conf/logback.xml
$ sudo nano {nifi_root}/conf/logback.xml
<appender name="LogMessage_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${org.apache.nifi.bootstrap.config.log.dir}/nifi-LogMessage_FILE.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<fileNamePattern>${org.apache.nifi.bootstrap.config.log.dir}/nifi-LogMessage_%d{yyyy-MM-dd_HH}.%i.log</fileNamePattern>
<maxFileSize>100MB</maxFileSize>
<!-- keep 30 log files worth of history -->
<maxHistory>30</maxHistory>
</rollingPolicy>
<immediateFlush>true</immediateFlush>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>%date %level [%thread] %logger{40} %msg%n</pattern>
</encoder>
</appender>
LogMessage에서 생성한 로그만 모아 둘 로거 생성
<logger name="org.apache.nifi/processors.standard.LogMessage" level="INFO" additivity="false">
<appender-ref ref="LogMessage_FILE" />
</logger>
<!-- this above three lines added by Chan, since'23.12.27. -->
추가한 로거의 로그레벨 설정
이후 NiFi 재부팅하여 설정을 적용한다.
4.2 과정 재시작하면,
2023-12-27 10:47:59,494 INFO [Timer-Driven Process Thread-2] o.a.nifi.processors.standard.LogMessage LogMessage[id=a8cecebe-018c-1000-d587-67964b8d0cba] [************ChanLogTest************]ChanChanChanChanChanChanChanChanChanChan
LogMessage에서 생성한 log 확인
해당 파일에서 LogMessage Processor가 생성한 Log만 확인 가능