본문 바로가기
Monitoring/Signoz

Signoz 모니터링에 앞서, 사용한 로그 형식

by abstract.jiin 2025. 2. 3.
  • 가독성을 위해 pretty로 정리하였습니다.

logback Logstash encoder 사용


logback Logstash encoder 사용 요청드립니다.

logback 설정 예시 :

<appender name="transaction-file" class="ch.qos.logback.core.rolling.RollingFileAppender">
  <file>${LOG_HOME}/${APPLICATION_NAME}/${HOSTNAME}_${TRANSACTION_LOG_FILE}.log</file>
  <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
    <fileNamePattern>${LOG_HOME}/${APPLICATION_NAME}/${HOSTNAME}_${TRANSACTION_LOG_FILE}.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
    <maxFileSize>2GB</maxFileSize>
    <maxHistory>7</maxHistory>
    <totalSizeCap>2GB</totalSizeCap>
  </rollingPolicy>
  <encoder class="net.logstash.logback.encoder.LogstashEncoder">
    <includeContext>true</includeContext>
    <includeCallerData>true</includeCallerData>
    <timestampPattern>yyyy-MM-dd HH:mm:ss.SSS</timestampPattern>
    </encoder>  
</appender>

<appender name="async" class="net.logstash.logback.appender.LoggingEventAsyncDisruptorAppender">
  <appender-ref ref="transaction-file"/>
</appender>

<!--     로깅 범위 및 레벨 설정   -->
<logger name="trx" level="INFO" additivity="false">   
  <appender-ref ref="async"/>
</logger>

java 구현 예시 :

import lombok.extern.slf4j.Slf4j;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

...
@Slf4j
public class LoggingServiceImpl implements LoggingService {

    private static final Logger trxlogger = LoggerFactory.getLogger("trx");

    ...
        logVo.setAPPLICATION_TYPE("Gateway");
    ...
        trxlogger.info("log", f(logVo));

}

logback Logstash encoder 설정 : timestamp, logger_name 등은 logback Logstash encoder 가 자동으로 넣어줍니다.

logback logstash encoder를 사용해서 전달 주시면 OTEL 에서 자동으로 ServiceName, SpanID, TraceID, slf4j 키-값 쌍 등을 넣어줍니다.

아래 항목은 자동으로 넣어지는 값입니다.

  "@timestamp": "2024-11-22 14:25:00.000",
  "logger_name": "trx", 
  "trace_id": "7d3b8ba6485c23ea02db9ffab4b6eaeb",
  "trace_flags": "01",
  "span_id": "f1236d3a20579213",
  ...

 

 

200 log

{
  "@timestamp": "2024-11-21 02:33:15.938",
  "@version": "1",
  "message": "log",
  "logger_name": "trx",
  "thread_name": "reactor-http-epoll-4",
  "level": "INFO",
  "level_value": 20000,
  "HOSTNAME": "gateway-84899bbf6f-67l45",
  "trace_id": "7d3b8ba6485c23ea02db9ffab4b6eaeb",
  "trace_flags": "01",
  "span_id": "f1236d3a20579213",
  "request_BODY": "test",
  "response_BODY": "test",
  "transaction_MONTH": 11,
  "transaction_DAY": 21,
  "end_DATE": null,
  "api_ID": "test",
  "api_NAME": "test",
  "transaction_TYPE": "HTTP",
  "pre_FLOW_ID": "defaultFlow",
  "post_FLOW_ID": "defaultFlow",
  "status_CODE": 200,
  "error_MESSAGE": null,
  "host_NAME": "gateway-84899bbf6f-67l45",
  "subscription_CODE": null,
  "oauth_TOKEN_ID": null,
  "api_KEY": "",
  "step": "60",
  "request_HEADER": {
    "Content-Type": "application/json",
    "User-Agent": "PostmanRuntime/7.42.0",
    "Accept": "*/*",
    "Postman-Token": "7b6bba49-9096-461d-b215-6b778d05b961",
    "Host": "192.168.3.153:30731",
    "Accept-Encoding": "gzip, deflate, br",
    "Connection": "keep-alive",
    "Content-Length": "4",
    "X-Forwarded-For": "10.0.0.143"
  },
  "response_HEADER": {
    "host": "echo-server:58080",
    "user-agent": "PostmanRuntime/7.42.0",
    "accept": "*/*",
    "postman-token": "7b6bba49-9096-461d-b215-6b778d05b961",
    "accept-encoding": "gzip, deflate, br",
    "traceparent": "00-7d3b8ba6485c23ea02db9ffab4b6eaeb-64ed7e54b53954d7-01",
    "Content-Type": "application/json",
    "Content-Length": "4",
    "Date": "Thu, 21 Nov 2024 02:33:15 GMT"
  },
  "application_TYPE": "Gateway",
  "host": ["192.168.3.153:30731"],
  "url": "/echo/test"
}

 

500 log

 

{
  "@timestamp": "2024-10-30 03:10:57.452",
  "@version": "1",
  "message": "log",
  "logger_name": "trx",
  "thread_name": "reactor-http-epoll-11",
  "level": "INFO",
  "level_value": 20000,
  "HOSTNAME": "gateway-5b94d94dfd-qzns9",
  "trace_id": "0e5486f57a8000aa47e3ef1d97939928",
  "trace_flags": "01",
  "span_id": "66b0b7c2c0c1ba3c",
  "request_BODY": "asdf",
  "response_BODY": {
    "status_code": 500,
    "rsp_code": "Engine-50001",
    "rsp_msg": "시스템장애"
  },
  "transaction_MONTH": 10,
  "transaction_DAY": 30,
  "end_DATE": null,
  "api_ID": "test",
  "api_NAME": "test",
  "transaction_TYPE": "HTTP",
  "pre_FLOW_ID": "sample_flow",
  "post_FLOW_ID": "sample_flow",
  "status_CODE": 500,
  "error_MESSAGE": null,
  "host_NAME": "gateway-5b94d94dfd-qzns9",
  "subscription_CODE": null,
  "oauth_TOKEN_ID": null,
  "api_KEY": "",
  "step": "60",
  "request_HEADER": {
    "Host": "192.168.3.158",
    "User-Agent": "curl/7.81.0",
    "Accept": "*/*",
    "content-type": "text/plain",
    "Content-Length": "4",
    "X-Forwarded-For": "10.42.6.0"
  },
  "response_HEADER": {
    "Content-Type": "application/json;charset=UTF-8",
    "Date": "Wed, 30 Oct 2024 03:10:57 GMT",
    "content-length": "78"
  },
  "application_TYPE": "Gateway",
  "host": ["192.168.3.158"],
  "url": "/echo/test"
}