๊ด€๋ฆฌ ๋ฉ”๋‰ด

๐‘†๐‘ข๐‘›๐‘ โ„Ž๐‘–๐‘›๐‘’ ๐‘Ž๐‘“๐‘ก๐‘’๐‘Ÿ ๐‘Ÿ๐‘Ž๐‘–๐‘›โœง

[Spring] Kibana๋ž€ ๋ณธ๋ฌธ

Kibana

  • Elasticsearch์— ์ƒ‰์ธ๋œ ๋ฐ์ดํ„ฐ ๊ธฐ๋ฐ˜
  • ์‹œ๊ฐํ™” ๋ฐ ๊ฒ€์ƒ‰ ๊ธฐ๋Šฅ ์ œ๊ณต
  • ๋ฌด๋ฃŒ ์˜คํ”ˆ ์†Œ์Šค
  • ์‹ค๋ฌด์—์„œ๋Š” ๋กœ๊ทธ ํ”Œ๋žซํผ ์šฉ๋„ ์‚ฌ์šฉ

Kibana ๊ธฐ๋Šฅ

๋กœ๊น…๊ณผ ๋กœ๊ทธ ๋ถ„์„

์ธํ”„๋ผ ๋ฉ”ํŠธ๋ฆญ๊ณผ ์ปจํ…Œ์ด๋„ˆ ๋ชจ๋‹ˆํ„ฐ๋ง(์‹œ์Šคํ…œ ๊ด€๋ฆฌ ๋ชจ๋‹ˆํ„ฐ๋ง)

์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„ฑ๋Šฅ ๋ชจ๋‹ˆํ„ฐ๋ง(APM)

์œ„์น˜ ๊ธฐ๋ฐ˜ ์ •๋ณด ๋ฐ์ดํ„ฐ ๋ถ„์„๊ณผ ์‹œ๊ฐํ™”

๋ณด์•ˆ ๋ถ„์„

๋น„์ฆˆ๋‹ˆ์Šค ๋ถ„์„

Elastic Stack ์ธ์Šคํ„ด์Šค๋ฅผ ๋ชจ๋‹ˆํ„ฐ๋ง,๊ด€๋ฆฌ

 

Kibana์˜ ์‹œ๊ฐํ™” ๊ธฐ๋Šฅ

Discover - ๋ฐ์ดํ„ฐ ์กฐํšŒ, ํ•„ํ„ฐ, ๋ถ„์„

Dashboard - ๋‹ค์–‘ํ•œ ๊ทธ๋ž˜ํ”„๋ฅผ ํ™œ์šฉํ•œ ์‹œ๊ฐํ™”

Canvas - ํ”„๋ฆฌ์  ํ…Œ์ด์…˜ ์ฒ˜๋Ÿผ ๊ตฌ์„ฑ

Maps - ์ง€๋„์— ์œ„์น˜ ๊ธฐ๋ฐ˜ ๋ฐ์ดํ„ฐ ํ‘œํ˜„

Graph - ๋ฐ์ดํ„ฐ๋ฅผ ๊ด€๊ณ„ ์ง€ํ–ฅ์ ์œผ๋กœ ์‹œ๊ฐํ™”

 

 

Discover

• ElasticSearch ์— ์ ์žฌ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ํ™•์ธํ•˜๊ณ  ๊ฒ€์ƒ‰ํ•˜๋Š”๋ฐ์— ์‚ฌ์šฉ

๋กœ๊น…์— ๊ฒฝ์šฐ ๋งŽ์ด ์ ์žฌํ• ์ˆ˜๋ก ๋น„์šฉ์ด ๋งŽ์ด ๋‚˜๊ฐ€๊ธฐ ๋•Œ๋ฌธ์—, ๋ณดํ†ต ์ผ์ฃผ์ผ ์ •๋„์˜ ๋กœ๊ทธ๋งŒ ์ ์žฌํ•˜๊ณ  ๋‚˜๋จธ์ง€๋Š” ์‚ญ์ œํ•œ๋‹ค.

 

