#elixirlang 웹 프레임워크 phoenix를 쓰지 않은 애플리케이션에 프로메테우스(prometheus) 붙이기

1 minute read

phoenix 웹 프레임워크는 지표(metrics) 내보내기를 쉽게 할 수 있는 prometheus_plugs 패키지가 있어서 쉽게 프로메테우스 연동을 했다. slack 봇인 slab은 어떻게 프로메테우스를 연동할 수 있을까? phoenix 웹 프레임워크를 쓰지 않은 애플리케이션이다.

웹서버를 띄운다, commit f0ae55ccca

:prometheus_httpd.start()

prometheus_httpd 패키지를 추가한 후, 호출한다.

nil

nil 주소로 방문하면 프로메테우스 포맷으로 출력한 지표를 볼 수 있다.

docker compose 사용, commit 4af23e0f00

slab, 프로메테우스, 그라파나(grafana)를 docker compose로 실행한다. 프로메테우스 데이터 volume을 마운트해서 지표 데이터를 유지할 수 있게 했다.

프로세스 콜렉터 설치, commit 883c9b8971

nil

Prometheus.Registry.register_collector(:prometheus_process_collector)

prometheus_process_collector 패키지를 추가하고 콜렉터로 등록한다. 등록하면 uptime, os process memory, native threads & CPU 정보가 보인다. linux만 지원한다.

카운터(Counter) 타입 지표 추가, commit 545f834be3

여기서부터 조금 힘들었다. 어디에 지표를 추가해야 하나? 관리하고 싶은 걸 추가하면 된다. slab은 관리하고 싶은 게 없다. 그래서 있어 보이는 지표를 수집하고 출력하는데, 중점을 뒀다. slack input 종류를 나눌 수 있어서 카운터 타입 지표로 추가했다. 명령, issue 프리뷰, merge request 프리뷰, 그 외. 이렇게 나눠서 지표 출력한다.

요약(Summary) 타입 지표 추가, commit a33e7043e7

gitlab request 개수와 응답 시간(response time)을 측정했다. 이름에 단위를 유추할 수 있는 단어가 들어가면 단위 변경을 한다. 원하는 대로 안 돼서 duration_unit 값을 false로 할당하고 직접 조작했다.

참고