Loki
grafana Labs 에서 개발한 로깅시스템이다.
Grafana와 연동하여 데이터를 시각화 할 수 있도록 도와주는 중앙 로깅시스템이다.
Grafana
Datasource를 사용하여 여러형태의 UI로 데이터 시각화를 도와주는 서버다.
1. Grafana를 통한 로그 시각화를 제공되며, 로그 수집기인 Promtail을 제공합니다.
2. 로그를 저장할 수 있는 HTTP API를 제공합니다. (http://localhost:3100/loki/api/v1/push)
3. Loki데이터 저장소에서 LogQL을 사용하여 데이터 조회할 수 있다.
데이터 수집 방법
1. application -> promtail -> loki -> Grafana -> users
2. application -> loki -> Grafana -> users

Promtail은 로그를 수집하기 위한 Agent입니다.
• 파일 로그를 Loki로 보낼 때 유용합니다.
• 예: /var/log/ 디렉터리의 파일 로그를 Loki로 전달.
Loki Appender:
• 애플리케이션에서 직접 Loki로 로그를 전송합니다.
• Promtail이 필요 없습니다.
우선 먼저 2번의 방법으로 실행하는 것을 시도해 보았다.

version: "3"
networks:
loki:
services:
loki:
image: grafana/loki:2.9.0
ports:
- "3100:3100"
command: -config.file=/etc/loki/local-config.yaml
networks:
- loki
grafana:
environment:
- GF_PATHS_PROVISIONING=/etc/grafana/provisioning
- GF_AUTH_ANONYMOUS_ENABLED=true
- GF_AUTH_ANONYMOUS_ORG_ROLE=Admin
entrypoint:
- sh
- -euc
- |
mkdir -p /etc/grafana/provisioning/datasources
cat <<EOF > /etc/grafana/provisioning/datasources/ds.yaml
apiVersion: 1
datasources:
- name: Loki
type: loki
access: proxy
orgId: 1
url: http://loki:3100
basicAuth: false
isDefault: true
version: 1
editable: false
EOF
/run.sh
image: grafana/grafana:latest
ports:
- "3000:3000"
networks:
- loki
docker-compose.yaml 파일을 구성하고,
doceker-compose up -d
라는 명령어를 통해서 도커를 실행시켜준다.
<?xml version="1.0" encoding="UTF-8"?>
<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=${name},host=${HOSTNAME},level=%level,service=%X{email:-default-service}</pattern>
<readMarkers>true</readMarkers>
</label>
<message>
<pattern>
{
"level":"%level",
"class":"%logger{36}",
"thread":"%thread",
"message": "%message",
"requestId": "%X{X-Request-ID}",
"email": "%X{email}"
}
</pattern>
</message>
</format>
</appender>
<root level="INFO">
<appender-ref ref="LOKI" />
</root>
</configuration>
아래와 같이 logback.xml을 생성한다.
implementation 'com.github.loki4j:loki-logback-appender:1.4.1'
아래와 같이 loki에 대한 의존성 또한 연결해주면 끝이다.
또한 로그를 수집할 코드만 작성해주면 된다.
@RequestMapping("/users")
public class UserController {
private final UserService userService;
private final Logger logger= LoggerFactory.getLogger(UserController.class);
@PostMapping()
public ResponseEntity createUser(@RequestBody UserRequestDTO userRequestDTO){
MDC.put("requestId", userRequestDTO.getPassword());
MDC.put("email", userRequestDTO.getEmail());
logger.info("This is a test log with MDC");
MDC.clear();
userService.createUser(UserRequestDTO.of(userRequestDTO));
return ResponseEntity.ok().build();
}
}
다음과 같이 로그를 생성하게 되면, loki서버로 로그가 가게된다.
connections 에 들어간 후 loki를 검색하여 아래와 같은 화면을 들어간다.
위와같이 loki의 서버정보를 입력하면 된다.
기본포트는 3100번이다.
그라파나에 접속하여 로키의 서버정보를 등록하고 explore에 들어가면 아래와 같이 뜬다.
loki의 장점은
아래와 같이 query문을 통해서 특정 로그를 탐색하는데 아주 효율적이라는 것이다.
다음 글에서는 1번 방법을 통해서 promail서버에서 -> loki로 보내보는 것을 시도해보겠다.
'Spring > 성능테스트' 카테고리의 다른 글
태태개발일지(Monitering) (0) | 2023.08.07 |
---|---|
태태개발일지(JMeter) (0) | 2023.08.07 |
태태개발일지(성능테스트) (0) | 2023.08.07 |