나는 Elasticsearch에 이벤트 로깅 메시지를 저장하기 위해 최적화 된 아키텍처를 고안하려고합니다. 여기로깅을위한 탄성 검색 - 아키텍처 조언 필요
내 사양/요구 사항은 다음과 같습니다
- 메시지는 읽기 전용입니다; 일단 입력되면보고를 위해서만 질의됩니다.
- 자유 텍스트 검색이 없습니다. 사용자는보고 용 필터 만 사용합니다.
timestamp
범위 쿼리를 수행 할 수 있어야합니다.- 주로 (다른 필드 이외에)
agent
및customer
상호 작용으로 필터링해야합니다. customers
및agents
은 동일한location
에 속합니다.
은 그래서 가장 자주 실행되는 쿼리가 될 것입니다 : 모든 LogItem
들 client_id
, customer_id
및 timestamp
범위를 제공받을. 내 데이터를 색인 도움이 필요
"_source": {
"agent_id" : 14,
"location_id" : 2,
"customer_id" : 5289,
"timestamp" : 1320366520000, //Java Long millis since epoch
"event_type" : 7,
"screen_id" : 12
}
: 여기
는 같은 LogItem
보이는 것입니다.
저는 좋은 색인 생성 아키텍처에 대한 아이디어를 얻으려고 what is an elasticsearch index?과 using elasticsearch to serve events for customers을 읽었지만 전문가들의 도움이 필요합니다.
그래서 여기 내 질문이 있습니다 :
기사는 "하루에 한 인덱스를"만드는 것이 좋습니다. 해당 아키텍처로 어떻게 범위 쿼리를 수행합니까? (예 : 인덱스 범위에서 쿼리 할 수 있습니까?)
현재 큰 인덱스를 사용하고 있습니다. location_id 하나당 하나의 색인을 만들면 내 기록을 추가로 조직하기 위해 어떻게 조각을 사용합니까?
위의 사양이 주어진다면 은 더 나은 아키텍처를 제안 할 수 있습니까?
어떤 분야 나에와 대 쿼리를 필터링 해야합니까?
편집는 :
{
"query" : {
"bool" : {
"must" : [ {
"term" : {
"agent_id" : 6
}
}, {
"range" : {
"timestamp" : {
"from" : 1380610800000,
"to" : 1381301940000,
"include_lower" : true,
"include_upper" : true
}
}
}, {
"terms" : {
"event_type" : [ 4, 7, 11 ]
}
} ]
}
},
"filter" : {
"term" : {
"customer_id" : 56241
}
}
}
답변 해 주셔서 감사합니다. 나는 색인에 관한 당신의 요점을 이해한다. 그래서 나는 다시 생각할 것이다. 내 질문에 대한 로깅에 대한 기사에서 "물론 각 이벤트는 예를 들어 필요에 따라 이벤트 유형을 샤딩하여 추가로 나눌 수 있습니다." 그런 것을 명시 적으로 정의 할 수 있습니까? 또한, 내 메시지는 한 번만 색인 생성되므로, 내가 할 수있는 최적화의 형식이 있습니까? 고맙습니다. – Churro
라우팅을 사용하여 원하는 경우 수동으로 문서를 분할 할 수 있습니다. 그런 다음 동일한 경로 값을 가진 문서를 항상 동일한 샤드에 보내야합니다 (그러나 다른 값은 동일한 샤드에서 끝날 수 있습니다). 어쨌든 고급 기능을 라우팅하는 것이 좋을 것입니다. 이 강연을보십시오 : http://vimeo.com/44716955. – javanna
나는 Elasticsearch 게시물에 대한 귀하의 답변을 읽고 있었으며 매우 유익합니다. 나는 당신의 비디오를보고 더 많은 연구를했고 다음과 같은 아키텍처를 생각해 냈습니다. '고객'과 '에이전트'가 같은 '위치'에 속해 있기 때문에 '위치'별로 색인을 만들 것입니다. 나는'에이전트'당 라우팅 설정을 고려하고 있었다. 'Locations'는 일반적으로 252 개가있는 에이전트를 제외하고 ~ 30 개의 에이전트가 있습니다. 그 외에도 인덱스 당 5 개의 샤드, 1 개의 복제본을 사용합니다. 이 구조에 대한 귀하의 의견에 감사드립니다. – Churro