엘라스틱서치는 분산형 RESTful 검색 및 분석엔진이다. ELK라는 스택을 통해서 여러 데이터를 모으고 시각화하여 활용하는데 많이 쓰인다. 데이터를 모아서 Kibana로 사용하는 것도 좋지만 Grafana를 사용하면 미려한 그래프 디자인과 함께 alert기능등 여러 기능을 사용할 수 있다.
이번 포스팅에서는 엘라스틱서치와 Grafana를 사용하여 그래프를 그릴 때 Query를 사용하는 방법에 대해서 이야기해보고자 한다.
그라파나에 엘라스틱서치 연결하기
엘라스틱서치의 document를 그래프로 그리기 위해서는 index pattern을 그라파나에 등록해야 한다. 아래와 같이 add data source탭을 통해 elasticsearch에 대한 정보를 등록한다.
그라파나 Query
아래와 같은 형태로 ES가 document를 가지고 있다고 가정하자.
{
"_index": "burrow-to-elasticsearch",
"_type": "log",
"_id": "i_KcuG0BqXIDjsCXkRD7",
"_version": 1,
"_score": null,
"_source": {
"@timestamp": "2019-10-11T02:18:51.776Z",
"lag": 0,
"topic": "discover_log-live",
"cluster": "live",
"client_id": "consumer-87",
"offset": 174482730,
"owner": "/172.22.212.34",
"partition_status": "",
"partition_count": 3,
"consumer_status": "OK",
"offset_time": 1570446792051,
"partition_no": 2,
"consumer": "discover_log-live-consumers"
},
"fields": {
"@timestamp": [
"2019-10-11T02:18:51.776Z"
]
},
"sort": [
1570760331776
]
}
상기 document는 kafka의 lag정보를 확인하기 위해 burrow라는 application으로부터 가져온 데이터이다. 상기와 같은 document를 그래프로 그릴 때 아래와 같은 조건에 따라 어떤 query를 적어야할지 정리해 보았다.
1) exactly same document value 조건
예를 들어 topic key에 discover_log-live라고 하는 value가 들어간 document만 그래프를 그리고 싶다면 아래와 같이 작성한다.
topic.keyword: "discover_log-live"
콜론 뒤에 쌍따옴표(")로 string을 묶어 표현하면 value가 상기 "discover_log-live" 와 동일한 데이터만 그래프로 보여줄 수 있다.
2) OR 조건
만약 topic key의 value가 discover_log-live 혹은 test_log-dev 두개 중 하나라도 존재하는 document에 대해 그래프를 그리고 싶다면 아래와 같이 작성한다.
topic.keyword: "discover_log-live" or topic.keyword: "test_log-dev"
3) AND 조건
만약 topic key의 value가 discover_log-live 이면서 partition_no의 value가 2인것에 대해 그래프를 그리고 힢다면 아래와 같이 작성한다.
topic.keyword: "discover_log-live" and partition_no.keyword: "2"
4) regex document value 조건
Grafana query에서 regex document로 value에 대한 값을 찾을 수도 있다. topic의 value에 live 혹은 alp라는 단어로 끝나는 값이 들어 있는 것만 찾고 싶다면 아래와 같이 regex문법을 사용할 수 있을 것이다.
topic.keyword: /.*[live|alp]/
'DevOps' 카테고리의 다른 글
aws centos6에서 grafana 빌드하기 (0) | 2020.08.20 |
---|---|
Grafana 알람 사용시 Image Renderer 사용 이슈 정리 (0) | 2019.12.09 |
넷플릭스에서 리눅스 퍼포먼스 체크하기(in 60초) (0) | 2019.08.27 |
Telegraf에서 system metric 수집하여 elasticsearch에 적재하기 (280) | 2019.08.09 |
Slack으로 process가 정상적으로 시작되었는지 나타내는 이쁜 메시지 만들기(Incoming webhook과 Attachment message 활용) (260) | 2019.06.21 |