データ可視化アプリの新星、PrometheusをCentOSにインストールする方法
SoundCloudが内製しているモニタリングシステム「Prometheus」がいま気になっております。
時系列データベースを用いた柔軟なクエリ言語を用い、ダッシュボードによる可視化やアラート機能もあるそうです。
とりあえず使ってみたので、紹介します。
環境
- CentOS 6
インストール
このドキュメントに従い、進めていきます。
http://prometheus.io/docs/introduction/getting_started/
git clone
$ cd /usr/local/src/ $ sudo git clone https://github.com/prometheus/prometheus.git Initialized empty Git repository in /usr/local/src/prometheus/.git/ remote: Counting objects: 11061, done. remote: Compressing objects: 100% (7/7), done. remote: Total 11061 (delta 0), reused 0 (delta 0) Receiving objects: 100% (11061/11061), 4.73 MiB | 989 KiB/s, done. Resolving deltas: 100% (5957/5957), done. $ cd prometheus/
make build
$ make build curl -o /usr/local/src/prometheus/.build/cache/go1.4.linux-amd64.tar.gz -L https://golang.org/dl/go1.4.linux-amd64.tar.gz % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 0 85 0 85 0 0 217 0 --:--:-- --:--:-- --:--:-- 418Warning: Failed to create the file Warning: /usr/local/src/prometheus/.build/cache/go1.4.linux-amd64.tar.gz 0 60.3M 0 735 0 0 871 0 20:11:03 --:--:-- 20:11:03 871 curl: (23) Failed writing body (0 != 735) make: *** [/usr/local/src/prometheus/.build/cache/go1.4.linux-amd64.tar.gz] Error 23
sudoを付けて再実行します。
$ sudo make build curl -o /.build/cache/go1.4.linux-amd64.tar.gz -L https://golang.org/dl/go1.4.linux-amd64.tar.gz % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 0 85 0 85 0 0 234 0 --:--:-- --:--:-- --:--:-- 416Warning: Failed to create the file /.build/cache/go1.4.linux-amd64.tar.gz 0 60.3M 0 735 0 0 835 0 21:03:16 --:--:-- 21:03:16 835 curl: (23) Failed writing body (0 != 735) make: *** [/.build/cache/go1.4.linux-amd64.tar.gz] Error 23
おっとこれはsudo経由での実行は意識されていないようです。
shコマンドの引数として実行してみましょう。
$ sudo sh -c "make build" curl -o /usr/local/src/prometheus/.build/cache/go1.4.linux-amd64.tar.gz -L https://golang.org/dl/go1.4.linux-amd64.tar.gz % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 60.3M 100 60.3M 0 0 13.9M 0 0:00:04 0:00:04 --:--:-- 21.9M [ -d "/usr/local/src/prometheus/.build/root/gopath/src/github.com/prometheus/prometheus" ] || { mkdir -vp /usr/local/src/prometheus/.build/root/gopath/src/github.com/prometheus ; ln -s "/usr/local/src/prometheus" "/usr/local/src/prometheus/.build/root/gopath/src/github.com/prometheus/prometheus" ; } mkdir: created directory `/usr/local/src/prometheus/.build/root/gopath' mkdir: created directory `/usr/local/src/prometheus/.build/root/gopath/src' mkdir: created directory `/usr/local/src/prometheus/.build/root/gopath/src/github.com' mkdir: created directory `/usr/local/src/prometheus/.build/root/gopath/src/github.com/prometheus' [ -d "/usr/local/src/prometheus/.build/root/gopath/src/github.com/prometheus/prometheus" ] tar -C /usr/local/src/prometheus/.build/root -xzf /usr/local/src/prometheus/.build/cache/go1.4.linux-amd64.tar.gz touch /usr/local/src/prometheus/.build/root/go/bin/go TMPDIR=/tmp GOROOT=/usr/local/src/prometheus/.build/root/go GOPATH=/usr/local/src/prometheus/.build/root/gopath /usr/local/src/prometheus/.build/root/go/bin/go get github.com/tools/godep TMPDIR=/tmp GOROOT=/usr/local/src/prometheus/.build/root/go GOPATH=/usr/local/src/prometheus/.build/root/gopath /usr/local/src/prometheus/.build/root/gopath/bin/godep restore go: missing Mercurial command. See http://golang.org/s/gogetcmd package code.google.com/p/goprotobuf/proto: exec: "hg": executable file not found in $PATH godep: restore: exit status 1 go: missing Mercurial command. See http://golang.org/s/gogetcmd package github.com/matttproud/golang_protobuf_extensions/ext imports code.google.com/p/goprotobuf/proto: exec: "hg": executable file not found in $PATH godep: restore: exit status 1 make: *** [dependencies] Error 1
hgコマンドが必要とのこと。mercurialをインストールします。
$ sudo yum -y install mercurial
次は、エラーを起こさずに実行できました。
$ sudo sh -c "make build" TMPDIR=/tmp GOROOT=/usr/local/src/prometheus/.build/root/go GOPATH=/usr/local/src/prometheus/.build/root/gopath /usr/local/src/prometheus/.build/root/go/bin/go get github.com/tools/godep TMPDIR=/tmp GOROOT=/usr/local/src/prometheus/.build/root/go GOPATH=/usr/local/src/prometheus/.build/root/gopath /usr/local/src/prometheus/.build/root/gopath/bin/godep restore TMPDIR=/tmp GOROOT=/usr/local/src/prometheus/.build/root/go GOPATH=/usr/local/src/prometheus/.build/root/gopath /usr/local/src/prometheus/.build/root/go/bin/go get -d make -C config make[1]: Entering directory `/usr/local/src/prometheus/config' make[1]: Nothing to be done for `all'. make[1]: Leaving directory `/usr/local/src/prometheus/config' make -C tools make[1]: Entering directory `/usr/local/src/prometheus/tools' make -C rule_checker make[2]: Entering directory `/usr/local/src/prometheus/tools/rule_checker' TMPDIR=/tmp GOROOT=/usr/local/src/prometheus/.build/root/go GOPATH=/usr/local/src/prometheus/.build/root/gopath /usr/local/src/prometheus/.build/root/go/bin/go build -o rule_checker . make[2]: Leaving directory `/usr/local/src/prometheus/tools/rule_checker' make[1]: Leaving directory `/usr/local/src/prometheus/tools' make -C web make[1]: Entering directory `/usr/local/src/prometheus/web' # Note that embed-static.sh excludes map files and the # non-minified bootstrap files. ../utility/embed-static.sh static templates | /usr/local/src/prometheus/.build/root/go/bin/gofmt > blob/files.go make[1]: Leaving directory `/usr/local/src/prometheus/web' TMPDIR=/tmp GOROOT=/usr/local/src/prometheus/.build/root/go GOPATH=/usr/local/src/prometheus/.build/root/gopath /usr/local/src/prometheus/.build/root/go/bin/go build -o prometheus -ldflags " -X main.buildVersion 0.10.0 -X main.buildRevision 982923f -X main.buildBranch master -X main.buildUser root@vm-local -X main.buildDate 20150205-18:56:43 -X main.goVersion 1.4" .
設定ファイルの作成
例に従い、次の内容の設定ファイルをprometheus.conf
として作成しました。
# Global default settings. global: { scrape_interval: "15s" # By default, scrape targets every 15 seconds. evaluation_interval: "15s" # By default, evaluate rules every 15 seconds. # Attach these extra labels to all time series collected by this Prometheus instance. labels: { label: { name: "monitor" value: "tutorial-monitor" } } } # A job definition containing exactly one endpoint to scrape: Prometheus itself. job: { # The job name is added as a label `job={job-name}` to any time series scraped from this job. name: "prometheus" # Override the global default and scrape targets from this job every 5 seconds. scrape_interval: "5s" # Let's define a group of static targets to scrape for this job. In this # case, only one. target_group: { # These endpoints are scraped via HTTP. target: "http://localhost:9090/metrics" } }
起動
先ほどの設定ファイルの他、storage.local.path
でメトリクスデータを保存する先を指定して起動します。
$ ./prometheus -config.file=prometheus.conf -storage.local.path=/tmp/prometheus-metrics prometheus, version 0.10.0 (branch: master, revision: 982923f) build user: root@vms-local build date: 20150205-18:56:43 go version: 1.4
ブラウザで確認
初期起動画面はこのような感じでした。
データがまだないので、何か入れて見たいと思います。
http://your-host:9090/
にアクセスすると、status画面が表示されました。
http://your-host:9090/metrics
にアクセスすると、そのホストで保持しているメトリクス情報が出力されました。
http://your-host:9090/alerts
にアクセスすると、アラート情報があれば表示されるようです。
http://your-host:9090/graph
にアクセスすると、グラフを追加出来るようになっておりました。
データが無いので何とも言えませんが、割と気軽に始められました。
Fluentdとの連携など、引き続き検証を進めていきたいと思います。