여러 서비스에 여러대의 BE 서버를 구성하여 운영중에 있다.
서비스의 로그를 확인하기 위해서 해당 서비스의 BE 서버에 접속하여 로그를 확인해야 하는 매우 큰 불편함이 있어 Kafka 강의를 들으면서 이걸 써먹어야 겠다는 생각이 들어서
Dev BE 서버에 Elastic Stack을 구축을 하면서 격은 오류? 를 정리 하려고 한다.
- Elastic Stack (ELK + Filebeat)
- elastic version 8.5
- kafka
- 2.13-3.3.1
- AWS EC2 3대
- dev1 (Spring Boot)
- dev2 (Spring Boot)
- Elastic Stack + kafka
멀티라인 설정을 않하고 kafka 로 전송시 spring에서 Error가 발생하여 Stack으로 쌓이는 로그나
log.info("{} \n", ...);
\n
이 들어간 로그가 있을 경우 한줄 씩 보내어 의도와 다르게 로그가 수집되는 현상을 격었다.
ex) input2022-11-11 09:14:00,209 [INFO ] com.test.persistence.TestRepositoryImpl.findWorklistCount:709 - StopWatch 'findWorklistCount': running time = 85525494 ns --------------------------------------------- ns % Task name --------------------------------------------- 087253813 100% TestDB
ex) output (elasticSearch에 수집된 로그)
{ "_index": "test-dev-log-2022.11.11", "_version": 1, "_score": 0, "message": "2022-11-11 09:14:00,209 [INFO ] com.test.persistence.TestRepositoryImpl.findWorklistCount:709 - StopWatch 'findWorklistCount': running time = 85525494 ns", // ... }, { "_index": "test-dev-log-2022.11.11", "_version": 1, "_score": 0, "message": "---------------------------------------------", // ... }, { "_index": "test-dev-log-2022.11.11", "_version": 1, "_score": 0, "message": "ns % Task name", // ... }, { "_index": "test-dev-log-2022.11.11", "_version": 1, "_score": 0, "message": "---------------------------------------------", // ... }, { "_index": "test-dev-log-2022.11.11", "_version": 1, "_score": 0, "message": "087253813 100% TestDB", // ... }
이 때 멀티라인 설정을 해주면 이와 같은 문제를 해결할 수 있다.
^b
조합 번호 | multiline.negate | multiline.match | 설명 | Input | Output | 풀이 |
---|---|---|---|---|---|---|
1 | false | after | <공식문서 - papago 번역> 패턴에 일치하는 연속된 줄을 패턴에 일치하지 않는 이전 줄에 추가 | a b b c b b | abb cbb | 패턴 일치 O: bb 패턴 일치 X: a a의 after 즉 a + bb = abb 패턴 일치 O: bb 패턴 일치 X: c c의 after 즉 c + bb = cbb |
2 | false | before | <공식문서> 패턴에 일치하는 연속된 줄을 패턴에 일치하지 않는 다음 줄에 추가 | b b a b b c | bba bbc | 패턴 일치 O: bb 패턴 일치 X: a a의 before 즉 bb + a = bba 패턴 일치 O: bb 패턴 일치 X: c c의 after 즉 bb + c = bbc |
3 | true | after | <공식문서> 패턴에 일치하는 않는 연속된 줄을 패턴에 일치하는 이전 줄에 추가 | b a c b d e | bac bde | 패턴 일치 O: b 패턴 일치 X: ac b의 after 즉 b + ac = bac 패턴 일치 O: b 패턴 일치 X: de b의 after 즉 b + de = bde |
4 | true | before | <공식문서> 패턴에 일치하는 않는 연속된 줄을 패턴에 일치하는 다음 줄에 추가 | a c b d e b | acb deb | 패턴 일치 O: b 패턴 일치 X: ac b의 before 즉 ac + b = acb 패턴 일치 O: b 패턴 일치 X: de b의 before 즉 de + b = deb |
filebeat.yml
filebeat.inputs:
- type: log
enabled: true
paths:
- /home/ec2-user/test/logs/spring-test.log
multiline.pattern: '^\d{4}-\d{2}-\d{2}'
multiline.negate: true
multiline.match: after
output.kafka:
hosts: ["kafka-dev:9092"] # dev server라 replica 1개
topic: "test-dev-logs"
compression: gzip
^\d{4}-\d{2}-\d{2}
로 설정logstash.conf
grok {
match => {
"message" => "%{TIMESTAMP_ISO8601:timestamp} \[%{LOGLEVEL:logLevel}\s?\] %{DATA:method}:%{NUMBER:line} \- %{GREEDYDATA:msg}"
}
add_field => {
"code" => "%{method}:%{line}"
}
}
2022-11-11 09:13:59,228 [INFO ] com.test.service.Service.lambda$subscribe$13:218 - SSE Sinks doOnSubscribe currentSubscriberCount: 38, reactor.core.publisher.FluxFlatMap$FlatMapMain@70a05dae
2022-11-11 09:14:00,209 [INFO ] com.test.persistence.TestRepositoryImpl.findWorklistCount:709 - StopWatch 'findWorklistCount': running time = 85525494 ns
---------------------------------------------
ns % Task name
---------------------------------------------
087253813 100% TestDB
{
"_index": "test-dev-log-2022.11.11",
"_version": 1,
"_score": 0,
"message": "2022-11-11 09:13:59,228 [INFO ] com.test.service.Service.lambda$subscribe$13:218 - SSE Sinks doOnSubscribe currentSubscriberCount: 38, reactor.core.publisher.FluxFlatMap$FlatMapMain@70a05dae",
//...
},
{
"_index": "test-dev-log-2022.11.11",
"_version": 1,
"_score": 0,
"message": "2022-11-11 09:14:00,209 [INFO ] com.test.persistence.TestRepositoryImpl.findWorklistCount:709 - StopWatch 'findWorklistCount': running time = 85525494 ns
---------------------------------------------
ns % Task name
---------------------------------------------
087253813 100% TestDB",
//...
},