Logstash 및 Bluemix 로그 콜렉터
Liberty는 런타임 시 로그 이벤트, 추적 이벤트, FFDC(First Failure Data Capture) 이벤트, 액세스 로그 이벤트, 가비지 콜렉션 이벤트과 같은 다양한 이벤트를 생성합니다. 특히 다수의 서버를 관리하고 있거나 다양한 플랫폼(예: 전용 하드웨어 및 클라우드)에서 서버를 실행 중인 경우 이벤트를 검색하고 필터링하고 분석할 수 있도록 모든 서버의 이벤트를 통합하면 도움이 됩니다. 문제점 판별 데이터에 대한 지속적 파일 스토리지가 부족한 환경에서 Liberty를 사용하는 경우 별도의 서버에 이벤트를 저장하는 것도 도움이 될 수 있습니다.
Liberty는 이벤트를 원격으로 통합하는 데 도움이 되는 Logstash 및 Bluemix 로그 콜렉터 기능을 제공합니다. 콜렉터는 인플라이트 이벤트를 캡처하고, 여러 필드로 구분하고, 이벤트를 구성된 Logstash 또는 Bluemix 로그 콜렉션 서버로 안전하게 전달합니다. 콜렉터는 다음 데이터 유형 중 하나 이상을 전송하도록 구성할 수 있습니다.
- 메시지 로그 이벤트
- 추적 로그 이벤트
- HTTP 액세스 로그 이벤트(Liberty 서버에서)
- FFDC 로그 이벤트
- 가비지 콜렉션 이벤트(IBM JDK에서만 사용 가능)
Logstash 콜렉터
Logstash 콜렉터 기능(logstashCollector-1.0)은 사용자가 제공하는 Logstash 서버에 이벤트를 전송합니다.
Logstash는 Elasticsearch 검색 서버 및 Kibana 대시보드와 함께 사용할 수 있으며 이들은 모두 엔터프라이즈에서 다른 이벤트 또는 로그의 통합 보기를 제공하기 위해 사용자가 제공하고 설정하고 관리합니다. 이벤트를 전달하기 위해 Logstash 콜렉터에 대해 Liberty 서버 컴퓨터에서 별도의 프로세스 또는 에이전트를 설정할 필요가 없습니다.
이벤트 구조
콜렉터는 각각의 이벤트를 필드 이름-값 쌍 세트로 전송합니다. 다양한 유형의 이벤트는 각각 자체 필드 세트를 가지고 있습니다. 고유한 Kibana 대시보드를 작성하는 경우 각 이벤트가 가지고 있는 필드를 알고 있으면 도움이 됩니다.
logstashCollector-1.0 필드 이름 | 필드 설명 |
---|---|
type | 이벤트의 유형을 식별하는 문자열 |
datetime | 이벤트가 발생한 시간 |
hostName | 이벤트의 소스인 서버의 호스트 이름 호스트 이름을 설정하는 규칙에 대한 자세한 정보는 Docker에서 실행하는 Liberty에서 Logstash 및 Bluemix 로그 콜렉터 사용의 내용을 참조하십시오. |
wlpUserDir | 이벤트의 소스인 서버의 사용자 디렉토리(예: D:\wlp\usr) |
serverName | 이벤트의 소스인 서버의 서버 이름 서버 이름을 설정하는 규칙에 대한 자세한 정보는 Docker에서 실행하는 Liberty에서 Logstash 및 Bluemix 로그 콜렉터 사용 참조 |
sequence | 이벤트의 순서 번호(시간소인이 동일한 레코드를 정렬하는 경우 유용함) |
- 메시지 이벤트
표 2. 메시지 이벤트(유형: "liberty_message":) logstashCollector-1.0 필드 이름 필드 설명 severity 심각도 표시기(F = Fatal, E = Error, W = Warning, A = Audit, I = Info, O = SystemOut, R = SystemErr) 보안 표시기(FATAL, ERROR, WARNING, AUDIT, INFO, CONFIG, DETAIL)
messageId 특정 유형의 오류를 찾는 데 사용할 수 있는 로그 행의 메시지 ID(예: SRVE0250I) methodName 로그 레코드의 메소드 이름 className 로그 레코드의 클래스 이름 loggerName 로그 레코드의 로거 이름 threadId 로그 행의 스레드 ID(예: 00000015). 스레드 ID는 숫자가 아니라 문자열입니다. message 메시지 ID로 시작하는 로그 레코드의 메시지 참고: 기본 로그 및 추적 프레임워크뿐만 아니라 2진 로깅이 사용 가능한 경우 Logstash 콜렉터가 메시지 이벤트를 전달합니다.
- 추적 이벤트
표 3. 추적 이벤트(유형: "liberty_trace":) logstashCollector-1.0 필드 이름 필드 설명 severity 심각도 표시기(1 = Fine, 2 = Finer, 3 = Finest, > = Entry, < = Exit) 심각도 표시기(FINE, FINER, FINEST, ENTRY, EXIT) methodName 로그 레코드의 메소드 이름 className 로그 레코드의 클래스 이름 loggerName 로그 레코드의 로거 이름 threadId 로그 행의 스레드 ID(예: 00000015). 스레드 ID는 숫자가 아니라 문자열입니다. 메시지 로그 레코드의 메시지 참고: 기본 로그 및 추적 프레임워크뿐만 아니라 2진 로깅이 사용 가능한 경우 Logstash 콜렉터가 추적 이벤트를 전달합니다.
- HTTP 액세스 로그 이벤트
표 4. HTTP 액세스 로그 이벤트(유형: "liberty_accesslog":) logstashCollector-1.0 필드 이름 필드 설명 uriPath 요청된 URL에 대한 경로 정보. 이 경로 정보는 조회 매개변수를 포함하고 있지 않습니다(예: /pushworksserver/ push/apps/tags). requestMethod HTTP verb(예: GET) remoteHost 원격 호스트 IP 주소(예: 127.0.0.1) userAgent 요청의 userAgent 값 requestProtocol 프로토콜 유형(예: HTTP/1.1) queryString HTTP 요청에서 조회 문자열을 나타내는 문자열(예: color=blue&size=large) bytesReceived URL에서 수신된 바이트(예: 94) responseCode HTTP 응답 코드(예: 200) elapsedTime 요청을 지원하는 데 걸린 시간(밀리초) requestHost 원격 호스트 IP 주소(예: 127.0.0.1) requestPort 요청의 포트 번호 - FFDC 이벤트
표 5. FFDC 이벤트(유형: "liberty_ffdc":) logstashCollector-1.0 필드 이름 필드 설명 className FFDC 항목을 생성한 클래스 exceptionName FFDC 항목에서 보고된 예외 probeID 클래스 내에서 FFDC 지점의 고유 ID stackTrace FFDC 인시던트의 스택 추적 objectDetails FFDC 인시던트에 대한 인시던트 세부사항 threadId FFDC 인시던트의 스레드 ID - 가비지 콜렉션 이벤트
표 6. 가비지 콜렉션 이벤트(유형: "liberty_gc":) logstashCollector-1.0 필드 이름 필드 설명 heap 사용 가능한 힙 총계 usedHeap 사용된 힙의 양 duration 가비지 콜렉션이 실행된 지속 시간(밀리초) gcType 가비지 콜렉션 이벤트의 유형(예: 신생, 글로벌) reason 가비지 콜렉션의 이유
Docker에서 실행하는 Liberty에서 Logstash 및 Bluemix 로그 콜렉터 사용
Docker 컨테이너 또는 기타 가상화된 환경에서 실행 중인 Liberty 서버의 경우 hostName 및 serverName이 다음과 같이 설정됩니다.
- CONTAINER_HOST 환경 변수의 값
- ${defaultHostName} Liberty 구성 변수의 값
- SDK(Software Development Kit)에서 보고하는 정규 호스트 이름
- CONTAINER_NAME 환경 변수의 값
- ${wlp.server.name} Liberty 구성 변수의 값
Bluemix 컨테이너 서비스에서 Liberty 서버를 실행할 때 CONTAINER_HOST 및 CONTAINER_NAME은 이미 사용자에게 적합하도록 설정됩니다.
Liberty Docker 집합체에서 Liberty 서버를 실행할 때 CONTAINER_HOST 및 CONTAINER_NAME은 이미 사용자에게 적합하도록 설정됩니다.
docker run -d -e LICENSE=accept -e CONTAINER_NAME=yourContainerName -e CONTAINER_HOST=yourContainerHost --name=yourContainerName yourImageName