Kibana์ Dev Tools๐
์ด์ ์์ ์ ์ด์ด Kibana์ Dev Tools ๋ก ๋ฐ์ดํฐ ์กฐ์๋ฒ์ ์์๋ณธ๋ค.
[Elasticsearch] ๊ฒ์ ์์ง : Elasticsearch ์ค์นํ๊ธฐ(+ELK)
Elasticsearch๐ ์๋ฐ๋ก ๋ง๋ค์ด์ง ๋ฃจ์ฌ ๊ธฐ๋ฐ์ ์คํ ์์ค ๊ฒ์ ์์ง์ด๋ค. ๋ค๋์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ค๋ ์ธก๋ฉด์์๋ DB์ ๋น์ทํด๋ณด์ด์ง๋ง, ์ ํ ๋ค๋ฅด๋ค. ์ฃผ๋ก ๋๋์ ๋ฐ์ดํฐ๋ฅผ ์ค์๊ฐ์ผ๋ก ๊ฒ์ํ๊ณ
steady-record.tistory.com
Elasticserach, kibana ์คํ ์ค์ธ์ง ํ์ธ
๐ข๋ช ๋ น์ฐฝ ๋น ์ ธ๋์ค๊ธฐ : q
systemctl status elasticsearch
systemctl status kibana
๐ข Elasticsearch ์ ์ ๋ค์ ์ดํผ๊ธฐ
Elasticsearch ๋ JSON์ ์ ์ฅํ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ตฌ์กฐ๋ก ๋์ด์๋ค.
ํ ํ ์คํธ ๊ฒ์์ ์ง์ํ๋ ๊ฒ์์์ง์ด๋ค.
Elasticsearch์์๋ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ๋จ์๋ฅผ Document๋ผ๊ณ ํ๋ค. ์ด Document๊ฐ JSON ํํ๋ก ๋์ด์๋ค.
๋ํ, Elasticsearch๋ NoSQL ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ก์จ RDBMS์ธ ์ค๋ผํด๊ณผ ๋ค๋ฅธ ํน์ง์ ๊ฐ์ง๊ณ ์๋ค.
Elasticsearch๋ ์คํค๋ง ์์ ๋ก์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ธฐ ์ ์ ๋ช ์์ ์ธ ์คํค๋ง๋ฅผ ์ ์ํ์ง ์์๋ ๋๋ฉฐ, ํ์์ ๋ฐ๋ผ ๋ฐ์ดํฐ์ ๊ตฌ์กฐ๋ฅผ ๋์ ์ผ๋ก ๋ณ๊ฒฝํ ์ ์๋ค. ์๋ก์ด ํ๋๋ฅผ ์ถ๊ฐํ๊ฑฐ๋ ๊ธฐ์กด ํ๋๋ฅผ ์ ๊ฑฐํ๋ ๋ฑ์ ์์ ์ด ์ฉ์ดํ์ฌ ๋์จํ ๊ด๋ฆฌ๊ฐ ๊ฐ๋ฅํ๋ค.
๋ฐ์ดํฐ ์กฐ์ํ๊ธฐ(CRUD)๐
- Index
#์กฐํ(Read)
GET member
#ํน์ ๋ฌธ์ ์กฐํ
GET member/_doc/1
#์์ฑ(Create)
PUT member
#์ญ์ (Delete)
DELETE member
- Document
์์ฑ(Create)
PUT member/_doc/1
{
"name": "susukkang",
"age": 20
}
์กฐํ(Read)
GET member/_doc/1
#๋ฐ์ดํฐ๋ง ๋ณด๊ธฐ
GET member/_source/1
์์ (Update) 1
PUT member/_doc/1
{
"age": 26
}
๋์ด๋ฅผ ์์ ํ๊ณ ์ถ์ด ๋์ด ์ปฌ๋ผ๋ง ์์ ํ๋ฉด ์ด์ ๋ฐ์ดํฐ๋ ์ง์์ง๊ณ ๋ฎ์ด์ฐ๊ธฐ๊ฐ ๋๋ค.
PUT์ ์ฌ์ฉํ ์์ ์ ์ฌ์ค ์์ ์ด ์๋๋ค. ๊ธฐ์กด์ Document๋ฅผ ์ญ์ ํ๊ณ , ์๋ก์ด Document๋ฅผ ์ถ๊ฐํ๋ ๋ฎ์ด์ฐ๊ธฐ๋ก ๋์ํ๋ค.
POST + _update ๋ก ์ผ๋ถ ํ๋๋ง ์์ ๊ฐ๋ฅํ๋ค.
๋ฒํฌ API๋ก ๋ค๋์ ๋ฐ์ดํฐ ์ฝ์
๋ฒํฌ API๋ ๋ค๋์ ๋ฐ์ดํฐ๋ฅผ ํ๋ฒ์ ์ ๋ ฅํ๋ API์ด๋ฉฐ, '_bulk' ๋ฅผ ๋ถ์ฌ ์ฝ์ ํ๋ค.
๋ฐ์ดํฐ ์์ ์ ๋ณด๊ธฐ ์ํด ๋ฐ์ดํฐ๋ฅผ ์ถ๊ฐํด๋ณธ๋ค.
POST _bulk
{ "index" : { "_index" : "address", "_type" : "_doc", "_id" : "1" } }
{"name" : "๊ฐ๊ฐ๊ฐ", "age": 20, "gender": "m"}
{ "index" : { "_index" : "address", "_type" : "_doc", "_id" : "2" } }
{"name" : "๋๋๋", "age": 20, "gender": "f"}
{ "index" : { "_index" : "address", "_type" : "_doc", "_id" : "3" } }
{"name" : "๋ค๋ค๋ค", "age": 22, "gender": "m"}
{ "index" : { "_index" : "address", "_type" : "_doc", "_id" : "4" } }
{"name" : "๋ผ๋ผ๋ผ", "age": 24, "gender": "m"}
์์ (Update) 2
1. PUT : ์ ์ฒด ํ๋ ์์ ์ฉ
2. POST + _update : ์ผ๋ถ ํ๋ ์์ ์ฉ
- update ๊ณ ์ ์๋ POST ๋ง ์ฌ์ฉํ ์ ์๋ค.
- doc ํ๋๋ฅผ ๋จผ์ ๊ธฐ์ฌํ๋ค.
- update๊ฐ ์๋ doc๋ก ์ ์ผ๋ฉด put๊ณผ ๋์ผํ๊ฒ ๋ฎ์ด์ฐ๊ธฐ ๋๋ค.
POST address/_update/5
{
"doc" : {
"gender" : "m"
}
}
ํน์ Index์ ์๋ ๋ชจ๋ Document ์กฐํ
GET address/_search
GET member/_search
Elasticsearch ๊ฒ์ํ๊ธฐ๐
Elasticsearch๋ ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋นํด ๋ค์ํ๊ณ ํจ๊ณผ์ ์ธ ๊ฒ์ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ค.
์ด๋ ํ ํ ์คํธ ๊ฒ์(Full Text Search)์ ์ง์ํ๋ ๊ฒ์ ์์ง์ผ๋ก์์ ํน์ง์์ ๋น๋กฏ๋๋ค.
ํ ํ ์คํธ ๊ฒ์(Full Text Search) : ํ ์คํธ ๋ฐ์ดํฐ์ ๋ด์ฉ์์ ์๋ฏธ ์๋ ๋จ์ด๋ ๊ตฌ์ ์ ์ถ์ถํ์ฌ ๊ฒ์ํ๋ ๊ธฐ์ ์ด๋ค. ์ด๋ฅผ ํตํด ํ ์คํธ ๋ฐ์ดํฐ์ ๋ํ ์ ํํ๊ณ ์ ์ฐํ ๊ฒ์์ด ๊ฐ๋ฅํ๋ค.
Elasticsearch์์์ ๊ฒ์์ QueryDSL(Query Domain Specific Language)์ ์ฌ์ฉํ๋ฉฐ, ์ด๋ JSON ํ์์ผ๋ก ์์ฑ๋์ด ๋ค์ํ ๊ฒ์ ์ฟผ๋ฆฌ๋ฅผ ํํํ ์ ์๋ค.
*QueryDSL : Elasticsearch์์ ๊ฒ์์ ์ํํ๊ธฐ ์ํด ์ฌ์ฉ๋๋ ๋ ์์ ์ธ ๊ฒ์ ์ธ์ด
๊ฒ์์ Index๋ฅผ ๋์์ผ๋ก ์ํ๋๋ฉฐ, ์ผ๋ฐ์ ์ผ๋ก ๋ค์๊ณผ ๊ฐ์ ํ์์ผ๋ก ํํํ๋ค.
GET <์ธ๋ฑ์ค๋ช
>/_search
๊ฒ์์ ๊ธฐ๋ณธ์ ์ผ๋ก match_all ๊ฒ์์ด ์ํ๋๋ค. ์ด๋ ํด๋น ์ธ๋ฑ์ค์ ์๋ ๋ชจ๋ ๋ฌธ์๋ฅผ ๊ฒ์ํ๋ค.
๊ฒ์ ๋ฐฉ์
1. URI ๊ฒ์
- ๊ฒ์ ์ฟผ๋ฆฌ๋ฅผ URI์ ํ๋ผ๋ฏธํฐ๋ก ์ ๋ฌํ๋ ๋ฐฉ์
2. JSON Data Body ๊ฒ์
- ๋ฐ์ดํฐ ๋ณธ๋ฌธ ๊ฒ์
- ๊ฒ์ํ ์ฟผ๋ฆฌ๋ฅผ ์ ์กํ ๋ฐ์ดํฐ ๋ณธ๋ฌธ์ ๋ฃ์ด์ ์ ๋ ฅํ๋ ๋ฐฉ์
- ๋ณต์กํ ์ฟผ๋ฆฌ๋ฅผ ์์ฑํ ๋ ํจ๊ณผ์ ์ด๋ค.
- URI ๋ฐฉ์ ๋ณด๋ค ๋ง์ด ์ฌ์ฉํ๋ค.
๋ฐ์ดํฐ ์ค๋น
POST member/_bulk
{ "index" : { "_index" : "member", "_type" : "_doc", "_id" : 1 } }
{ "name" : "ํ๊ธธ๋", "age": 22, "gender": "m", "address": "์์ธ์ ๊ฐ๋จ๊ตฌ ์ญ์ผ๋", "height": 170, "weight": 70}
{ "index" : { "_index" : "member", "_type" : "_doc", "_id" : 2 } }
{ "name" : "์๋ฌด๊ฐ", "age": 25, "gender": "m", "address": "์์ธ์ ๊ฐ๋จ๊ตฌ ๋์น๋", "height": 175, "weight": 65}
{ "index" : { "_index" : "member", "_type" : "_doc", "_id" : 3 } }
{ "name" : "ํ
์คํธ", "age": 30, "gender": "m", "address": "์์ธ์ ๊ฐ๋จ๊ตฌ ์๊ตฌ์ ๋", "height": 180, "weight": 77}
{ "index" : { "_index" : "member", "_type" : "_doc", "_id" : 4 } }
{ "name" : "๊ฐํธ๋", "age": 45, "gender": "m", "address": "์์ธ์ ๊ฐ๋จ๊ตฌ ์ฒญ๋ด๋", "height": 184, "weight": 95}
{ "index" : { "_index" : "member", "_type" : "_doc", "_id" : 5 } }
{ "name" : "์ ์ฌ์", "age": 40, "gender": "m", "address": "์์ธ์ ๊ฐ๋จ๊ตฌ ์ ์ฌ๋", "height": 178, "weight": 62}
{ "index" : { "_index" : "member", "_type" : "_doc", "_id" : 6 } }
{ "name" : "๊น์ข
๋ฏผ", "age": 33, "gender": "m", "address": "์์ธ์ ๊ฐ๋๊ตฌ ๋ช
์ผ๋", "height": 176, "weight": 68}
{ "index" : { "_index" : "member", "_type" : "_doc", "_id" : 7 } }
{ "name" : "๋ฐ๋๋", "age": 27, "gender": "f", "address": "์์ธ์ ๊ฐ๋๊ตฌ ๊ณ ๋๋", "height": 152, "weight": 53}
{ "index" : { "_index" : "member", "_type" : "_doc", "_id" : 8 } }
{ "name" : "์กฐ์ธํธ", "age": 32, "gender": "m", "address": "์์ธ์ ๊ฐ๋๊ตฌ ์ฒํธ๋", "height": 158, "weight": 66}
{ "index" : { "_index" : "member", "_type" : "_doc", "_id" : 9 } }
{ "name" : "์ด๊ด์", "age": 37, "gender": "m", "address": "์์ธ์ ๊ฐ์๊ตฌ ๋ฑ์ด๋", "height": 192, "weight": 78}
{ "index" : { "_index" : "member", "_type" : "_doc", "_id" : 10 } }
{ "name" : "์ฅ๋์ฐ", "age": 28, "gender": "f", "address": "์์ธ์ ๊ฐ์๊ตฌ ๊ฐ์๋", "height": 179, "weight": 71}
๋ฐ์ดํฐ ํ์ธ
GET member/_search
1. URI ๊ฒ์
GET member/_search
m์ด ๋ค์ด๊ฐ ๋ฐ์ดํฐ ๊ฒ์
GET member/_search?q=m
๋ชจ๋ ํ๋๋ฅผ ๋์์ผ๋ก ๊ฒ์๋๋ค.
๋ชจ๋ ๋ฐ์ดํฐ์์ m์ด ๋ค์ด๊ฐ ๊ฐ์ ์ฐพ์ ๋ฐํํ๋ค. ๊ฒฐ๊ณผ๊ฐ์ผ๋ก 8๊ฑด์ด ๋์๋ค.
๊ฐ์๊ตฌ๊ฐ ๋ค์ด๊ฐ ๋ฐ์ดํฐ ๊ฒ์
GET member/_search?q=๊ฐ์๊ตฌ
๊ฐ์๊ตฌ์ m ๋ค์ด๊ฐ ๋ฐ์ดํฐ ๊ฒ์
GET member/_search?q=๊ฐ์๊ตฌ AND m
๊ฐ์๊ตฌ๊ฐ ๋ค์ด๊ฐ๋ฉด์ m ์ด ์๋ ๋ฐ์ดํฐ ๊ฒ์
GET member/_search?q=๊ฐ์๊ตฌ NOT m
ํ๋๋ช ํ์
๊ฐ์๊ตฌ์ ๊ฑฐ์ฃผํ๋ ์ฌ๋
GET member/_search?q=address:๊ฐ์๊ตฌ
URI ๋ฐฉ์์ ์กฐ๊ทธ๋ง ๋ณต์กํด์ ธ์ ์ฌ์ฉํ๊ธฐ ๋ถํธํ๊ธฐ ๋๋ฌธ์ ํค์๋ ๊ฒ์ ์ ์ธ์๋ ์ ์ฌ์ฉํ์ง ์๋๋ค.
2. JSON Data Body ๊ฒ์
match ์ฟผ๋ฆฌ๋ ๊ฒ์์ ๊ฐ์ฅ ๋ง์ด ์ฌ์ฉํ๋ ์ฟผ๋ฆฌ์ด๋ค.
GET <document>/_search
{
"query": {
"์ฟผ๋ฆฌ์ ์ข
๋ฅ": {
"<ํ๋๋ช
>" : "<๊ฒ์์ด>"
}
}
}
์ฑ๋ณ์ด ์ฌ์์ธ ๋ฐ์ดํฐ ๊ฒ์
GET member/_search
{
"query": {
"match": {
"gender" : "f"
}
}
}
๋ฉํฐํ ๋์, Multitenancy๐
์ฌ๋ฌ๊ฐ์ Index๋ฅผ ํ๋ฒ์ ๋ฌถ์ด์ ๊ฒ์ํ ์ ์๋ ๊ธฐ๋ฅ
์ฃผ๋ก ์ฌ๋ฌ ๊ฐ์ ์ธ๋ฑ์ค๊ฐ ๋์ผํ ๋ฐ์ดํฐ ์ ํ์ ๊ฐ์ง๊ณ ์๊ณ , ์๊ฐ ์์ผ๋ก ๋ฐ์ดํฐ๊ฐ ์์ด๋ ๊ฒฝ์ฐ์ ํ์ฉ๋๋ค.
ํนํ ์๊ฐ์ด ์ง๋จ์ ๋ฐ๋ผ ๊ณ์ํด์ ์์ฑ๋๋ ๋ก๊ทธ ํ์ผ ๋ฑ์ ๋ฐ์ดํฐ์ ๋งค์ฐ ์ ์ฉํ๋ค. ์ผ๋ฐ์ ์ผ๋ก ์๊ฐ๋ณ๋ก ์ธ๋ฑ์ค๋ฅผ ์์ฑํ์ฌ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋๋ฐ, ๋ฉํฐํ ๋์๋ฅผ ํ์ฉํ๋ฉด ์ฌ๋ฌ ์๊ฐ๋์ ๋ฐ์ดํฐ๋ฅผ ํจ๊ณผ์ ์ผ๋ก ํตํฉ ์กฐํํ ์ ์๋ค.
ํ์ผ๋ช : logs-2023-01, logs-2023-02 , logs-2023-03 หหห
GET logs-2023-01,logs-2023-02,logs-2023-03/_search
์ธ๋ฑ์ค ์ด๋ฆ์ ๊ณตํต์ ์ธ ๋ถ๋ถ์ด ์์ผ๋ฉด ์์ผ๋์นด๋ ์ฒ๋ฆฌ๊ฐ ๊ฐ๋ฅํ๋ค.
GET logs-*/_search
_all/search : ๋ชจ๋ index๋ฅผ ๋์์ผ๋ก ๊ฒ์ํ๋ค. ๋จ, ์์ ๋ถํ๊ฐ ์ฌํ๋ค.
GET _all/_search
member, address ์ธ๋ฑ์ค ํตํฉ ์กฐํ
GET member,address/_search
ํตํฉ ์กฐํ๋์ด ๊ฒฐ๊ณผ 15๊ฑด์ด ๋ฐํ๋์๋ค.
'Elasticsearch' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Elasticsearch] Body Search ๊ฒ์ (0) | 2023.12.08 |
---|---|
[Elasticsearch] ๊ฒ์ ์์ง : Elasticsearch ์ค์นํ๊ธฐ(+ELK) (0) | 2023.12.07 |
[Elasticsearch] Elasticsearch ์ค์ (1) WSL : ์๋์ฐ์์ ๋ฆฌ๋ ์ค ์ฌ์ฉํ๊ธฐ (0) | 2023.12.07 |