사내 검색 시스템에서 지연이 발생한 시점의 검색 키워드를 추출해야 하는 상황이 있었다. 검색 시스템의 경우 Nginx 로그를 검색 엔진에 저장하고 있었기에, “Grafana에 굳이 추가를 해야 할까?” 라는 고민이 있었지만, 위 정보만으로는 어떤 검색 키워드에 의해 오류가 발생했는지를 알 수 없었기에, 추후 알림 설정이나 빠른 피드백을 위해 해당 지표를 대시보드에 추가해야 겠다는 결론을 내렸다.
01. Grafana 대시보드 추가
01-1. Grafana Add Panel 후 Table 패널 생성



우선 Grafana 상의 Add Panel 버튼을 클릭 후 Add a new panel 버튼을 선택한다. 그러면 다음과 같은 위와 같은 화면이 출력된다. 후에, 우측 상단의 패널 타입은 Table을 선택하고 좌측 하단의 Data Source는 참조할 데이터인 ES의 Data Source를 지정한다.
01-2. Grafana Query 지정
status:[400 TO 504] AND request_time:[3 TO *]
필자의 경우 Status가 200이 아니고, request_time(App Server → Nginx → API → ES 총 시간)이 3초 이상인 경우에 대해서만 메트릭을 추출하고자 하기에, 위와 같이 쿼리를 설정한다. 위 쿼리는 HTTP Status가 400 - 504 사이이고, 시간이 3초 이상인 경우만을 추출하는 쿼리다. 또한, Metric 옵션은 Logs로 지정하고 Limit은 500로 설정한다.
01-3. Transform

쿼리를 설정하였으니 이제 Transform을 통해 조회하고자 하는 필드만 선택을 할 것이다. 또한, request_body 필드의 경우 JSON 형태({key: A, value: A})로 지정이 되었기에 2가지 옵션(Extract fields, Organize fields)을 추가해야 한다.

이미지와 같이 먼저 Extract fields를 설정한다. Source는 추출을 원하는 필드명(request_body)을 지정하고, Format은 해당 필드의 데이터 타입(JSON, key-value text, auto)을 지정하는 것이다. 또한, Replace all fields 옵션은 추출된 필드만 남길지, 아니면 기존 필드에 더하여 추출된 필드를 보여줄지 지정하는 옵션이다.
01-4. Organize fields

마지막으로 Organize fields 옵션을 추가한다. 해당 옵션을 통해 특정 필드의 값만 확인할 수 있다.
01-5. 최종 결과

최종적으로 적용된 Grafana 대시보드의 구성은 위와 같이 나올 것이다.
99. 참고 자료
Transform data | Grafana documentation
Getting started with managing your metrics, logs, and traces using Grafana In this webinar, we’ll demo how to get started using the LGTM Stack: Loki for logs, Grafana for visualization, Tempo for traces, and Mimir for metrics.
grafana.com