1. ํ•„ํ„ฐ(Filter)

  • ์„ค๋ช…: ๋Œ€์‹œ๋ณด๋“œ์— ํ‘œ์‹œ๋˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ œํ•œํ•˜๊ธฐ ์œ„ํ•œ ์กฐ๊ฑด์„ ์„ค์ •ํ•˜๋Š” ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค.
  • ํŠน์ง•: ํŠน์ • ํ•„๋“œ ๊ฐ’์„ ๊ธฐ์ค€์œผ๋กœ ๋ฐ์ดํ„ฐ ์กฐํšŒ๋ฅผ ํ•„ํ„ฐ๋งํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์˜ˆ: "status": "ERROR" ๋˜๋Š” "response_time > 1000ms"์™€ ๊ฐ™์€ ์กฐ๊ฑด ์ถ”๊ฐ€
  • ์‚ฌ์šฉ๋ฒ•: ํ•„ํ„ฐ ์ถ”๊ฐ€ ๋ฒ„ํŠผ์„ ํด๋ฆญํ•˜์—ฌ ์กฐ๊ฑด์„ ์„ ํƒํ•˜๊ณ  ์ ์šฉํ•ฉ๋‹ˆ๋‹ค.

 

2. ๊ฒ€์ƒ‰(Search)

  • ์„ค๋ช…: ์›ํ•˜๋Š” ๋ฐ์ดํ„ฐ๋‚˜ ๋กœ๊ทธ๋ฅผ ๋น ๋ฅด๊ฒŒ ์ฐพ๊ธฐ ์œ„ํ•ด ์ฟผ๋ฆฌ๋ฅผ ์ž…๋ ฅํ•˜๋Š” ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค.
  • ํŠน์ง•: Lucene ์ฟผ๋ฆฌ ๋˜๋Š” KQL(Kibana Query Language)์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.
  • ์˜ˆ:
    • response_time:>1000 (Lucene)
    • status : "ERROR" (KQL)
  • ์‚ฌ์šฉ๋ฒ•: ์ƒ๋‹จ์˜ ๊ฒ€์ƒ‰ ์ฐฝ์— ํ‚ค์›Œ๋“œ๋ฅผ ์ž…๋ ฅํ•˜์—ฌ ๋ฐ์ดํ„ฐ ์กฐํšŒ
  • ๊ฒ€์ƒ‰๋œ ๊ฒฐ๊ณผ๋Š” ๊ฒ€์ƒ‰์ฐฝ์•„๋ž˜์— ํžˆ์Šคํ† ๊ทธ๋žจ ์ฐจํŠธ์™€ ๋กœ๊ทธ ๋ชฉ๋ก์„ ๋ณด์—ฌ์ฃผ๊ณ  ๊ฐ๊ฐ์˜ ๋กœ๊ทธ๋ฅผ ํด๋ฆญํ•˜๋ฉด ์ƒ์„ธํ•˜๊ฒŒ ๋ณผ์ˆ˜ ์žˆ๋‹ค.

 

3. ํƒ€์ž„ํ”ผ์ปค(Time Picker)

  • ์„ค๋ช…: ๋ฐ์ดํ„ฐ ์กฐํšŒ์˜ ์‹œ๊ฐ„ ๋ฒ”์œ„๋ฅผ ์„ค์ •ํ•˜๋Š” UI ์š”์†Œ์ž…๋‹ˆ๋‹ค.
  • ํŠน์ง•: ์‹ค์‹œ๊ฐ„ ๋ฐ์ดํ„ฐ ๋ชจ๋‹ˆํ„ฐ๋ง๊ณผ ํŠน์ • ์‹œ๊ฐ„๋Œ€ ๋ฐ์ดํ„ฐ ์กฐํšŒ๊ฐ€ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.
  • ์˜ˆ:
    • "Last 15 minutes"
    • "Today"
    • ์ปค์Šคํ…€ ์‹œ๊ฐ„ ์„ค์ •
  • ์‚ฌ์šฉ๋ฒ•: ์šฐ์ธก ์ƒ๋‹จ์˜ ์‹œ๊ฐ„ ๋ฒ”์œ„ ์„ ํƒ๊ธฐ๋ฅผ ํด๋ฆญํ•˜์—ฌ ์›ํ•˜๋Š” ๋ฒ”์œ„๋ฅผ ์„ ํƒ

 

