리눅스

Tomcat(WAS) 로그 확인

앵무조개껍데기 2024. 9. 23. 10:41

WAS 로그 종류 

    • catalina.out 로그 : 어플리케이션에서 설정한 로그 기록(WAS 기동/중지, DB 쿼리 등)
    • Access 로그 : WAS 서버에 대한 요청 로그, 서버가 클라이언트의 요청에 의해 반환한 HTTP 상태 코드 (200, 4XX, 5XX 등) 등 확인 가능
    • GC 로그 : GC 이벤트가 발생한 로그 기록 확인 가능

 

1) catalina.out 로그


  1. 기동
     
    01-Oct-2021 10:00:00.123 INFO [main]org.apache.catalina.startup.Catalina.start Server startup in [1234]milliseconds
    → 기동 되었을 때 찍히는 로그. 해당 로그가 찍히더라도 비정상으로 서비스가 올라왔을 수 있으니 서비스 확인은 필수

  2. 중지
    01-Oct-2021 10:30:00.456 INFO [main]org.apache.coyote.http11.Http11NioProtocol.pause Pausing ProtocolHandler ["http-nio-8080"]
    01-Oct-2021 10:30:00.789 INFO [main]org.apache.catalina.core.StandardService.stopInternal Stopping service [Catalina]
    01-Oct-2021 10:30:01.000 INFO [main]org.apache.coyote.http11.Http11NioProtocol.destroy Destroying ProtocolHandler ["http-nio-8080"]
    → 중지 되었을 때 찍히는 로그

  3. OutOfMemoryError(OOME)
     
    Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
        at java.base/java.util.Arrays.copyOf(Arrays.java:3745)
        at java.base/java.lang.AbstractStringBuilder.ensureCapacityInternal(AbstractStringBuilder.java:172)
        at java.base/java.lang.AbstractStringBuilder.append(AbstractStringBuilder.java:538)
        at java.base/java.lang.StringBuilder.append(StringBuilder.java:174)
        at com.example.MyApp.processData(MyApp.java:45)
    → OOME가 발생 되었을 때 찍히는 로그
    → 오류가 발생한 코드의 위치와 스택이 로그에 남음
    → 서비스 확인이 우선적으로 필요하며 Heap Memory 조정, 로직 호출 방식 수정 등으로 추후 조치 가능

  4. 기타
    ## 예외 로그
    Exception in thread "main" java.lang.NullPointerException: Cannot invoke "String.length()" because "str" is null
        at com.example.MyApp.processData(MyApp.java:34)
     
    ## 경로 로그
    WARNING: An illegal reflective access operation has occurred
    WARNING: Illegal reflective access by com.example.Internals (file:/path/to/app.jar) to method java.base/jdk.internal.misc.Unsafe.allocateMemory(long)
    WARNING: Please consider reporting this to the maintainers of com.example.Internals
    WARNING: Use --illegal-access=warn to enable warnings of further illegal reflective access operations
    WARNING: All illegal access operations will be denied in a future release
     
    ##보안 로그
    SECURITY ALERT: Unauthorized access attempt detected. User: unknown, IP: 192.168.1.100
    SECURITY: Failed login attempt for username 'admin' from IP 192.168.1.100
    SECURITY: Password change requested for user JohnDoe
    → 로그 레벨에 따라 찍히는 로그가 다름.

 

 

2) Access 로그


