[OS X] influxdb, grafana 소스 build 및 자동 시작 Develop Tip

지난번에 "시계열 데이터 생성/저장/대시보드 ==> glances/InfluxDB/Grafana" 에서 살펴본 
것 처럼 유용한 Time-Series DB 및 대시보드가 있었는데요,
이번에는 이것을 맥에서 소스부터 build 시키고 시스템을 내렸다가 다시 올려도
해당 서비스가 떠 있는 서비스 등록까지 해 보겠습니다.


1) 필요 기본 작업

InfluxDB와 Grafana 모두 Go 언어를 이용합니다.
그리고 최신 버전 (모두 1.4.x 를 이용하라고 되어 있습니다)

따라서 Go 언어를 Mac 에서 설치하려면,

$ brew install go

라고 하면 1.5.2 가 설치되었습니다.
모두 이상없이 잘 설치됩니다.

그 다음에는 

$ vi ~/.bash_profile

파일을 열어
마지막에 다음 세 줄을 추가해 줍니다.

export GOPATH=$HOME/hostFS/TSDB
export GOBIN=$GOPATH/bin
export PATH=$PATH:$GOBIN

아래 작업은 모두 새 터미널을 열어 위에 환경 변수가 제대로 동작하고 있는 상황입니다.


2) InfluxDB 

2.1) build

$ cd $GOPATH
$ go get github.com/influxdb/influxdb
$ cd $GOPATH/src/github.com/influxdb
$ go get ./...
$ go install ./...

위와 같은 몇줄로 최신 소스를 git에서 받아오고 필요 패키지 설치하고
go로 build하고 deploy 까지 완료 합니다.

go 언어가 단순 언어뿐만 아니라 그런 환경 자체도 상당히 잘 되어 있군요.


2.2) 서비스 기동

$ sudo mkdir -p /opt/influxdb/log
$ sudo chown -R $USER:staff /opt/influxdb
$ influxd config > /opt/influxdb/influxdb.conf

/opt/influxdb/influxdb.conf 파일에서

[meta] 
그룹의
dir = "..."
부분을 
dir = "/opt/influxdb/meta"

[data] 
그룹의
dir = "..."
부분을 
dir = "/opt/influxdb/data"

[hinted-handoff]
그룹의
dir = "..."
부분을 
dir = "/opt/influxdb/hh"

로 해당 디렉터리들을 수정합니다.


그 다음

$ sudo vi /Library/LaunchDaemons/influxdb.plist
파일에 아래의 내용을 넣습니다.

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
  <dict>
    <key>KeepAlive</key>
    <dict>
      <key>SuccessfulExit</key>
      <false/>
    </dict>
    <key>Label</key>
    <string>com.tsdb.influxdb</string>
    <key>ProgramArguments</key>
    <array>
      <string>/Users/mcchae/hostFS/TSDB/bin/influxd</string>
      <string>-config</string>
 <string>/opt/influxdb/influxdb.conf</string>
    </array>
    <key>RunAtLoad</key>
    <true/>
    <key>WorkingDirectory</key>
<string>/opt/influxdb</string>
    <key>StandardErrorPath</key>
<string>/opt/influxdb/log/influxdb.log</string>
    <key>StandardOutPath</key>
<string>/opt/influxdb/log/influxdb.log</string>
    <key>SoftResourceLimits</key>
    <dict>
      <key>NumberOfFiles</key>
      <integer>10240</integer>
    </dict>
  </dict>
</plist>

위에서 /Users/mcchae/hostFS/TSDB 대신 $GOPATH 의 내용을 넣으면 됩니다.

마지막으로 서비스로 등록합니다.

$ sudo launchctl load /Library/LaunchDaemons/influxdb.plist

만약 $HOME/Library/LaunchAgents 에 동일하게 넣고 launchctl 을 등록시키면
자신의 사용자로 로그인 해야만 기동되고 위와 같이 /Library/LaunchDaemons 에 넣으면
시스템이 처음 기동될 때 동작합니다.

이제는 시스템을 재기동 시켜도 다시 서비스에 등록 되어 시계열 DB인 InfluxDB가 서비스로 동작합니다.

해당 로그는
$ tail -F /opt/influxdb/log/influxdb.log
라는 명령으로 확인할 수 있습니다.


2) Grafana


2.1) build

$ cd $GOPATH
$ go get github.com/grafana/grafana
$ cd $GOPATH/src/github.com/grafana/grafana
$ go run build.go setup
$ GOPATH/bin/godep restore
$ go run build.go build

와 같이 Grafana 엔진의 설치를 모두 끝냅니다.

그런데 Grafana는 UI가 있는 Dashboard 입니다. 따라서
Presentation 부분이 필요한데 이 부분은 npm 모듈로 설치합니다.

$ cd $GOPATH/src/github.com/grafana/grafana
$ npm install
$ npm install -g grunt-cli
$ grunt

위와 같이 하여 설치 가능합니다.
(중간에 NPM install시 오류가 있었는데 한번 더 실행하여 설치 되었습니다)

그리고 만약 소스가 변경되면 아래의 명령을 수행합니다.

$ go get github.com/Unknwon/bra
$ bra run


2.2) 서비스 기동

$ sudo mkdir -p /opt/grafana/log
$ sudo chown -R $USER:staff /opt/grafana
$ cd $GOPATH/src/github.com/grafana/grafana

$ sudo vi /Library/LaunchDaemons/grafana.plist
파일에 아래의 내용을 넣습니다.

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
  <dict>
    <key>KeepAlive</key>
    <dict>
      <key>SuccessfulExit</key>
      <false/>
    </dict>
    <key>Label</key>
    <string>com.tsdb.grafana</string>
    <key>ProgramArguments</key>
    <array>
      <string>/Users/mcchae/hostFS/TSDB/src/github.com/grafana/grafana/bin/grafana-server</string>
    </array>
    <key>RunAtLoad</key>
    <true/>
    <key>WorkingDirectory</key>
<string>/Users/mcchae/hostFS/TSDB/src/github.com/grafana/grafana</string>
    <key>StandardErrorPath</key>
<string>/opt/grafana/log/grafana.log</string>
    <key>StandardOutPath</key>
<string>/opt/grafana/log/grafana.log</string>
    <key>SoftResourceLimits</key>
    <dict>
      <key>NumberOfFiles</key>
      <integer>10240</integer>
    </dict>
  </dict>
</plist>

위에서 /Users/mcchae/hostFS/TSDB 대신 $GOPATH 의 내용을 넣으면 됩니다.
ProgramArguments/string 과 WorkingDirectory 부분 입니다.

마지막으로 서비스로 등록합니다.

$ sudo launchctl load /Library/LaunchDaemons/grafana.plist

이렇게 하면 InfluxDB와 더불어 grafana 까지 모두 동작을 합니다.


어느분께는 도움이 되셨기를...


덧글

댓글 입력 영역

구글애드텍스트