4. ์‹œ๊ณ„์—ด ํžˆ์Šคํ† ๊ทธ๋žจ(Time Series Histogram)

  • ์„ค๋ช…: ์‹œ๊ฐ„ ์ถ•์— ๋”ฐ๋ผ ๋ฐ์ดํ„ฐ ๋ถ„ํฌ๋ฅผ ์‹œ๊ฐ์ ์œผ๋กœ ํ‘œํ˜„ํ•˜๋Š” ๊ทธ๋ž˜ํ”„์ž…๋‹ˆ๋‹ค.
  • ํŠน์ง•: ํŠน์ • ์ด๋ฒคํŠธ๋‚˜ ๋กœ๊ทธ ๋ฐœ์ƒ ๋นˆ๋„์˜ ๋ณ€ํ™” ์ถ”์ด๋ฅผ ๋ถ„์„ํ•  ๋•Œ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค.
  • ์˜ˆ:
    • ๋ถ„ ๋‹จ์œ„ ๋กœ๊ทธ ์ด๋ฒคํŠธ ์ˆ˜
    • ์ผ๋ณ„ ํ‰๊ท  ์‘๋‹ต ์‹œ๊ฐ„
  • ์‚ฌ์šฉ๋ฒ•: ๋Œ€์‹œ๋ณด๋“œ์— ํ•ด๋‹น ์‹œ๊ฐํ™” ์œ„์ ฏ์„ ์ถ”๊ฐ€ํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ํƒ์ƒ‰

 

5. ๋ฐ์ดํ„ฐ(Data Table)

  • ์„ค๋ช…: Elasticsearch์—์„œ ์กฐํšŒ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ํ…Œ์ด๋ธ” ํ˜•ํƒœ๋กœ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.
  • ํŠน์ง•: ์›๋ณธ ๋ฐ์ดํ„ฐ์— ์ ‘๊ทผํ•˜์—ฌ ๊ฐœ๋ณ„ ํ•„๋“œ ๊ฐ’์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์˜ˆ:
    • ๋กœ๊ทธ ๋ฉ”์‹œ์ง€ ๋ชฉ๋ก
    • ์‘๋‹ต ์ฝ”๋“œ๋ณ„ ์š”์ฒญ ์ •๋ณด
  • ์‚ฌ์šฉ๋ฒ•: ๋ฐ์ดํ„ฐ ํ…Œ์ด๋ธ” ์œ„์ ฏ์„ ์ถ”๊ฐ€ํ•˜๊ณ  ํ•„๋“œ๋ฅผ ์„ ํƒํ•˜์—ฌ ์กฐํšŒ ๊ฒฐ๊ณผ ํ™•์ธ

 

6. ์‚ฌ์ด๋“œ๋ฐ”(Sidebar)

  • ์„ค๋ช…: ๋Œ€์‹œ๋ณด๋“œ์˜ ํƒ์ƒ‰ ๋ฐ ๊ตฌ์„ฑ ์š”์†Œ์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” ๋ฉ”๋‰ด์ž…๋‹ˆ๋‹ค.
  • ํŠน์ง•:
    • ์‹œ๊ฐํ™” ๋ชฉ๋ก, ๋ฐ์ดํ„ฐ ์›๋ณธ ๊ด€๋ฆฌ, ๋Œ€์‹œ๋ณด๋“œ ํƒ์ƒ‰ ๊ฐ€๋Šฅ
  • ์‚ฌ์šฉ๋ฒ•: ์‚ฌ์ด๋“œ๋ฐ”์—์„œ "Discover", "Dashboard", "Visualize Library" ๋“ฑ์˜ ํ•ญ๋ชฉ ์„ ํƒ

 


