WEB 로그 종류

    • Access 로그 : WEB 서버에 대한 요청 로그, HTTP 상태 코드 (200, 4XX, 5XX 등) 등 확인 가능
    • Error 로그 : WEB 서버에서 발생한 모든 중요한 로그 (서버 구성 오류, 클라이언트 요청 오류, 내부 서버 오류 등)

1) Access 로그

## 예시
1.2.3.4 - - [21/May/2024:09:01:34 +0900] "GET /favicon.ico HTTP/1.1" 404 268
LogFormat "%h %l %u %t \"%r\" %>s %b"

 

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

추가 설정

  • %{X-Forwarded-For}i: 클라이언트의 원래 IP 주소를 로그에 기록. 바로 앞 단의 IP 뿐만 아니라 최초의 클라이언트 IP부터 로그에 남길 수 있는 설정
  • %D: 요청 응답 시간(마이크로초)

2) Error 로그

  1. 기동
    [Fri Sep 10 10:41:21.495400 2021][mpm_prefork:notice][pid 1234]AH00163: Apache/2.4.41 (Unix) configured -- resuming normal operations
    [Fri Sep 10 10:41:21.495472 2021][core:notice][pid 1234]AH00094: Command line: '/usr/sbin/httpd'
    → 기동 되었을 때 찍히는 로그

  2. 중지
    [Fri Sep 10 11:41:21.495400 2021][mpm_prefork:notice][pid 1234]AH00169: caught SIGTERM, shutting down
    → 중지 되었을 때 찍히는 로그

  3. WAS 연결 실패
    [Fri Sep 10 12:41:21.495400 2021][proxy:error][pid 1234](111)Connection refused: AH00957: HTTP: attempt to connect to 127.0.0.1:8080 (localhost) failed
    [Fri Sep 10 12:41:21.495400 2021][proxy_http:error][pid 1234][client 192.168.1.1:56247]AH01114: HTTP: failed to make connection to backend: localhost
    → 백엔드에 연결된 WAS 상태 점검 필요

 

 

 

'리눅스' 카테고리의 다른 글

JVM 대표 옵션  (0) 2024.09.23
OOME 종류  (0) 2024.09.23
Tomcat 로그 종류  (0) 2024.09.23
Tomcat(WAS) 로그 확인  (0) 2024.09.23
Tomcat 주요 설정 파일 구성  (0) 2024.09.23

WAS 인스턴스 기동시 실행환경 설정(JVM Memoery, GC)와 애플리케이션에 필요한 JAVA 옵션 등을 관리할 수 있습니다.,


 

항목 설명 예시
JVM
Memory
Options -
Memory


 
WAS가 VM 에서 메모리를 얼마나 쓸지 지정하는 HeapSize로 일반적으로 2~4G 설정
운영 서버 기준 80% 이하로 CPU/MEM 사용률 유지
(주의) 현재 힙이 1기가인데  최대 메모리 사용량이 2기가니까 heap도 2기가로 늘려야지 => X
perm이나 thread  여러 요소가 있어서 실제 사용량은 2G 보다 많을  있으므로 고려
또한 HeapSize 의 크기가 지나치게 크면 분석이 어렵고, GC도 효율적으로 동작하기 어려움으로
application 의 성능에 영향을 끼치니 적절한 설정 필요
-Xms2048m -Xmx2048m
Meta(Perm) 영역의 크기와 GC 알고리즘 방식을 설정하는 부분
metaspace 128 두고 max metaspace 256으로 하면 max로 늘어날 때가 오히려 부하를 일으킬 수 있어 min=max 설정하기도 함
마찬가지로 지나치게 크게 설정하면 불필요하게 메모리를 더 많이 사용하고, gc에 시간이 걸리기 때문에 좋지 않음
-XX:MaxMetaspaceSize=256m
JVM
Memory
Options -
GC:
GC 설정 
위 예시에서는 병렬 gc를 사용해서 JVM이 GC를 완료하기 위해 필요한 시간을 줄이고 있고, NEW 영역과 OLD 영역에 각각 설정. (다양한 방법이 있음. G1GC, ZGC...) -verbose:gc -Xloggc:${LOG_HOME}/gclog/${SERVICE_NAME}-${DATE}.log
-XX:+UseParallelGC
-XX:+UseParallelOldGC
-XX:-UseAdaptiveSizePolicy
-XX:+PrintGCDetails
-XX:+PrintGCDateStamps
-XX:+ExplicitGCInvokesConcurrent
JVM
Memory
Options -
HeapDump
OOM (OutOfMemory) 가 발생했을 때, 어떤 동작을 하고 어디에 로그를 남길지 JVM 옵션으로 지정
실제 OOM 이 발생한다고 바로 재기동을 진행하지는 않고, 서비스가 정상적인지 확인하고 Thread Dump 등을 생성해두면 추후 분석에 활용 할 수 있음 (HeapDump 생성은 이미 이슈가 있던 서버에 또 다른 부하를 유발하게 됨)
실제 서비스에서는 OOM 발생 이후에도 특이사항이 없어서 재기동을 진행하지 않고 운영하는 경우도 있기도 함.
-XX:+HeapDumpOnOutOfMemoryError
-XX:HeapDumpPath=${LOG_HOME}%\hdump
-XX:OnOutOfMemoryError=${LOG_HOME}%\bin\oom.sh
Business
System
Java
Options -
APM
APM 모니터링 설정  
Business
System
CLASSPATH -
DataSource
DB Driver 정보
ex. MariaDB
CLASSPATH="${CLASSPATH}${CATALINA_HOME}/lib/datasource/mariadb-java-client-1.3.6.jar"
export CLASSPATH
LIBRARY_
PATH
LIBRARY_PATH 정보 LD_LIBRARY_PATH=${CATALINA_HOME}/lib
expert LD_LIBRARY_PATH

