ํ”„๋กœํ•„

YuSoeun

๐Ÿข ๋น ๋ฅธ ๊ฑฐ๋ถ์ด๊ฐ€ ๋˜์ž. ๋“œ๋ฌธ๋“œ๋ฌธ ๊พธ์ค€ํžˆ๊ฐ€ ์•„๋‹Œ ์ด˜์ด˜ํžˆ ๊พธ์ค€ํ•˜๊ฒŒ!

"ํ…Œ์ŠคํŠธ ๋กœ๊ทธ๋Š” ์–ด๋””์„œ ๊ตฌํ•˜์ง€..?"

 

 

AI ์žฅ์•  ๋ถ„์„ ๋„๊ตฌ๋ฅผ ๋งŒ๋“ค๋‹ค๊ฐ€ ์ œ์ผ ๋จผ์ € ๋ง‰ํžŒ ๊ฒŒ ์ด๊ฑฐ์˜€๋‹ค.

์‹ค์ œ ์šด์˜ ๋กœ๊ทธ๋Š” ๋‹น์—ฐํžˆ ๋ชป ์“ฐ๊ณ , ์†์œผ๋กœ ๋งŒ๋“ค์ž๋‹ˆ ํŒจํ„ด์ด ๋„ˆ๋ฌด ๋‹จ์กฐ๋กœ์›Œ์„œ AI๊ฐ€ ์ œ๋Œ€๋กœ ํ•™์Šต์ด ์•ˆ ๋œ๋‹ค.

 

loghub๊ฐ™์€ ์œ ์ตํ•œ ์‚ฌ์ดํŠธ๋„ ์žˆ์ง€๋งŒ, ๋‚ด๊ฐ€ ์›ํ–ˆ๋˜ ์ œ๋‹ˆํผ ๋กœ๊ทธ๋‚˜ KB ์Šคํƒ€์ผ์˜ ๋กœ๊ทธ๊ฐ€ ์•„๋‹ˆ์—ˆ๊ธฐ ๋•Œ๋ฌธ์—
ํ•™์Šต์šฉ ๋กœ๊ทธ๋ฅผ ๊ณ„์†ํ•ด์„œ ์ƒ์„ฑํ•  ๋กœ๊ทธ ์ƒ์„ฑ๊ธฐ๊ฐ€ ํ•„์š”ํ–ˆ๋‹ค.

https://github.com/logpai/loghub

 