## 예시
1.1.1.1 - - [21/May/2024:00:00:40 +0900] "GET / HTTP/1.1" 200 201 0
pattern="%h %l %u %t "%r" %s %b %D"

 

 
  • 1.1.1.1 : 클라이언트의 IP 주소
  • -: 원격 사용자 이름. "-"는 웹 서버가 사용자 이름을 결정하지 못했음을 나타냅니다. 웹 서버가 RFC 1413에 따라 원격 사용자 이름을 확인하도록 설정된 경우에만 사용 가능
  • -: 인증된 사용자 이름."-"는 사용자가 인증되지 않았음을 나타냅니다. 웹 서버가 HTTP 인증을 사용하여 사용자를 인증하도록 설정된 경우에만 사용 가능
  • [21/May/2024:00:00:40 +0900]: 요청이 발생한 시간. 이 형식은 "[day/month/year:hour:minute:second timezone]"
  • "GET / HTTP/1.1": 요청 라인. "GET"은 HTTP 메소드, "/"는 요청된 리소스의 URI, "HTTP/1.1"은 사용된 HTTP 프로토콜의 버전
  • 200: 서버가 클라이언트에게 반환한 HTTP 상태 코드 200은 정상 응답하였음을 의미
  • 201: 서버가 클라이언트에게 보낸 응답의 바이트 크기. 서버는 201바이트의 데이터를 클라이언트에게 보냈으며, HTTP 헤더를 포함하지 않고 본문만 포함
  • 0: 요청 응답 시간(밀리초)

 

3) GC 로그


## GC 예시

2021-10-28T13:23:45.123+0000: [GC (Allocation Failure) [PSYoungGen: 512K->64K(1024K)]512K->72K(2048K), 0.0016754 secs][Times: user=0.00 sys=0.00, real=0.00 secs]
 
  • 2021-10-28T13:23:45.123+0000: 로그가 기록된 시간
  • [GC (Allocation Failure)]: 가비지 컬렉션이 발생한 이유. 여기서는 'Allocation Failure'로, 새로운 객체를 할당하기 위한 공간이 충분하지 않아 GC가 트리거되었음을 의미
  • [PSYoungGen: 512K->64K(1024K)]: Young 영역의 가비지 컬렉션 전후의 메모리 사용량과 총 크기
  • 512K->72K(2048K): 전체 힙 메모리의 사용량이 가비지 컬렉션 전후로 어떻게 변했는지 보여줌. '2048K'는 전체 힙 크기
  • 0.0016754 secs: 가비지 컬렉션을 수행하는 데 걸린 시간(초).
  • [Times: user=0.00 sys=0.00, real=0.00 secs]: 가비지 컬렉션 동안의 CPU 시간 사용량

## Full GC 예시

2021-10-28T13:23:45.123+0000: [Full GC (Metadata GC Threshold) [PSYoungGen: 512K->0K(1024K)][ParOldGen: 1024K->788K(2048K)]1536K->788K(3072K), [Metaspace: 2703K->2697K(1056768K)], 0.0323945 secs][Times: user=0.05 sys=0.00, real=0.03 secs]
 
  • 2021-10-28T13:23:45.123+0000: 로그가 기록된 시간
  • [Full GC (Metadata GC Threshold)]: Full GC가 발생한 이유. 'Metadata GC Threshold'는 메타스페이스가 일정 임계값에 도달하여 Full GC가 트리거되었음을 의미
  • [PSYoungGen: 512K->0K(1024K)]: Young 영역의 가비지 컬렉션 전후의 메모리 사용량과 총 크기
  • [ParOldGen: 1024K->788K(2048K)]: Old 영역의 가비지 컬렉션 전후의 메모리 사용량과 총 크기
  • 1536K->788K(3072K): 전체 힙 메모리의 사용량이 가비지 컬렉션 전후로 어떻게 변했는지 보여줌. '3072K'는 전체 힙 크기
  • [Metaspace: 2703K->2697K(1056768K)]: 메타스페이스의 사용량과 총 크기. 메타스페이스는 클래스 메타데이터를 저장하는 공간으로, PermGen의 대체(Java 1.7은 Perm, Java 1.8 이상은 Metaspace)
  • 0.0323945 secs: 가비지 컬렉션을 수행하는 데 걸린 시간(초)
  • [Times: user=0.05 sys=0.00, real=0.03 secs]: 가비지 컬렉션 동안의 CPU 시간 사용량