loki logback appender란?
opentelemetry logback appender는 https://opentelemetry.io/docs/zero-code/java/spring-boot-starter/out-of-the-box-instrumentation/ Open Source 재단에서 만들고 제공하는 라이브러리로 중앙 집중형태의 collector 만들때 사용한다고 언급하였다.
오늘 알아볼 loki logback appender 는 여기서 확인 할 수 있다.
https://loki4j.github.io/loki-logback-appender/
Loki4j Logback · Pure Java Logback appender for Grafana Loki
Pure Java Logback appender for Grafana Loki
loki4j.github.io
https://github.com/loki4j/loki-logback-appender
GitHub - loki4j/loki-logback-appender: Fast and lightweight implementation of Logback appender for Grafana Loki
Fast and lightweight implementation of Logback appender for Grafana Loki - loki4j/loki-logback-appender
github.com
공식적으로 Opentelemetry 에서 제공하는기능은 아니며 , 커뮤니티 중심 버전이다. (직역..;)
해당 프로젝트를 사용하게된 계기는 server less 로 서비스 아키텍처를 구성하였을때,
GCP 의 Cloud run , AWS의 fargate 같은 container 기반 서버리스 아키텍처에서 side car를 사용 할 수 없을때 사용할 수 있다.
즉, loki에서 공식적으로 제공하는 promtail (https://grafana.com/docs/loki/latest/send-data/promtail/installation/) 클라언트를 사요할수 없을 경우 다른 대안을 찾기위해 리서치 하게 되었다.
[그림1] - (2)promtail 과 (1)loki log appener 사용 그림

[그림1] 의 (1)직접전송에서 보다 싶이 ServerA 에서 즉시 Loki 서버로 로그를 전송 한다.
gradle
implementation("com.github.loki4j:loki-logback-appender:2.0.0") // loki log 전송
logback.xml 예제
- 참고 ) https://loki4j.github.io/loki-logback-appender/docs/configuration
- version 2.2.0 이상 부터는 logback.xml 문법이 바뀌어 있으니 참고하자
Loki4j Logback · Pure Java Logback appender for Grafana Loki
Pure Java Logback appender for Grafana Loki
loki4j.github.io
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<include resource="org/springframework/boot/logging/logback/defaults.xml"/>
<appender name="LOKI" class="com.github.loki4j.logback.Loki4jAppender">
<http>
<url>http://${LOKI_IP}:3100/loki/api/v1/push</url>
<useProtobufApi>false</useProtobufApi>
<sender class="com.github.loki4j.logback.ApacheHttpSender" />
<requestTimeoutMs>10000</requestTimeoutMs>
</http>
<message>
<pattern>%-5level [%thread] %logger{20} [trace=%X{traceId:-},span=%X{spanId:-}] - %msg%n</pattern>
</message>
<labels>
service_name = ${LOKI_SERVICE:-user-service}
host = ${HOSTNAME:-my-hostname}
level = %level
env = ${LOKI_ENV:-development}
traceId = %X{traceId:-}
spanId = %X{spanId:-}
</labels>
<structuredMetadata>off</structuredMetadata>
<batch>
<maxItems>100</maxItems>
<timeoutMs>1000</timeoutMs>
</batch>
<verbose>true</verbose>
</appender>
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %clr(%-5level) %clr([${spring.application.name:-}]){yellow} %clr([%15.15t]){faint} %clr([%X{traceId:-},%X{spanId:-}]){magenta} %clr(%-40.40logger{39}){cyan} : %msg%n</pattern>
</encoder>
</appender>
<root level="INFO">
<appender-ref ref="LOKI"/>
<appender-ref ref="CONSOLE"/>
</root>
</configuration>
주요 옵션
http
- useProtobufApi : json string이 아니라 buffer 방식이라 속도가 빠르다고 한다.
- 사용하려하면 Class가 없다고 오류가 납니다.
- Beta version을 사용하려면 아래 라이브러리를 추가합니다.
implementation("com.github.loki4j:loki-protobuf:0.0.2_pb4.31.0"
ApacheHttpSender: ApacheHttpSender를 사용한다. 기본 JavaHttpSender 보다 안정적이다.- requestTimeoutMs : 전송에대한 타임아웃 시간
batch
maxItem (1000개)의 로그가 쌓이거나 timeoutMs(60초)가 지나면 Loki로 log를 전송한다
- maxItem : 기본값은 1000이며 데이터 1000개가 쌓이면 로그를 전송한다.
- timeoutMs : 기본값은 60초 이며 60초가 지나면 서버로 로그를 전송한다.
VM Option 변수 추가
- logback.xml 에서 사용중인 env를 사용하기 위해 값을 추가한다.

docker 를 사용하거나 일반 OS에 환경변수로 넣어서 사용 할 수도 있다.
Console 및 Loki 로그 확인
Console에서 발생된로그 ce290221297b9576a603d42b62cc2d11 를 로키에서도 확인 할 수 있다.

'모티터링도구' 카테고리의 다른 글
| opentelemetry logback appender (2) | 2025.09.03 |
|---|---|
| matric / trace micrometer, OTLP 라이브러리 설명 (0) | 2025.09.03 |
| zipkin , jaeger, grafana tempo 특징 (2) | 2025.07.30 |
| Observability & Open Telemetry 전파전략 (2) | 2025.07.30 |
| Observability & Opentelemetry (3) | 2025.07.30 |