index pattern
보통 kibana는 시계열데이터를 시각적으로 보여주기 때문에 날짜별데이터 같은 걸 아스타(*)같은걸로 묶음
time정보를 가지고 있는 필드를 지정해야 됨.
shard
elasticsearch는 shard로 분산저장함. 데이터를 쪼개는 것(sharding)
default 5개
primary shard에 RW, replica R(분산search)
replica가 많으면 비용이 많이들지만, 고가용성(데이터유실가능성) + 검색이 빠름
노드가 1개인데 primary/replica가 1개씩 있으면 replica가 할당될 노드가 없기 때문에 Unassigned shard가 됨.
shard 1개 10G정도가 권장?하는 양임 (요즘은 50G까진 괜찮다고함)
(경험)cluster 하나가 가질 수 있는 shard 3~4만개 ok, 6만개 이상이 되면 cluster query가 느려짐. index 생성속도도 막 몇분씩 걸리고 느려짐. (node 30~40대)는 (보통 서버는 64G, es는 jvm 32G(max임, 나머지는 시스템메모리 같은걸로 사용하기 때문에 남겨둠))
management
es에 저장되는 데이터는 용량이 2.5배정도 됨
indexing rate es에서 데이터 넣는거
search rate es에서 데이터 읽는거
둘다 latency가 높아지면(수십 초 이상) 장애가 발생할 수 있음
elasticsearch head (tool)
https://chrome.google.com/webstore/detail/elasticsearch-head/ffmkiejjmecolpfloofpjologoblkegm
es는 비정규화데이터
node추가되면 rellocating
index는 Logical한 개념. 그 안에서 샤드,노드 등이 분산되는 것
샤드수가 많고, 크기가 클수록 검색시간이 많이 걸린다. (데이터가 퍼져있으면 취합하는데 오래걸림)
레플리카가 많을수록 검색성능 수평확장 scale out이 가능함.
segment는 lucene의 개념
es에 refresh 하면 검색가능한 형태로 최종 데이터 저장(searchable segment) 배치성으로 일어남
오늘날짜데이터 같은 경우 데이터가 계속 들어오니까 hot node. cpu를 많이 쓰기때문에(writing) cpu쪽 성능이 높은 서버를 쓰면 됨
반대로 예전데이터 같은 경우에는 warm/cold node. 메모리를 많이 쓰기때문에(search) 그쪽 성능을 높이면 좋음
field data
"reason" : {
"type" : "illegal_argument_exception",
"reason" : "Text fields are not optimised for operations that require per-document field data like aggregations and sorting, so these operations are disabled by default. Please use a keyword field instead. Alternatively, set fielddata=true on [book_name02] in order to load field data by uninverting the inverted index. Note that this can use significant memory."
}
질문
flush
max search rate?
es restapi timeout
_id값을 지정해서 넣고, search하면 속도가 빠른지?
alias asta