์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- prod docker-compose
- redis ์กฐํ
- aws ์ฟ ํฐ
- Codedeploy ์ค๋ฅ
- jvm ๋ฐ๋ฐ๋ฅ๊น์ง ํํค์น๊ธฐ
- docker ps -a
- redis ํ ์คํธ์ฝ๋
- s3 ์ด๋ฏธ์ง ๋ค์ด๋ก๋
- s3 log ์ ์ฅ
- docker-compose kafka
- ์๋ฒ ํฐ์ง๋ ๋์ปค ์ฌ์คํ
- aws saa ํฉ๊ฒฉ
- docker compose
- JPA
- AWS Certified Solutions Architect - Associate
- ์ ํจ์ค ๋น๋ ์ค๋ฅ
- ์คํํ๋ ๋ฏธ์ค
- private subnet ec2 ๋ก์ปฌ ์ ์
- ํ์ดํผ๋ฐ์ด์
- ํ๋ก๊ทธ๋๋จธ์ค ํฉ์นํ์์๊ธ
- ์๋ฐ
- ํ๋ก๊ทธ๋๋จธ์ค ์ปฌ๋ฌ๋ง๋ถ
- Kafka
- docker
- nGrinder
- Entity
- s3 ์ด๋ฏธ์ง ์ ์ฅ
- ์ ํจ์ค ์ค์ผ์ค๋ฌ
- ๋ค์ค ์ปจํ ์ด๋
- ํ๋ก๊ทธ๋๋จธ์ค
- Today
- Total
๐๐ข๐๐ โ๐๐๐ ๐๐๐ก๐๐ ๐๐๐๐โง
[Spring] Kibana๋ ๋ณธ๋ฌธ
[Spring] Kibana๋
๐คRyusun๐ค 2025. 3. 31. 10:42Kibana
- 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์์ ํ ์คํธ ๊ฒ์์ ํ ๋, ์ฃผ์ํ ์
- ํค์๋, ์ซ์, ๋ ์ง, bool ํ๋์ ์ฟผ๋ฆฌ
- ์ด ํ๋๋ค์ ๊ตฌ๋์ ๋ฐ ๋์๋ฌธ์๋ฅผ ํฌํจํ์ฌ ์ ํํ ์ผ์นํ๋ ๊ฐ์ ๊ฒ์ํฉ๋๋ค.
- ์๋ฅผ ๋ค์ด, status: "200"๊ณผ ๊ฐ์ ์ฟผ๋ฆฌ๋ ์ ํํ "200" ๊ฐ์ ๊ฐ์ง ๋ฌธ์๋ง ๋ฐํํฉ๋๋ค.
- ํ
์คํธ ํ๋
- Elasticsearch์ ๋งคํ ์ค์ ์ ๋ฐ๋ผ ๊ฒ์ ๊ฒฐ๊ณผ๊ฐ ๋ฌ๋ผ์ง ์ ์์ต๋๋ค.
- ํ ์คํธ ํ๋์์ "hello world"์ "Hello World"๋ ๋ค๋ฅธ ๊ฐ์ผ๋ก ์ฒ๋ฆฌ๋ ์ ์์ต๋๋ค.
- ๋ฐ๋ผ์ ๋์๋ฌธ์๋ ๊ตฌ๋์ ์ ๋ฏผ๊ฐํ๊ฒ ๋์ํ ์ ์์ต๋๋ค.
- ์ ํํ ํํฐ๋ง์ ์ํ ๋ฐ์ดํ ์ฌ์ฉ
- ์ ํํ ํ ์คํธ ํํฐ๋ง์ ์ํด ๋ฐ์ดํ("")๋ฅผ ์ฌ์ฉํ์ฌ ๊ฒ์์ด๋ฅผ ๊ฐ์ธ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค.
- ์๋ฅผ ๋ค์ด, relatedContent.twitter:title: "Coming Up"๊ณผ ๊ฐ์ด ๋ฐ์ดํ๋ก ๊ฐ์ธ๋ฉด ์ ํํ ๋ฌธ๊ตฌ๋ฅผ ๊ฒ์ํ ์ ์์ต๋๋ค.
๋ฐ์ดํ ๋ถ์ด์ง ์์ ๊ฒฐ๊ณผ
๋ฐ์ดํ ๋ถ์ธ ๊ฒฐ๊ณผ
์ฐธ๊ณ
https://skillflo.io/classroom/14981/10479/content/60231