Dashboard

๋‹ค์–‘ํ•œ ์‹œ๊ฐํ™” ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ๋ชจ์•„์„œ ๋ณผ ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ

 


Canvas

Elasticsearch ๋ฐ์ดํ„ฐ๋ฅผ ํ™œ์šฉ

ํ”„๋ ˆ์  ํ…Œ์ด์…˜

๋ณด๊ณ ์„œ

๋™์ ์ธ ์ธํฌ๊ทธ๋ž˜ํ”ฝ ์ƒ์„ฑ

 


Maps

์œ„์น˜ ์ •๋ณด ๋ฐ์ดํ„ฐ๋ฅผ ์ด์šฉํ•œ ์œ„์น˜ ๊ธฐ๋ฐ˜ ์ •๋ณด ๋ฐ์ดํ„ฐ๋ฅผ ๋ถ„์„

 

Observability

Observability ๋Š” ๋‹ค์–‘ํ•œ ์„œ๋น„์Šค ๋˜๋Š” ์—ฐ๊ด€๋œ ์‹œ์Šคํ…œ์„ ์‹ค์‹œ๊ฐ„์œผ๋กœ ๋ชจ๋‹ˆํ„ฐ๋งํ•˜๊ณ  ๊ฐ์‹œํ•˜๊ณ  ๋ถ„์„ํ•˜๊ณ  ์•Œ๋ฆผ์„ ๋ณด๋‚ด๊ณ  ์‹ถ์„๋•Œ ์‚ฌ์šฉํ•˜๋Š” ๋ฉ”๋‰ด์ด๋‹ค.

 


 

 

 KQL

  • Kibana์—์„œ Elasticsearch ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒํ•˜๊ธฐ ์œ„ํ•œ ์ฟผ๋ฆฌ ์–ธ์–ด
  • Discover์™€ Dashboard ํƒญ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฒ€์ƒ‰ํ•  ๋•Œ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

 

KQL ์—ฐ์‚ฐ์ž ์ •๋ฆฌ

: ๋น„๊ต ๊ฐ’์ด ์ผ์น˜ status : "ERROR"
!= ๋น„๊ต ๊ฐ’์ด ์ผ์น˜ํ•˜์ง€ ์•Š์Œ status != "SUCCESS"
> ๋น„๊ต ๊ฐ’์ด ์ดˆ๊ณผ response_time > 1000
< ๋น„๊ต ๊ฐ’์ด ๋ฏธ๋งŒ response_time < 500
>= ๋น„๊ต ๊ฐ’์ด ์ด์ƒ response_time >= 1000
<= ๋น„๊ต ๊ฐ’์ด ์ดํ•˜ response_time <= 500
AND ๋…ผ๋ฆฌ ๋ชจ๋“  ์กฐ๊ฑด์ด ์ฐธ status : "ERROR" AND response_time > 1000
OR ๋…ผ๋ฆฌ ํ•˜๋‚˜ ์ด์ƒ์˜ ์กฐ๊ฑด์ด ์ฐธ status : "ERROR" OR status : "WARNING"
NOT ๋…ผ๋ฆฌ ์กฐ๊ฑด์ด ๊ฑฐ์ง“ NOT status : "SUCCESS"
() ๊ทธ๋ฃนํ™” ์กฐ๊ฑด ๊ทธ๋ฃนํ™” (status : "ERROR" OR status : "WARNING") AND response_time > 1000
* ์™€์ผ๋“œ์นด๋“œ 0๊ฐœ ์ด์ƒ์˜ ๋ฌธ์ž์™€ ์ผ์น˜ message : "Timeout*"
? ์™€์ผ๋“œ์นด๋“œ 1๊ฐœ์˜ ๋ฌธ์ž์™€ ์ผ์น˜ status : "ERRO?"
[ ] ๋ฒ”์œ„ ๋ฒ”์œ„ ํฌํ•จ response_time : [500 TO 1000]
{ } ๋ฒ”์œ„ ๋ฒ”์œ„ ์ œ์™ธ response_time : {500 TO 1000}
exists ์กด์žฌ ํ•„๋“œ๊ฐ€ ์กด์žฌ exists : response_time
/pattern/ ์ •๊ทœ์‹ ์ •๊ทœ์‹ ๋งค์นญ message : /error.*/
is null ํŠน์ˆ˜ ๊ฐ’์ด ๋น„์–ด ์žˆ์Œ response_time is null
is not null ํŠน์ˆ˜ ๊ฐ’์ด ๋น„์–ด ์žˆ์ง€ ์•Š์Œ response_time is not null

 

