Docker で Sensu + Graphite + Grafana 環境構築
監視環境を新規に構築するにあたり、上記構成で環境を構築したのでそのメモです。
まで、ふんわりできました。以下、作ったDockerfile群
- https://github.com/tomyhero/docker-sensu
- https://github.com/tomyhero/docker-sensu-dashboard-uchiwa
- https://github.com/tomyhero/docker-sensu-dashboard-graphite
- https://github.com/tomyhero/docker-grafana
以下が、セットアップ手順です。
手順1: graphiteのセットアップ
git clone https://github.com/tomyhero/docker-sensu-dashboard-graphite.git cd docker-sensu-dashboard-graphite docker build -t tomyhero/sensu-dashboard-graphite . docker run --name sensu-dashboard-graphite -it -d \ -v /opt/graphite/data:/app/graphite \ -p 10200:80 \ -p 2003:2003 \ -e "ROOT_USER_NAME=tomyhero" \ -e "ROOT_PASSWORD=mysecret" \ -e "ROOT_EMAIL=tomohiro.teranishi@gmail.com" \ tomyhero/sensu-dashboard-graphite bash
- hostの /opt/graphite/data 配下に永続データ(統計データ)の保存
- webを 10200 portでアクセスできるようにし、host側のnginxでproxyします
- 2003 port は carbon-cacheに対して、コマンドを送るため
手順2: sensuのセットアップ
get clone https://github.com/tomyhero/docker-sensu.git cd docker-sensu docker build -t tomyhero/sensu . docker run --name sensu -it -d \ -p 5672:5672 \ -p 4567:4567 \ -e GRAPHITE_HOST=$(docker inspect --format {{.NetworkSettings.IPAddress}} sensu-dashboard-graphite) \ -e "MAIL_TO=tomohiro.teranishi@gmail.com" \ -e "START_SENSU_CLIENT=false" \ -e "DASHBOARD_URL=http://uchiwa.localhost/" \ -e "ON_SENSU_HANDLER_NOTIFICATION_SLACK=true" \ -e "SLACK_WEBHOOK_URL=https://hooks.slack.com/services/XXXX/XXXXXXXXXXXXX" \ tomyhero/sensu bash
- 5672port は rabbitmq です
- 4567port は API用です
- $(docker inspect --format {{.NetworkSettings.IPAddress}} sensu-dashboard-graphite) graphiteのIPの出力
- sensu clientを起動するなら START_SENSU_CLIENT=true
- dashboard urlには あとででてくるuchiwaのURLを記載。
- ON_SENSU_HANDLER_NOTIFICATION_SLACK - slackへの通知を有効にする場合 true に
- SLACK_WEBHOOK_URL slackのwebhook urlを記載
- その他必要に応じての設定は、https://github.com/tomyhero/docker-sensu ドキュメントで確認。
手順3: uchiwaのセットアップ
git clone https://github.com/tomyhero/docker-sensu-dashboard-uchiwa.git cd docker-sensu-dashboard-uchiwa docker build -t tomyhero/sensu-dashboard-uchiwa . docker run --name=sensu-dashboard-uchiwa -it -d \ -p 11003:3000 \ -e="SENSU_HOST=sensu.localhost" \ tomyhero/sensu-dashboard-uchiwa
- 11003 portでwebにアクセス
手順4: grafanaのセットアップ
git clone https://github.com/tomyhero/docker-grafana.git cd docker-grafana docker build -t tomyhero/grafana . docker run --name grafana -it -d -p 13000:3000 \ -v /opt/grafana/data:/app/grafana \ -e "GRAFANA_ADMIN_USER=tomyhero" \ -e "GRAFANA_ADMIN_PASSWORD=secret" \ -e "GRAFANA_AUTH_BASIC_ENABLED=false" \ tomyhero/grafana bash
- hostの /opt/grafana/data 配下に、grafanaの設定データを保存
- GRAFANA_AUTH_BASIC_ENABLED は環境に応じて。。。
手順5: sensu clinent
centosの環境なら
wget -O https://raw.githubusercontent.com/tomyhero/docker-sensu/master/bin/client-install-centos.sh chmod 775 client-install-centos.sh ./client-install-centos.sh
/etc/sensu/config.json 作成。中身は自分で。
{ "rabbitmq": { "host": "localhost", "vhost": "/sensu", "user": "sensu", "password": "secret" } }
/etc/sensu/conf.d/client.json を作成。中身は自分で。
{ "client": { "name": "tool", "address": "localhost", "subscriptions": [ "basic","nginx","mysql" ] } }
起動
service sensu-client start tail -f /var/log/sensu/sensu-client.log
手順6: hostのnginx設定
upstream grafana { server localhost:13000; } upstream sensu { server localhost:11002; } upstream uchiwa { server localhost:11003; } upstream graphite { server localhost:11004; } // これと同じ感じを graphite,uchiwa,grafana でも用意 server { listen *:80; server_name sensu.localhost; access_log /var/log/nginx/sensu.localhost.access.log main; error_log /var/log/nginx/sensu.localhost.error.log; set_real_ip_from 10.0.0.0/8; real_ip_header X-Forwarded-For; location / { proxy_read_timeout 300; proxy_connect_timeout 300; proxy_redirect off; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header Host $http_host; proxy_set_header X-Real-IP $remote_addr; proxy_pass http://sensu; } }
まとめ
取り急ぎ、サーバの状態の把握、状態異常の通知を受け取る環境が、dockerで簡単に作れるようになった。
sensu clientが落ちた時の通知、sensu server等が落ちた時等にどうするんだとかも、そのうち考えないと。
あと、自分用品質のDockerfileなので、ちょいちょい変更が入りそう。