[NiFi] NiFi Log

CHAN LIM·2023년 12월 27일
0

NiFi

목록 보기
3/13
post-thumbnail

1. Log?

Log에 관하여


2. NiFi의 Log

NiFi 1.24.0 Version 기준

$ cd {NiFi_ROOT}/logs
  • NiFi의 로그는 해당 디렉터리에서 확인할 수 있다.
    • {NiFi_ROOT}는 NiFi를 설치한 경로이다.
    • 작성자에 경우 /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에서 데이터 이동을 추적하고 관리하는데 사용되는 중요한 부분입니다.

3. NiFi Log 설정

$ cd {NiFi_ROOT}/conf/

$ cat logback.xml
$ vi logback.xml
$ sudo nano logback.xml
  • logback.xml이 NiFi log에 관한 설정 파일이다.

크게 두 부분으로 나뉜다.

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" />
  • 그 중,
    로깅 레벨을 설정하는 부분은 자주 변경할 일이 있으니 기억해두는 것이 좋다.

4. LogMessage Processor

  • NiFi를 포함하여 모든 서비스는 Log를 자동으로 생성한다.
  • 2 ~ 3에서 확인했듯이 현재까지 NiFi를 이용하면서의 기록들이 남아있다.
  • 그러나
    이러한 Log들은 사용자가 원하지 않는 정보까지 모두 모아서 보여주므로 특정 상태의 Log를 원하는 사용자에게 너무 과다하다.
  • 따라서
    지정된 로그 수준에서 로그 메시지를 내보낼 수 있는 Processor가 존재한다.
    • 바로 LogMessage 이다.

4.1 설정값

  • Log Level
    • 메시지를 기록할 때 사용할 로그 레벨
      • [trace, debug, info, warning, error]
  • Log Prefix
    • 로그 줄에 추가된 로그 접두사입니다.
    • 이는 여러 LogMessage 프로세서의 출력을 구별하는 데 도움이 됩니다.
  • Log Message
    • 내보낼 로그 메시지

4.2 Local To Local and Log

다음과 같이 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에도 과부하가 걸린다.

4.3 가독성 높힐 방안...

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만 확인 가능


출처

NiFi 별도 로그 남기기

profile
클라우드, 데이터, DevOps 엔지니어 지향 || 글보단 사진 지향

0개의 댓글