[Grafana] k6를 대시보드에 통합 (with InfluxDB)
부하테스트 도구인 k6를 Grafana 대시보드에 통합해서 모니터링할 수 있도록 구성하는 방법을 정리한다.
k6는 기본적으로 그럭저럭 봐줄만한 CLI UI를 가지고 있으며

웹 형태의 보고서 출력 기능도 제공한다.
https://blog.naver.com/sssang97/223523385158
이것만으로도 대충 파악하는데는 문제가 없으나, 좀 더 체계적이고 중앙화된 형태로 테스트 report들을 쌓고 관리하고 싶다면 grafana와의 통합을 고민해볼 수 있다.
그런데 아쉽게도 grafana 대시보드와의 공식적인 일체형 통합 오픈소스는 존재하지 않는다.
정확히 말하면 grafana cloud를 쓸 경우에는 완성형으로 제공해주는게 있는데, 오픈소스로는 조금 애매하다.
여기서는 influxdb 기반의 데이터 통합을 구성해보겠다.
k6 report를 influxDB에 저장하고, 그걸 그라파나로 보는 형태가 되겠다.
InfluxDB 구성
일단 저장소로 쓸 InfluxDB가 있어야 한다.
https://blog.naver.com/sssang97/223525737052
토큰도 잘 따서 보관해두자.
그리고 k6라는 버킷을 하나 팠다.

Grafana 데이터소스 구성
먼저 데이터소스를 구성한다.
아마 influx-influxdb2.default.svc.cluster.local 이런 식으로 될 것이다.
그리고 influx v2라면 아마 token으로 인증을 해야할 것이다.
헤더에 Authorization으로 Token {토큰값} 넣어주고 연결하면 된다.
Grafana 대시보드 구성
이번에는 데이터소스를 갖다가 대시보드를 만들어보자.
https://m.blog.naver.com/sssang97/223526937053

아무래도 웬만하면 그냥 남들이 만든거 갖다쓰는게 좋은데
https://grafana.com/grafana/dashboards/?dataSource=influxdb&search=k6
여기서 적당히 조건 걸고 찾아서 쓰면 된다. 이런건 취향도 갈리는 부분이 있어서 뭘 추천한다고는 못하겠다.
https://grafana.com/grafana/dashboards/10660-k6-load-testing-results/
난 그냥 앞에 보이는걸로다가 대충 골랐다.

로드하면 당연히 처음에는 비어있을 것이다.
k6로 데이터 전송
Grafana에서 k6 테스트 결과가 보이도록 하려면, k6가 실행될때마다 그 결과를 InfluxDB로 쏴줄 수 있도록 해야한다.
원래 k6 자체에 influxDB out 기능이 내장되어있었는데, influxDB가 v2 올라가면서 갖다버린건지 뭐가 잘 안맞더라. 그래서 k6->influxDB를 구성하려면 xk6라는 k6의 시험판?을 사용해야 한다.
go cli를 사용해서 적당히 깔아준다.
go install go.k6.io/xk6/cmd/xk6@latest
xk6 build --with github.com/grafana/xk6-output-influxdb

그럼 그냥 저걸 그대로 쓰든, /usr/bin에 박든 해서 쓰면 된다.
실행방법은 이렇다.
K6_INFLUXDB_TOKEN=토큰 \
K6_INFLUXDB_BUCKET=k6 \
K6_INFLUXDB_ADDR="http://...:80" \
K6_INFLUXDB_ORGANIZATION=? \
./k6 run foo.js -o xk6-influxdb
org ID는 influx에서 찾아오면 된다.

그리고 실행을 때리면
평소와 다름없이 실행을 할 것이고
대시보드에도 가시화가 될 것이다.
URL 필터도 되고 기본적인건 되더라.
그런데 이건 앵귤러 디펜던시가 있는 약간 레거시한 대시보드라 약간 삐걱거리는게 있었다.
https://grafana.com/grafana/dashboards/2587-k6-load-testing-results/
참조
https://grafana.com/grafana/dashboards/14801-k6-dashboard/
https://velog.io/@heka1024/Grafana-k6%EC%9C%BC%EB%A1%9C-%EB%B6%80%ED%95%98-%ED%85%8C%EC%8A%A4%ED%8A%B8%ED%95%98%EA%B8%B0
https://docs.influxdata.com/influxdb/cloud/admin/tokens/create-token/
https://k6.io/docs/get-started/results-output/