GitHub - logpai/loghub: A large collection of system log datasets for AI-driven log analytics [ISSRE'23]

A large collection of system log datasets for AI-driven log analytics [ISSRE'23] - logpai/loghub

github.com

 

๊ฒฐ๊ณผ์ ์œผ๋กœ 1์ดˆ์— N๊ฑด์”ฉ 4์ข…๋ฅ˜์˜ ๊ธˆ์œต ๋กœ๊ทธ๋ฅผ ์‹ค์‹œ๊ฐ„์œผ๋กœ ์˜๊ณ ,

Loki·Prometheus·Grafana๋กœ ๋ชจ๋‹ˆํ„ฐ๋งํ•˜๋Š” ์Šคํƒ๊นŒ์ง€ ๊ตฌ์ถ•ํ–ˆ๋‹ค.

 


1. ๋‘ ์ €์žฅ์†Œ๊ฐ€ ์ด๋ฃจ๋Š” ํŒŒ์ดํ”„๋ผ์ธ

ํ”„๋กœ์ ํŠธ๋Š” ๋‘ ๋ ˆํฌ์ง€ํ† ๋ฆฌ๊ฐ€ ์—ฐ๊ฒฐ๋œ ๊ตฌ์กฐ๋‹ค.

log-autogenerator                  incident-autopsy
โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€           โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
์‹œ๋‚˜๋ฆฌ์˜ค๋ณ„ ๋กœ๊ทธ ์ƒ์„ฑ (4์ข…)            →→→   output/ ํด๋” ์ง์ ‘ ์ฝ๊ธฐ
                                    →→→   incident API (REST)
                                    →→→   Loki (GUID ๊ธฐ๋ฐ˜ ์กฐํšŒ)
                                                ↓
                                       AI ๋ถ„์„ → ๋ณด๊ณ ์„œ ์ƒ์„ฑ

log-autogenerator๊ฐ€ ์‹ค์ œ ๊ธˆ์œต ์‹œ์Šคํ…œ์ฒ˜๋Ÿผ ๋™์ž‘ํ•˜๋Š” ๋กœ๊ทธ๋ฅผ ๋งŒ๋“ค๊ณ , incident-autopsy๊ฐ€ ๊ฐ€์ ธ๋‹ค๊ฐ€ ๋ถ„์„ํ•œ๋‹ค.

Loki·Prometheus·Grafana๋Š” ๊ทธ ํ๋ฆ„์„ ์‹ค์‹œ๊ฐ„์œผ๋กœ ๋ณด์—ฌ์ฃผ๋Š” ๋ชจ๋‹ˆํ„ฐ๋ง ์Šคํƒ์ด๋‹ค.

 


2. ํ•ต์‹ฌ ์„ค๊ณ„ - GUID ๊ณต์œ 

์‹ค์ œ ๊ธˆ์œต ์‹œ์Šคํ…œ์—์„œ ํŠธ๋žœ์žญ์…˜ ํ•˜๋‚˜๋Š” ์—ฌ๋Ÿฌ ์‹œ์Šคํ…œ์— ๋™์‹œ์— ํ”์ ์„ ๋‚จ๊ธด๋‹ค.

์ด๊ฑธ ์žฌํ˜„ํ•˜์ง€ ์•Š์œผ๋ฉด AI๊ฐ€ "๋ฉ€ํ‹ฐ์†Œ์Šค ๋กœ๊ทธ์—์„œ ๊ฐ™์€ ์žฅ์• ๋ฅผ ์ฐพ๋Š”" ์—ฐ์Šต์„ ํ•  ์ˆ˜ ์—†๋‹ค.

 

์‹ค์ œ ์ƒ˜ํ”Œ ๋ฐ์ดํ„ฐ๋ฅผ ๋œฏ์–ด๋ณด๋‹ˆ ํ•ต์‹ฌ ํžŒํŠธ๊ฐ€ ์žˆ์—ˆ๋‹ค. Jennifer APM ๋กœ๊ทธ์™€ KB Framework ์•ฑ๋กœ๊ทธ๊ฐ€ ๋™์ผํ•œ 33์ž GUID๋ฅผ ๊ณต์œ ํ•˜๊ณ  ์žˆ์—ˆ๋‹ค.

Jennifer APM:  GUID : AA0VW3YT2GJAGZ1Y8KXPQMNE7RFTU0C
Framework ์•ฑ:  [AA0VW3YT2GJAGZ1Y8KXPQMNE7RFTU0C][E][AbsSqlHandler] SQLException

 

 

์ƒ์„ฑํ•˜๋Š” ์†Œ์Šค๋Š” 4์ข…์ด๋‹ค.

์†Œ์Šค ์ƒ๊ด€ ID
Jennifer APM Transaction GUID 33์ž (AA0...)
KB Framework ์•ฑ๋กœ๊ทธ GUID 33์ž (Jennifer์™€ ๋™์ผ)
Spring Boot REST + Hibernate UUID v4 (๋ณ„๋„)
Spring Boot Log4j TXN-NNNNNNN (๋ณ„๋„)

์•ž์˜ ๋‘ ์†Œ์Šค๊ฐ€ ๊ฐ™์€ GUID๋ฅผ ์“ฐ๊ธฐ ๋•Œ๋ฌธ์—, incident-autopsy๊ฐ€ GUID ํ•˜๋‚˜๋งŒ ์•Œ๋ฉด ์—ฐ๊ด€๋œ ๋กœ๊ทธ ์ „๋ถ€๋ฅผ ์ฐพ์•„๋‚ผ ์ˆ˜ ์žˆ๋‹ค.

 


3. ์‹œ๋‚˜๋ฆฌ์˜ค ์„ค๊ณ„

์žฅ์•  ํŒจํ„ด์„ ๊ทธ๋ƒฅ ๋žœ๋ค์œผ๋กœ ๋งŒ๋“ค๋ฉด ์˜๋ฏธ๊ฐ€ ์—†๋‹ค.

๊ทธ๋ž˜์„œ ์‹ค์ œ ๊ธˆ์œต ์‹œ์Šคํ…œ์—์„œ ์ž์ฃผ ๋‚˜์˜ค๋Š” ํŒจํ„ด 4์ข…์„ ์ •์˜ํ–ˆ๋‹ค.

์‹œ๋‚˜๋ฆฌ์˜ค ์ƒํ™ฉ ์‘๋‹ต ์‹œ๊ฐ„
sql_exception SQL ์ปฌ๋Ÿผ ์‚ฌ์ด์ฆˆ ์ดˆ๊ณผ / ์ œ์•ฝ ์œ„๋ฐ˜ 900~1500ms
payment_timeout ๊ฒฐ์ œ ๊ฒŒ์ดํŠธ์›จ์ด ์‘๋‹ต ์—†์Œ 3000~10050ms
null_pointer ์‚ฌ์šฉ์ž ํ”„๋กœํ•„ LEFT JOIN ๊ฒฐ๊ณผ ์—†์Œ → NPE 200~500ms
normal ์ •์ƒ ์™„๋ฃŒ 3์ข… 50~400ms

์—๋Ÿฌ ํƒ€์ž…๋งˆ๋‹ค ์ŠคํƒํŠธ๋ ˆ์ด์Šค ๋‚ด์šฉ์ด ๋‹ค๋ฅด๋‹ค.

 

sql_exception์ด๋ฉด ORA-01401, DataIntegrityViolationException์ด ๋‚˜์˜ค๊ณ ,

null_pointer๋ฉด NullPointerException์ด ๋‚˜์˜จ๋‹ค. ๊ฐ™์€ ํŒจํ„ด๋งŒ ๋ฐ˜๋ณตํ•˜๋ฉด AI๊ฐ€ ์™ธ์›Œ๋ฒ„๋ฆฌ๊ธฐ ๋•Œ๋ฌธ์— ๋‹ค์–‘์„ฑ์ด ์ค‘์š”ํ–ˆ๋‹ค.

 

 

์—ฐ์† ๋ชจ๋“œ๋กœ ์‹คํ–‰ํ•˜๋ฉด ํ•œ๊ตญ ๊ธˆ์œต๊ถŒ ๊ธฐ์ค€ ์‹œ๊ฐ„๋Œ€๋ณ„ ํ”ผํฌ ํŒจํ„ด๋„ ์ ์šฉ๋œ๋‹ค.

python generator.py --continuous --rate 2 --error-rate 0.05 --peak-pattern

์˜ค์ „ 10์‹œ, ์˜คํ›„ 15์‹œ์— ํŠธ๋ž˜ํ”ฝ์ด ์ตœ๋Œ€ 2๋ฐฐ๊นŒ์ง€ ์˜ฌ๋ผ๊ฐ€๋Š” ์‚ฌ์ธํŒŒ ๋ชจ๋ธ์ด๋‹ค. ์‹ค์ œ ์‹œ์Šคํ…œ๊ณผ ๋น„์Šทํ•œ ํŠธ๋ž˜ํ”ฝ ํŒจํ„ด์„ ์žฌํ˜„ํ•˜๋ ค๊ณ  ๋„ฃ์—ˆ๋‹ค.


4. Loki๋ฅผ ์„ ํƒํ•œ ์ด์œ 

ํŒŒ์ผ๋กœ๋งŒ ์Œ“์œผ๋ฉด GUID ๊ฒ€์ƒ‰์ด ๋ถˆํŽธํ•˜๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์‹ค์‹œ๊ฐ„์œผ๋กœ ์—๋Ÿฌ์œจ์„ ๋ณด๋ฉด์„œ "๋‚ด๊ฐ€ ์›ํ•˜๋Š” ํŒจํ„ด์œผ๋กœ ๋กœ๊ทธ๊ฐ€ ๋‚˜์˜ค๊ณ  ์žˆ๋‚˜" ํ™•์ธํ•˜๊ณ  ์‹ถ์—ˆ๋‹ค.

๋ชจ๋‹ˆํ„ฐ๋ง ์Šคํƒ์„ ๋ถ™์ด๊ธฐ๋กœ ํ•˜๋ฉด์„œ Loki์™€ Elasticsearch๋ฅผ ๋น„๊ตํ–ˆ๋‹ค.

ํ•ญ๋ชฉ Loki Elasticsearch
๋ฉ”๋ชจ๋ฆฌ ~256MB ~2GB+
๋ณธ๋ฌธ ์ธ๋ฑ์‹ฑ ๋ ˆ์ด๋ธ”๋งŒ ์ „์ฒด ๋‹จ์–ด
๋ผ์ด์„ ์Šค AGPL SSPL (2021~)

๊ฐœ๋ฐœ ํ™˜๊ฒฝ์—์„œ Elasticsearch๋ฅผ ๋„์šฐ๋ฉด ๋‹ค๋ฅธ ๊ฑธ ์‹คํ–‰ํ•  ์—ฌ์œ ๊ฐ€ ์—†๋‹ค.

๊ทธ๋ฆฌ๊ณ  ์šฐ๋ฆฌ ์ผ€์ด์Šค์—์„œ ์ „๋ฌธ ์ธ๋ฑ์‹ฑ์ด ํ•„์š”ํ•œ ๊ฒŒ ์•„๋‹ˆ์—ˆ๋‹ค.

 

๋ ˆ์ด๋ธ”๋กœ ๋ฒ”์œ„๋ฅผ ์ขํžŒ ๋‹ค์Œ GUID๋ฅผ ๋ณธ๋ฌธ์—์„œ grepํ•˜๋ฉด ์ถฉ๋ถ„ํ–ˆ๋‹ค.

์ด๋Ÿฌํ•œ ์ด์œ ๋กœ Loki๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ๋กœ ๊ฒฐ์ •ํ–ˆ๋‹ค.

 


5. ์นด๋””๋„๋ฆฌํ‹ฐ - ๋ ˆ์ด๋ธ” ์„ค๊ณ„์—์„œ ๊ฐ€์žฅ ๊ณ ๋ฏผํ•œ ๋ถ€๋ถ„

๋ ˆ์ด๋ธ”์„ ์ž˜๋ชป ์„ค๊ณ„ํ•˜๋ฉด ์ŠคํŠธ๋ฆผ์ด ํญ๋ฐœํ•˜๊ณ  ์˜คํžˆ๋ ค ๋” ๋А๋ ค์ง„๋‹ค.

 

Loki๋Š” ๋ ˆ์ด๋ธ” ์กฐํ•ฉ๋งˆ๋‹ค ๋ณ„๋„ ์ŠคํŠธ๋ฆผ์„ ๋งŒ๋“ ๋‹ค. ๋ ˆ์ด๋ธ” ๊ฐ’์˜ ์ข…๋ฅ˜๊ฐ€ ๋งŽ์•„์งˆ์ˆ˜๋ก ์ŠคํŠธ๋ฆผ ์ˆ˜๊ฐ€ ๊ณฑ์…ˆ์œผ๋กœ ๋Š˜์–ด๋‚œ๋‹ค. ์ŠคํŠธ๋ฆผ์ด 10,000๊ฐœ๋ฅผ ๋„˜์œผ๋ฉด ์ธ๋ฑ์Šค๊ฐ€ ๋น„๋Œ€ํ•ด์ ธ์„œ ๊ฒ€์ƒ‰์ด ์˜คํžˆ๋ ค ๋А๋ ค์ง„๋‹ค.

 

๊ฐ€์žฅ ๊ณ ๋ฏผํ•œ ๊ฒŒ GUID์˜€๋‹ค. GUID๊ฐ€ ๋ ˆ์ด๋ธ”์ด๋ฉด ๊ฒ€์ƒ‰์ด ์ œ์ผ ๋น ๋ฅด์ง€๋งŒ, ๊ฐ’์ด ์ˆ˜๋งŒ ๊ฐœ๋‹ค.

GUID๊ฐ€ ๋ ˆ์ด๋ธ”์ผ ๋•Œ:
source(4) × has_error(2) × error_type(4) × guid(์ˆ˜๋งŒ) = ์ˆ˜์‹ญ๋งŒ ์ŠคํŠธ๋ฆผ โŒ

 

๊ฒฐ๊ตญ GUID๋Š” ๋ณธ๋ฌธ์— ๋‚จ๊ธฐ๊ณ  ๋‚˜๋จธ์ง€๋งŒ ๋ ˆ์ด๋ธ”๋กœ ์“ฐ๊ธฐ๋กœ ํ–ˆ๋‹ค.

source(4) × has_error(2) × error_type(4) × tx_code(20) = 640 ์ŠคํŠธ๋ฆผ โœ…

GUID๋Š” ๋ ˆ์ด๋ธ”๋กœ ์กฐํšŒํ•˜๋Š” ๋Œ€์‹ , ๋จผ์ € source์™€ error_type์œผ๋กœ ๋ฒ”์œ„๋ฅผ ์ขํžŒ ๋‹ค์Œ ๋ณธ๋ฌธ์—์„œ grep ํ•œ๋‹ค.

์†๋„ ์ฐจ์ด๋Š” ํฌ์ง€ ์•Š์•˜๋‹ค.

 


6. ํŠธ๋Ÿฌ๋ธ”์ŠˆํŒ…

1. Grafana ํ•œ๊ธ€ ๊นจ์ง

Grafana ๋Œ€์‹œ๋ณด๋“œ๋ฅผ ์ฝ”๋“œ๋กœ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด PowerShell ์Šคํฌ๋ฆฝํŠธ๋กœ JSON ํŒŒ์ผ์„ ์ƒ์„ฑํ–ˆ๋‹ค.
๊ทผ๋ฐ ํŒจ๋„ ์ด๋ฆ„ "์—๋Ÿฌ ๊ฑด์ˆ˜", "์‘๋‹ต ์‹œ๊ฐ„" ๊ฐ™์€ ํ•œ๊ธ€์ด ์ „๋ถ€ ???? ๊ฐ™์€ ๋ฌธ์ž๋กœ ๊นจ์ ธ์„œ ๋‚˜์™”๋‹ค.

 

์›์ธ์€ BOM์ด์—ˆ๋‹ค. BOM(Byte Order Mark)์€ ํŒŒ์ผ ๋งจ ์•ž์— ๋ชฐ๋ž˜ ๋ถ™๋Š” 3๋ฐ”์ดํŠธ์งœ๋ฆฌ ๋งˆ์ปค์ธ๋ฐ, "์ด ํŒŒ์ผ์€ UTF-8์ด์—์š”"๋ผ๊ณ  ์•Œ๋ ค์ฃผ๋Š” ์—ญํ• ์„ ํ•œ๋‹ค.

๊ทผ๋ฐ Grafana API๋Š” BOM์„ ์ธ์‹ ๋ชป ํ•˜๊ณ  ํŒŒ์ผ ๋‚ด์šฉ์ด ๊นจ์ง„ ๊ฒƒ์ฒ˜๋Ÿผ ์ฝ๋Š”๋‹ค.

PowerShell์€ ํŒŒ์ผ์„ ์ €์žฅํ•  ๋•Œ ์ž๋™์œผ๋กœ BOM์„ ๋ถ™์ด๋Š” ๊ฒŒ ๊ธฐ๋ณธ ๋™์ž‘์ด๋ผ ์ด๊ฒŒ ๋ฌธ์ œ๊ฐ€ ๋๋‹ค.

 

๋”ฐ๋ผ์„œ Python์œผ๋กœ ํŒŒ์ผ ์ƒ์„ฑ ๋ฐฉ์‹์„ ๋ฐ”๊ฟจ๋‹ค.

with open("dashboard.json", "w", encoding="utf-8") as f:
    json.dump(data, f, ensure_ascii=False)

Python์˜ open(encoding="utf-8")์€ BOM ์—†์ด ์ €์žฅํ•œ๋‹ค.

ensure_ascii=False๋Š” ํ•œ๊ธ€์„ ์—๋Ÿฌ์ฒ˜๋Ÿผ ์ด์Šค์ผ€์ดํ”„ํ•˜์ง€ ๋ง๊ณ  ๊ทธ๋ƒฅ "์—๋Ÿฌ"๋กœ ์ €์žฅํ•˜๋ผ๋Š” ๋œป์ด๋‹ค.

์ด ๋‘ ๊ฐ€์ง€๊ฐ€ ํ•ฉ์ณ์ง€๋‹ˆ๊นŒ Grafana๊ฐ€ ํ•œ๊ธ€์„ ์ œ๋Œ€๋กœ ์ฝ๊ฒŒ ๋˜์—ˆ๋‹ค.

 

 

2. Stat ํŒจ๋„์ด ์ˆซ์ž ํ•˜๋‚˜ ๋Œ€์‹  ์„  15๊ฐœ๋กœ ์ชผ๊ฐœ์ง€๋Š” ๋ฒ„๊ทธ

์—๋Ÿฌ ์ด ๊ฑด์ˆ˜๋ฅผ ํผ์งํ•œ ์ˆซ์ž ํ•˜๋‚˜๋กœ ๋ณด์—ฌ์ฃผ๋Š” stat ํŒจ๋„์„ ๋งŒ๋“ค์—ˆ๋‹ค.
๊ทผ๋ฐ ์ˆซ์ž ํ•˜๋‚˜ ๋Œ€์‹  15๊ฐœ ์„ ์ด ๊ฒน์ณ์„œ ๊ฝค๋‚˜ ๋ณด๊ธฐ ๋ถˆํŽธํ•œ ๊ทธ๋ž˜ํ”„๊ฐ€ ๋‚˜์™”๋‹ค.

 

์›์ธ์€ Loki๊ฐ€ ๋กœ๊ทธ ํŒŒ์ผ๋งˆ๋‹ค ๋ณ„๋„ ์‹œ๋ฆฌ์ฆˆ๋ฅผ ๋งŒ๋“ค๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

๋กœ๊ทธ ํŒŒ์ผ์ด 15๊ฐœ๋ฉด ์—๋Ÿฌ ๊ฑด์ˆ˜๋„ ํŒŒ์ผ๋ณ„๋กœ 15๊ฐœ ์ˆซ์ž๊ฐ€ ๋”ฐ๋กœ ๊ณ„์‚ฐ๋œ๋‹ค.

Grafana๋Š” ์ด๊ฑธ ํ•ฉ์‚ฐํ•˜์ง€ ์•Š๊ณ  ๊ทธ๋ƒฅ 15๊ฐœ ์„ ์œผ๋กœ ๋‹ค ๊ทธ๋ ค๋ฒ„๋ฆฐ๋‹ค.

 

sum()์œผ๋กœ ๊ฐ์‹ธ๋ฉด 15๊ฐœ๋ฅผ ํ•˜๋‚˜๋กœ ๋”ํ•ด์ค€๋‹ค.

# ์ „: ํŒŒ์ผ๋งˆ๋‹ค ๋”ฐ๋กœ → 15๊ฐœ ์„ 
count_over_time({job="incident-autopsy"} |= "ERROR" [1m])

# ํ›„: ์ „๋ถ€ ํ•ฉ์‚ฐ → ์ˆซ์ž ํ•˜๋‚˜
sum(count_over_time({job="incident-autopsy"} |= "ERROR" [1m]))

 

3. Dashboard UID ์ถฉ๋Œ

Grafana๋Š” ๋Œ€์‹œ๋ณด๋“œ๋ฅผ UID๋กœ ์‹๋ณ„ํ•œ๋‹ค.

UID๊ฐ€ ๊ฐ™์œผ๋ฉด "๊ฐ™์€ ๋Œ€์‹œ๋ณด๋“œ๋ฅผ ์—…๋ฐ์ดํŠธํ•˜๋Š” ๊ฒƒ"์œผ๋กœ ๋ณด๊ณ , UID๊ฐ€ ๋‹ค๋ฅด๋ฉด "์ƒˆ ๋Œ€์‹œ๋ณด๋“œ๋ฅผ ๋งŒ๋“œ๋Š” ๊ฒƒ"์œผ๋กœ ๋ณธ๋‹ค.

 

๋ฒ„์ „ ์—…๊ทธ๋ ˆ์ด๋“œ๋ฅผ ํ•˜๋ฉด์„œ UID๋ฅผ dashboard-v1์—์„œ dashboard-v2๋กœ ๋ฐ”๊ฟจ๋‹ค. ๊ทธ๋žฌ๋”๋‹ˆ Grafana ๋‚ด๋ถ€ DB์—๋Š” v1์งœ๋ฆฌ ๋Œ€์‹œ๋ณด๋“œ๊ฐ€ ๋‚จ์•„์žˆ๋Š”๋ฐ, ํŒŒ์ผ์—์„œ๋Š” v2๊ฐ€ ๋“ค์–ด์˜ค๋‹ˆ๊นŒ ์ถฉ๋Œ์ด ๋‚ฌ๋‹ค. ํ”„๋กœ๋น„์ €๋‹ ์ž์ฒด๊ฐ€ ์‹คํŒจํ•˜๋ฉด์„œ ๋Œ€์‹œ๋ณด๋“œ๊ฐ€ ์•„์˜ˆ ์•ˆ ๋œจ๋Š” ์ƒํ™ฉ์ด ๋๋‹ค.

 

UID๋ฅผ ๋‹ค์‹œ v1์œผ๋กœ ๋˜๋Œ๋ฆฌ๋‹ˆ๊นŒ Grafana๊ฐ€ ๊ธฐ์กด ๋ ˆ์ฝ”๋“œ๋ฅผ ์—…๋ฐ์ดํŠธํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๋ฉด์„œ ์ •์ƒ์ ์œผ๋กœ ๋œฏ๋‹ค.

* ๊ตํ›ˆ: UID๋Š” ํ•œ ๋ฒˆ ์ •ํ•˜๋ฉด ํ•จ๋ถ€๋กœ ๋ฐ”๊พธ๋ฉด ์•ˆ ๋œ๋‹ค.

 

 

4. Docker ์ปจํ…Œ์ด๋„ˆ์—์„œ host ์„œ๋น„์Šค ์ ‘๊ทผ ๋ถˆ๊ฐ€

Prometheus๋Š” Docker ์ปจํ…Œ์ด๋„ˆ ์•ˆ์—์„œ ๋Œ๊ณ , ๋ฉ”ํŠธ๋ฆญ์„ ์ˆ˜์ง‘ํ•˜๋ ค๋Š” log-autogenerator๋Š” host(๋‚ด ์ปดํ“จํ„ฐ)์—์„œ ์ง์ ‘ ๋Œ๊ณ  ์žˆ์—ˆ๋‹ค.
localhost:9000์œผ๋กœ ์ ‘๊ทผ์„ ์‹œ๋„ํ–ˆ๋Š”๋ฐ ์—ฐ๊ฒฐ์ด ์•ˆ ๋๋‹ค.

 

์›์ธ์€ Docker ๋„คํŠธ์›Œํฌ ๊ฒฉ๋ฆฌ๋‹ค. ์ปจํ…Œ์ด๋„ˆ ์•ˆ์—์„œ localhost๋Š” ๋‚ด ์ปดํ“จํ„ฐ๊ฐ€ ์•„๋‹ˆ๋ผ ์ปจํ…Œ์ด๋„ˆ ์ž๊ธฐ ์ž์‹ ์„ ๊ฐ€๋ฆฌํ‚จ๋‹ค. ์ปจํ…Œ์ด๋„ˆ ์ž…์žฅ์—์„œ host(๋‚ด ์ปดํ“จํ„ฐ)๋Š” ์™ธ๋ถ€ ์„œ๋ฒ„์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋ผ ์ฃผ์†Œ๋ฅผ ๋”ฐ๋กœ ์•Œ์•„์•ผ ํ•œ๋‹ค.

extra_hosts:
  - "host.docker.internal:host-gateway"

host-gateway๋Š” Docker๊ฐ€ ์ž๋™์œผ๋กœ host IP๋ฅผ ํ• ๋‹นํ•ด์ฃผ๋Š” ํŠน์ˆ˜ ํ‚ค์›Œ๋“œ๋‹ค. ์ด ์„ค์ •์„ ์ถ”๊ฐ€ํ•˜๋ฉด ์ปจํ…Œ์ด๋„ˆ ์•ˆ์—์„œ host.docker.internal์ด๋ผ๋Š” ์ด๋ฆ„์œผ๋กœ host์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋‹ค. Windows Docker Desktop๊ณผ EC2 Ubuntu ํ™˜๊ฒฝ ๋‘˜ ๋‹ค ์ด ์„ค์ • ํ•˜๋‚˜๋กœ ํ•ด๊ฒฐ๋๋‹ค.

 


7. ์ตœ์ข… ๊ฒฐ๊ณผ

python generator.py --continuous --rate 2 --error-rate 0.05 --peak-pattern

์ด ์ธ์‹œ๋˜ํŠธ:  1,479๊ฑด
์—๋Ÿฌ ๊ฑด์ˆ˜:    17๊ฑด
์—๋Ÿฌ์œจ:       1.22%
์†Œ์Šค 4์ข… ์ˆ˜์ง‘: jennifer-apm / framework-applog / log4j / modern-rest โœ…
ํ”ผํฌ ๋ฐฐ์ˆ˜:    1.75 (์˜คํ›„ ํ”ผํฌํƒ€์ž„)

Grafana์—์„œ ํ”ผํฌ ๋ฐฐ์ˆ˜๊ฐ€ ์˜ฌ๋ผ๊ฐˆ์ˆ˜๋ก ์—๋Ÿฌ ๊ฑด์ˆ˜๋„ ๊ฐ™์ด ์˜ฌ๋ผ๊ฐ€๋Š” ๊ฑธ ์‹ค์‹œ๊ฐ„์œผ๋กœ ํ™•์ธํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค.

์‹ค์ œ ๊ธˆ์œต ์‹œ์Šคํ…œ์˜ ํ”ผํฌํƒ€์ž„ ํŒจํ„ด์„ ํ•™์Šตํ•œ ๊ฒฐ๊ณผ, ๋น„์Šทํ•˜๊ฒŒ ๋™์ž‘ํ–ˆ๋‹ค.

 


8. ์‹ค๋ฌด์— ๋ถ™์ด๋ ค๋ฉด

ํ˜„์žฌ ๊ตฌ์กฐ๋Š” ์‹œ๋ฎฌ๋ ˆ์ดํ„ฐ ๊ธฐ์ค€์œผ๋กœ tx_code๊ฐ€ 20๊ฐœ๋‹ค.

์‹ค์ œ ๊ธˆ์œต ์‹œ์Šคํ…œ์˜ ๊ฑฐ๋ž˜์ฝ”๋“œ๋Š” ์ˆ˜์ฒœ ๊ฐœ ์ˆ˜์ค€์ด๋ผ ๊ทธ๋Œ€๋กœ ๋ ˆ์ด๋ธ”๋กœ ์“ฐ๋ฉด ์ŠคํŠธ๋ฆผ์ด ํญ๋ฐœํ•œ๋‹ค.

์ฑ„๋„(10) × ์—…๋ฌด(20) × ํŠธ๋žœ์žญ์…˜(~500) = ์ˆ˜์ฒœ ์ข…
→ source(4) × has_error(2) × error_type(4) × tx_code(3,000) = 96,000 ์ŠคํŠธ๋ฆผ โŒ

์‹ค๋ฌด ํ™˜๊ฒฝ์ด๋ผ๋ฉด tx_code๋ฅผ ์—…๋ฌด ๋Œ€๋ถ„๋ฅ˜(๊ณ„์ขŒ, ๊ฒฐ์ œ, ๋Œ€์ถœ ๋“ฑ ~10์ข…)๋กœ ๋ฌถ๊ฑฐ๋‚˜,

PostgreSQL์— ๋ณ„๋„ ์ธ๋ฑ์Šค DB๋ฅผ ๋ณ‘ํ–‰ํ•ด์„œ GUID๋ฅผ ๋น ๋ฅด๊ฒŒ ์ฐพ๋Š” ๊ตฌ์กฐ๋กœ ๊ฐ€์•ผ ํ•œ๋‹ค.

 

ํ…Œ์ŠคํŠธ ๋ฐ์ดํ„ฐ๊ฐ€ ํ˜„์‹ค์ ์ด์–ด์•ผ AI ๋ถ„์„๋„ ํ˜„์‹ค์ ์ด๋‹ค.
๋‹จ์ˆœํ•œ ๋”๋ฏธ ๋ฐ์ดํ„ฐ๋กœ ํ•™์Šตํ•œ AI๋Š” ์‹ค์ œ ๋กœ๊ทธ ์•ž์—์„œ ๋ฌด๋„ˆ์ง„๋‹ค.

 

 

End-Gamers | incident-autopsy | log-autogenerator

RELATED ARTICLES

more