오픈소스 Grafana와 InfluxDB를 활용한 서버 모니터링
왜 쓰는가?
서버의 리소스 (CPU 사용량 및 메모리 사용량)이나 웹 사이트 URL의 호출 횟수, 응답시간 등 서버 개발자가 실시간 모니터링해야 하는 자원을 쉽게 모아서 실시간으로 보여줄 수 있다.
간단한 사용 후기로는 Grafana가 그래프를 그려주는게 InfluxDB에 있는 데이터를 가져와서 그려준다. 그릴 데이터를 sql 쿼리로 가져온다. 신기하다!! 물론 DB는 InfluxDB외에도 다른 Plugin을 통해 가져올 수 있다.
Grafana는?
서버 모니터링 대시보드 오픈소스. 이런식으로 그려준다.!
얼마나 아름다운가!
시간대 별로. DB에서 사용자 쿼리에 의해 얻어진 데이터로 자동으로 그려준다.
Go와 Nodejs 디펜던시를 갖고있다.
InfluxDB는?
시계열(Time-series) DB. 시계열 데이터란 시간의 흐름에 따라 저장하는 데이터로 서버 환경에서 각종 지표를 수집하는 목적으로 사용한다. http protocol을 이용해 외부에서 제어도 가능하며 표준 SQL을 통해 데이터를 다룰 수 있다.
시작은 설치로부터!
Grafana 설치
- centos6 기준으로 설치한 내용입니다. 모든 설치는 패키지를 사용하지 않고 portable로 진행합니다.
Go 디펜던시 설치
go 다운로드 페이지
서버환경에 맞는 tar.gz 파일을 받고 tar로 압축을 해제한다.
GOPATH와 GOROOT 환경변수를 설정해야합니다.
GOPATH는 GO에서 받는 데이터를 보관할 장소. ~/grafana 를 만들고 이곳으로 설정했습니다.
GOROOT는 다운받은 go의 홈디렉토리입니다.
/.bashrc 에 다음과 같은 내용을 추가합니다.
export GOPATH='/{home}/{username}/grafana'
export GOROOT='/{다운 받은 go 위치}'
그리고 수정한 .bashrc를 적용합니다.
source .bashrc
그 후 grafana source 를 다운로드합니다.
go get github.com/grafana/grafana
그러면 $GOPATH에 grafana 디렉토리가 생긴 것을 볼 수 있습니다.
이어서 grafana를 설치하기 전에 nodejs를 설치합니다.
nodejs 디펜던시 설치
위 링크에서 nodejs를 다운받습니다. 최신 버전도 많이 나왔지만 저는 4.7사용.. 서버도 옛날꺼고..파이썬도 옛날거고…. node만 최신이면 꼬일것 같은 기분!
node도 환경변수로 등록해서 터미널에서 node를 입력했을 때 node 가 바로 실행되어야 합니다.
이제 진짜 grafana 설치
일단 go를 이용해 grafana를 받은 위치로 이동하고 설치를 시작합니다.
cd $GOPATH/src/github.com/grafana/grafana
go run build.go setup
go run build.go build
이제 여기까지 grafana의 설치가 끝났습니다!!!는 Back-end만.. 이대로 실행하면 Front-end 와장창
이제 grunt로 Front-end를 가져옵니다.
npm install -g yarn
yarn install --pure-lockfile
npm install -g grunt-cli
grunt
이제 진짜 설치 끝!!!
grafana 디렉토리의 ./bin/grafana-server 를 실행시킵니다.
그러면 기본적으로 3000번 포트로 구동되며. http://localhost:3000 로 접근해서 확인할 수 있습니다. 일단 다른 프로그램이 3000번을 잡고있으면 안된다!
정말 설치만 하고 실행했다. 설정파일을 통해 admin 계정 등 보안을 위해 많은 설정이 필요하다
InfluxDB 설치
이제 데이터를 예쁘게 그려줄 대쉬보드를 설치했으니 데이터를 저장할 DB를 설치해야한다.
wget https://dl.influxdata.com/influxdb/releases/influxdb-1.2.0_linux_amd64.tar.gz
tar xvfz influxdb-1.2.0_linux_amd64.tar.gz
2017-03-03일 기준이므로
https://portal.influxdata.com/downloads#influxdb
에서 최신버전을 확인하고 설치하는 것을 추천. Standalone 으로!!!!
다운로드가 완료되면 influxdb 하위 ./usr/bin 의 influxd를 실행한다
influxd 가 influxDB 데몬이며 influx 는 influxDB 의 cli 클라이언트다.
Grafana와 InfluxDB 연동하기
가장 어려운 부분이었다.
Grafana 페이지. localhost:3000 에서 설정한다. 로그인을 해야한다면 기본 id는 admin, 기본 pw도 admin 이다.
이제 Grafana 페이지의 DataSource메뉴에서 InfluxDB를 연결한다.
ip와 포트를 연결하고 Save&Test 버튼을 누른다. 연결이 되었는지 안되었는지는 알려준다!!
초록불이 뜰때까지 정보들을 맞게 수정한다!!
Grafana에서 그래프 그리기
쉽다.
- Dashboard 추가.
- 그래프 추가
- 각 축에 쿼리문 작성
TIP. add query로 쿼리 추가해서 막 블록형태로 쿼리를 만든다.. 이거 쓰지말자.. 잘 안된다.
쿼리 쓰는데 옆에보면 햄버거 버튼이 있다. Toggle custom query를 통해 직접 query를 작성하자.
이렇게 해서 나온 내 서비스의 모니터링 페이지!!
후기
Grafana와 InfluxDB를 설치하고 그래프를 그리기까지 2~3일 삽질은 해야하지 않을까 생각했었다. 둘 다 처음사용해보는데다가 디펜던시가 몇가지 있어서 어디선가 터질꺼라 생각했다..! But 설치까지는 1시간만에 끝나버렸다..
문제는 설치보다 grafana 대시보드 구성과 시계열 데이터에 대한 이해! sql 을 이용해 그래프를 그린다는게 생각하기 힘들었다. 또 시계열 데이터를 어떻게 그려야 원하는 그래프가 나오는지 어렵다 ㅠㅜ.
grafana에 아쉬운점은 그래프 Scale 을 조절하기 힘들다는 것! 마우스를 이용해 끄적끄적하면 그래프도 좌우로 이동되고 Zoom in out도 되면 좋겠다!!!!
있는 기능인데 발견을 못한 것일수도!
좀 더 능숙하게 쓸 수 있도록 이것저것 해봐야겠다