2024. 10. 7. 19:33ㆍ모니터링
2024/10/07
※ Loki에 대해 알아보자.
▶ Loki란❓
Loki는 Grafana Labs에서 개발한 로그 집계 시스템으로, Prometheus의 메트릭 수집 방식과 유사하게 로그 데이터를 수집하고 쿼리할 수 있도록 설계됐다. Loki는 주로 로그 데이터를 저장하고, 이를 Grafana를 통해 시각화하는 데 사용된다. Loki의 주요 특징 중 하나는 라벨 기반의 메타데이터를 사용하여 로그를 효율적으로 검색할 수 있다는 점이다.
▶ loki-logback-appender
○ loki-logback-appender는 Logback을 사용하는 Java 애플리케이션에서 로그를 Loki로 직접 전송하기 위한 라이브러리다.
○ 이 라이브러리를 사용하면 별도의 Promtail 설정 없이도 로그를 Loki로 전송할 수 있다.
▶ 스프링 프로젝트 설정
● build.gradle 파일
dependencies {
implementation 'com.github.loki4j:loki-logback-appender:1.5.1' //추가
implementation 'org.springframework.boot:spring-boot-starter-actuator'
implementation 'org.springframework.boot:spring-boot-starter-web'
runtimeOnly 'io.micrometer:micrometer-registry-prometheus'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
testRuntimeOnly 'org.junit.platform:junit-platform-launcher'
}
● SampleController.java
📍 루프 페이지에 접속하면 403에러를 발생하며 로그도 발생시킨다.
import jakarta.servlet.http.HttpServletResponse;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import java.io.IOException;
@RestController
public class SampleController {
private static final Logger logger = LoggerFactory.getLogger(SampleController.class);
@GetMapping("/")
public String hello(HttpServletResponse response) throws IOException {
logger.info("Attempted access to / endpoint resulted in 403 Forbidden");
response.sendError(HttpServletResponse.SC_FORBIDDEN, "Access Denied");
return null;
}
}
● resources/logback.xml 파일을 생성한다.
<configuration>
<appender name="LOKI" class="com.github.loki4j.logback.Loki4jAppender">
<http>
<url>http://localhost:3100/loki/api/v1/push</url>
</http>
<format>
<label>
<pattern>app=my-app,host=${HOSTNAME}</pattern>
</label>
<message class="com.github.loki4j.logback.JsonLayout" />
</format>
</appender>
<root level="DEBUG">
<appender-ref ref="LOKI" />
</root>
</configuration>
▶ Loki (With Docker)
● 폴더를 만들고 loki-config.yml 파일을 만든다.
👉 https://grafana.com/docs/loki/latest/setup/install/docker/ 문서를 참고한다.
auth_enabled: false
server:
http_listen_port: 3100
grpc_listen_port: 9096
common:
instance_addr: 127.0.0.1
path_prefix: /tmp/loki
storage:
filesystem:
chunks_directory: /tmp/loki/chunks
rules_directory: /tmp/loki/rules
replication_factor: 1
ring:
kvstore:
store: inmemory
query_range:
results_cache:
cache:
embedded_cache:
enabled: true
max_size_mb: 100
schema_config:
configs:
- from: 2020-10-24
store: tsdb
object_store: filesystem
schema: v13
index:
prefix: index_
period: 24h
ruler:
alertmanager_url:
# By default, Loki will send anonymous, but uniquely-identifiable usage and configuration
# analytics to Grafana Labs. These statistics are sent to <https://stats.grafana.org/>
#
# Statistics help us better understand how Loki is used, and they show us performance
# levels for most users. This helps us prioritize features and documentation.
# For more information on what's sent, look at
# <https://github.com/grafana/loki/blob/main/pkg/analytics/stats.go>
# Refer to the buildReport method to see what goes into a report.
#
# If you would like to disable reporting, uncomment the following lines:
#analytics:
# reporting_enabled: false
● 도커 컨테이너를 실행한다.
👉 http://localhost:3100/ready에 접속하면 상태를 확인할 수 있다.
docker run --name loki -d -v ${loki-config.yml 이 저장된 폴더}:/mnt/config -p 3100:3100 grafana/loki:3.0.0 -config.file=/mnt/config/loki-config.yml
▶ 그라파나 설정 및 확인
● 사이드 메뉴의 Data sources 페이지에 접속하여 Add new data source 버튼을 클릭하고 Loki를 선택한다.
● 이름을 입력하고 커넥션에 Loki의 주소를 입력한다. Docker를 사용했기 때문에 host.docker.interal을 사용한다. Save & test를 클릭하여 상태를 확인하고 저장한다.
● 웹에서 루트 페이지에 접근하면 403 에러페이지가 발생합니다.
● 그라파나의 사이드 메뉴에서 Explore 페이지에 접근하여 Loki를 선택한다. 쿼리를 컨트롤러의 로그를 볼 수 있도록 수정한다.(이미지 확인) 페이지에 접속하고 Run query를 실행하면 해당 로그가 출력되는것을 확인할 수 있다.
※ 위 이미지들은 스파르타코딩클럽에 저작권이 있으므로 무단 도용 금지 및 상업 목적으로 사용할
'모니터링' 카테고리의 다른 글
시큐어 코딩 - XSS (2) | 2024.10.11 |
---|---|
시큐어 코딩 - CSRF (9) | 2024.10.11 |
시큐어 코딩 - CORS (0) | 2024.10.09 |
모니터링 - Prometheus와 Grafana (0) | 2024.10.04 |
모니터링 시스템 (2) | 2024.10.02 |