ํ…์ŠคํŠธ ๊ฒ€์ƒ‰

Elasticsearch์—์„œ ํ…์ŠคํŠธ ๊ฒ€์ƒ‰์„ ํ•  ๋•Œ, ์ฃผ์˜ํ• ์ 

  1. ํ‚ค์›Œ๋“œ, ์ˆซ์ž, ๋‚ ์งœ, bool ํ•„๋“œ์˜ ์ฟผ๋ฆฌ
    • ์ด ํ•„๋“œ๋“ค์€ ๊ตฌ๋‘์  ๋ฐ ๋Œ€์†Œ๋ฌธ์ž๋ฅผ ํฌํ•จํ•˜์—ฌ ์ •ํ™•ํžˆ ์ผ์น˜ํ•˜๋Š” ๊ฐ’์„ ๊ฒ€์ƒ‰ํ•ฉ๋‹ˆ๋‹ค.
    • ์˜ˆ๋ฅผ ๋“ค์–ด, status: "200"๊ณผ ๊ฐ™์€ ์ฟผ๋ฆฌ๋Š” ์ •ํ™•ํžˆ "200" ๊ฐ’์„ ๊ฐ€์ง„ ๋ฌธ์„œ๋งŒ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
  2. ํ…์ŠคํŠธ ํ•„๋“œ
    • Elasticsearch์˜ ๋งคํ•‘ ์„ค์ •์— ๋”ฐ๋ผ ๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ๊ฐ€ ๋‹ฌ๋ผ์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • ํ…์ŠคํŠธ ํ•„๋“œ์—์„œ "hello world"์™€ "Hello World"๋Š” ๋‹ค๋ฅธ ๊ฐ’์œผ๋กœ ์ฒ˜๋ฆฌ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • ๋”ฐ๋ผ์„œ ๋Œ€์†Œ๋ฌธ์ž๋‚˜ ๊ตฌ๋‘์ ์— ๋ฏผ๊ฐํ•˜๊ฒŒ ๋™์ž‘ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  3. ์ •ํ™•ํ•œ ํ•„ํ„ฐ๋ง์„ ์œ„ํ•œ ๋”ฐ์˜ดํ‘œ ์‚ฌ์šฉ
    • ์ •ํ™•ํ•œ ํ…์ŠคํŠธ ํ•„ํ„ฐ๋ง์„ ์œ„ํ•ด ๋”ฐ์˜ดํ‘œ("")๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฒ€์ƒ‰์–ด๋ฅผ ๊ฐ์‹ธ๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค.
    • ์˜ˆ๋ฅผ ๋“ค์–ด, relatedContent.twitter:title: "Coming Up"๊ณผ ๊ฐ™์ด ๋”ฐ์˜ดํ‘œ๋กœ ๊ฐ์‹ธ๋ฉด ์ •ํ™•ํ•œ ๋ฌธ๊ตฌ๋ฅผ ๊ฒ€์ƒ‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

๋”ฐ์˜ดํ‘œ ๋ถ™์ด์ง€ ์•Š์€ ๊ฒฐ๊ณผ

 

 

๋”ฐ์˜ดํ‘œ ๋ถ™์ธ ๊ฒฐ๊ณผ

 

 

 

 

์ฐธ๊ณ 

https://skillflo.io/classroom/14981/10479/content/60231