Kibana + Elastic Search를 사용하여 필드의 고유 개수를 검색하는 방법
Kibana를 사용하여 필드의 고유 / 고유 개수를 쿼리 할 수 있습니까? Kibana의 백엔드로 탄력적 검색을 사용하고 있습니다.
그렇다면 쿼리 구문은 무엇입니까? 다음은 내 쿼리를 작성하고 싶은 Kibana 인터페이스에 대한 링크입니다. http://demo.kibana.org/#/dashboard
logstash로 nginx 액세스 로그를 구문 분석하고 데이터를 탄력적 검색에 저장하고 있습니다. 그런 다음 Kibana를 사용하여 쿼리를 실행하고 데이터를 차트로 시각화합니다. 특히 Kibana를 사용하여 특정 시간 프레임에 대한 고유 IP 주소의 수를 알고 싶습니다.
Kibana 4의 경우이 답변으로 이동
용어 패널을 사용하면 쉽게 할 수 있습니다.
로그에있는 고유 한 IP의 수를 선택하려면 필드에 지정 clientip
해야하며 길이에 충분히 큰 숫자를 입력해야합니다 (그렇지 않으면 동일한 그룹의 다른 IP에 연결됨). 스타일에서 지정해야합니다. 표. 패널을 추가하면 IP와 해당 IP의 개수가 포함 된 테이블이 생성됩니다.
이제 Kibana 4에서는 집계를 사용할 수 있습니다. Kibana 3에 대한 이 답변 에서 설명한 것과 같은 패널을 구축하는 것 외에도 , 이제 우리는 다른 기간의 고유 IP 수를 볼 수 있습니다. 즉, OP가 처음에 원했던 것입니다.
이와 같은 대시 보드를 작성하려면 시각화-> 인덱스 선택-> 수직 막대 차트 선택으로 이동 한 다음 시각화 패널에서 :
- Y 축에는 고유 한 IP 개수 (IP를 저장 한 필드 선택)가 필요하고 X 축에는 타임 필드와 함께 날짜 히스토그램이 필요합니다.
- 적용 버튼을 누르면 시간에 따라 배포 된 고유 한 IP 수를 보여주는 그래프가 표시됩니다. X 축에서 시간 간격을 변경하여 시간별 / 일별 고유 IP를 볼 수 있습니다.
고유 개수가 근사치라는 점만 고려하십시오 . 자세한 내용은 이 답변을 확인하십시오 .
고유 개수를 사용하는 경우 '카디널리티'측정 항목을 사용하고 있지만 항상 정확한 고유 개수를 보장하지는 않습니다. :-)
the cardinality metric is an approximate algorithm. It is based on the HyperLogLog++ (HLL) algorithm. HLL works by hashing your input and using the bits from the hash to make probabilistic estimations on the cardinality.
Depending on amount of data I can get differences of 700+ entries missing in a 300k dataset via Unique Count in Elastic which are otherwise really unique.
Read more here: https://www.elastic.co/guide/en/elasticsearch/guide/current/cardinality.html
Create "topN" query on "clientip" and then histogram with count on "clientip" and set "topN" query as source. Then you will see count of different ips per time.
Unique counts of field values are achieved by using facets. See ES documentation for the full story, but the gist is that you will create a query and then ask ES to prepare facets on the results for counting values found in fields. It's up to you to customize the fields used and even describe how you want the values returned. The most basic of facet types is just to group by terms, which would be like an IP address above. You can get pretty complex with these, even requiring a query within your facet!
{
"query": {
"match_all": {}
},
"facets": {
"terms": {
"field": "ip_address"
}
}
}
Using Aggs u can easily do that. Writing down query for now.
GET index/_search
{
"size":0,
"aggs": {
"source": {
"terms": {
"field": "field",
"size": 100000
}
}
}
}
This would return the different values of field
with there doc counts.
'Program Tip' 카테고리의 다른 글
Angularjs의 단위 테스트 약속 기반 코드 (0) | 2020.11.11 |
---|---|
persistence.xml 다른 트랜잭션 유형 속성 (0) | 2020.11.11 |
SQLite : 인덱스가 범위를 벗어 났기 때문에 인덱스 1에서 인수를 바인딩 할 수 없습니다. (0) | 2020.11.11 |
특정 확장자를 가진 파일을 재귀 적으로 찾기 (0) | 2020.11.11 |
새 활동에 대한 순환 표시 전환 (0) | 2020.11.11 |