'리눅스' 카테고리의 다른 글

WEB 로그 종류  (0) 2024.09.23
OOME 종류  (0) 2024.09.23
Tomcat 로그 종류  (0) 2024.09.23
Tomcat(WAS) 로그 확인  (0) 2024.09.23
Tomcat 주요 설정 파일 구성  (0) 2024.09.23
로그 파일 형식로그 정보로깅 설정 / 로그 경로 변경

 

로그 파일 형식 로그 정보 로길 설정 / 로그 경로 변경
catalina.out 리눅스에서 톰캣을 실행할 때 console 출력을 기록한다.
standard output, standard error에 기록된 모든 내용
${catalina.base}/bin/catalina.sh
 
${catalina.base}/conf/logging.properties
 
catalina.YYYY-MM-DD.log 톰캣에서 생기는 로그만을 기록한다.
서버의 기동, 정지, 서비스의 개시, 정지 정보
${catalina.base}/conf/logging.properties
 

host-manager.YYYY-MM-DD.log Tomcat Host Manager Web app 로그 (가상호스트매니저)
${catalina.base}/conf/logging.properties
 
manager.YYYY-MM-DD.log Tomcat Manager Web App 로그 (웹콘솔)
${catalina.base}/conf/logging.properties
 
localhost.YYYY-MM-DD.log host( VirtualHost 같은) 한정한 로그
${catalina.base}/conf/logging.properties
 
localhost_access_log.YYYY-MM-DD.txt 톰캣에 액세스한 기록한다.
어느 host에서 언제, 어떤 방식으로 요청했는지 기록


${catalina.base}/conf/server.xml
 

 

logging.properties 

  • level 은 다음과 같이 ALL, FINEST, FINER, FINE, CONFIG, INFO, WARNING, SEVERE를 지원하며 오른쪽으로 갈수록 로그량이 적다.
  • 기본 값이 FINE

 

Tomcat 로그 설정

  FileHandler 비활성화 FileHandler 활성화
ConsoleHandler 비활성화 로그 메시지가 콘솔에 출력되지 않기 때문에
로그 메시지는 catalina.out에 기록되지 않음
FileHandler 핸들러가 로그 파일(catalina.log)에 로그를 기록하도록 설정되어 있으면
로그 메시지는 해당 로그는 (catalina.log) 파일에 기록됨
ConsoleHandler 활성화

로그 메시지가 콘솔에 출력되고
이 출력은 catalina.out에 기록됨
FileHandler 핸들러가 로그 파일(catalina.log)에 로그를 기록하도록 설정되어 있으면
로그 메시지는 해당 로그는 (catalina.log) 파일에 기록됨

단, 시스템의 콘솔 출력을 catalina.out 파일로 리디렉션 되도록 설정되어 있어야 함 (catalina.sh 또는 startup.sh 설정)

'리눅스' 카테고리의 다른 글

JVM 대표 옵션  (0) 2024.09.23
OOME 종류  (0) 2024.09.23
Tomcat(WAS) 로그 확인  (0) 2024.09.23
Tomcat 주요 설정 파일 구성  (0) 2024.09.23
WEB, WAS 연동  (0) 2024.05.29

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 시간 사용량

'리눅스' 카테고리의 다른 글

OOME 종류  (0) 2024.09.23
Tomcat 로그 종류  (0) 2024.09.23
Tomcat 주요 설정 파일 구성  (0) 2024.09.23
WEB, WAS 연동  (0) 2024.05.29
모니터링 쉘 스크립트 만들기(15)  (0) 2024.05.29

LOG

ELK Stack을 이용해서 Log를 관리하는 방식을 많이 쓰려고 한다.

EX) Elasticsearch, Logstash, Kibana, Beats

 

[ Elasticsearch ]

- Java로 개발된 오픈 소스 검색 엔진 ( ElasticsearchELK Stack의 핵심 구성 요소 )

- HTTP 대시보드 웹 인터페이스( Kibana )와 함께 분산되어 있는 다중 테넌트(분산 저장)에 저장된 전체 텍스트 검색 엔진을 제공

- JSON 문서 체계를 사용하여 데이터 요청, 검색, 저장을 수행하고, 로그 파일뿐만 아니라 각종 다양한 형태의 텍스트를 검색하는 데 사용된다.

 

[ Logstash ]

- 이벤트 및 로그 관리를 위한 오픈 소스 도구

- 데이터 수집을 위한 실시간 감시기능을 제공

- Logstash는 로그 데이터를 수집하고 데이터를 JSON 문서로 변환 후 Elasticsearch에 저장하는 역할을 수행

 

[ Kibana ]

- Elasticsearch를 위한 오픈 소스 데이터 시각화 도구

- Kibana는 직관적이고, 깔끔한 형태의 대시 보드 웹 인터페이스를 제공

- Elasticsearch에서 데이터를 관리하고, Kibana에서 데이터를 시각화

 

[ Beats ]

- BeatsClient에 설치하여 Client에서 발생하는 대량의 데이터를 Logstash & Elasticsearch 서버로 보낼 수 있는 경량 에이전트 데이터 전송 서비스

- Log File 전송에 사용되는 "Filebeat"외의 다양한 Beat를 제공 ( "Metricbeat", "Packetbeat", "Winlogbeat" )

- Beats 목록 및 다운로드 링크 : https://www.elastic.co/kr/downloads/beats

'리눅스' 카테고리의 다른 글

Shell Script  (0) 2022.11.03
PAM 인증  (0) 2022.11.02
NFS 실습  (0) 2022.11.01
NFS (Network File System)  (0) 2022.11.01
FTP  (0) 2022.10.31

+ Recent posts