ãã®ã¨ãã«ãã£ãå¯è¦åé¨åã®è©±ãæ¥ãã§ä½ã£ãã®ã§ããããéãªé¨åãå¤ãã
開発合宿でDockerとMesosを使っていい感じにリソース提供とデプロイするやつを作ってた - wtatsuru's blog
ã¯ããã«
å
ã®ãã¤ããå
鍿
å ±ãåã£ããµã³ãã«ãç½®ãã¦ããã¾ããé©å½ã«ãµã¼ãåãªã©ä¿®æ£ããã°ä½¿ããããããã¾ããã
https://github.com/tatsuru/docker-sample-app
å
¨ä½ã®ä»çµã¿ã«ã¤ãã¦ã¯ããã®å³ãããããããã¨æãã¾ã
Docker + Mesos + Marathon + Graphite + Fluentd + Sensuを組み合わせたデプロイ管理ツールの話 - ゆううきブログ
ãããããã¨
- ç®çã¯ã¢ããªã±ã¼ã·ã§ã³ã®ç¾ç¶ã俯ç°ã§ããããã·ã¥ãã¼ããä½ããã¨ã
- ããããã®Dockerã³ã³ããã¯çå½ãªã®ã§ãä¸è¨ã®æ å ±ããã¾ãéç´ãã¦ããå¿ è¦ãããã
- ã¬ã¤ãã³ã·ã¨HTTPã¬ã¹ãã³ã¹ã®å¥å ¨æ§ãå ¨ä½ã®ãã°ãéããå¿ è¦ãããã
- CPUãã¡ã¢ãªä½¿ç¨çã®æ¨ç§»ãã³ã³ãããã¨ã»ã¢ããªã±ã¼ã·ã§ã³ã®ãã¼ã¸ã§ã³ãã¨ã«è¦ããã
Graphite
Graphite - Scalable Realtime Graphing - Graphite
å¯è¦åã¯æå Growthforecast ãããã§ããã¤ããã§ãããã©ãã¡ã³ãã¼ã®ä¸äººãã以ä¸ã®ãããªçºè¨ãåºããã Graphite ã使ããã¨ã«ã
2013-12-14 18:04:30 y_uuki RRDtoolã°ã©ãã¿ãããªã
Graphite ã®ããã¥ã¡ã³ãã¯ãã£ã¡ãææ°ãããã®ã§æ³¨æã
Graphite Documentation — Graphite 0.9.10 documentation
ã°ã©ã㯠'.' åºåãã®é層æ§é ã§è¡¨ç¾ããã¦ãã¦ãããããæãã§éãã¤ããã ãã§ããæ°è»½ã«ä½¿ããã
PORT=2003
SERVER=graphite.your.org
echo "local.random.diceroll 4 `date +%s`" | nc -q0 ${SERVER} ${PORT}ããã§ Graphite ã® "local.random.diceroll" ã«å ¥ãã
æ¸å¼ã Sensu plugin ã®å½¢ã¨åãï¼ï¼ï¼ãªã®ã§ãSensu å´ã§éãã®ãç°¡å
"handlers": {
"graphite": {
"type": "tcp",
"socket": {
"host": "graphite.example.com",
"port": 2003
},
"mutator": "only_check_output"
}
}
Sensu ã§éã£ã¦å¯è¦å
- å ¨é¨ fluentd ã§ãããã¨ããã¨ãã¡ããªã¯ã¹ã¾ãããé¢åã«ãªã£ã¦ãã
- Sensu Plugin ã ã¨æ¨æºåºåã«æ°åãåºãã ãã§å ¥ãããã¦ãæè»½ãã¡ããªã¯ã¹ã¯ã¾ãããã§éãã¦ã¿ã
- Docker ã®ã¡ããªã¯ã¹ãéãå ´åãã©ã®ãã¹ãããã»ã©ã®ãã¼ã¸ã§ã³ã®ã¢ããªããéãããã®ããã¨ããæ å ±ã§é層åãã¦ãããã
- Marathon ä¸ã®ã¸ã§ãåã docker run ã®æã«ç°å¢å¤æ°ã§æ¸¡ããèµ·åæã« Sensu ã®ãã¹ãåã¨ãã¦çæãã
- ãã®ã¸ã https://github.com/tatsuru/docker-sample-app/blob/master/sensu/run
- ã¸ã§ãåã«ãã¼ã¸ã§ã³ãå ¥ãã¦ãã Sampleapp-14_1-1387677685b
- sensu plugin ã®è¨å®ã§ :::name::: ã¨æ¸ã㨠sensu client åãæ¸¡ãããï¼ãã®è¨å®ãæ¢ãã®ã«è¦å´ãã...ï¼
- ãã¨ã¯ã¢ããªã¨ä¸ç·ã«ã¾ã¨ã㦠supervisord ã§èµ·å https://github.com/tatsuru/docker-sample-app/blob/master/supervisor/supervisord.conf
- Sensu client ãã©ãã©ãä½ããã¦åé¤ããå¦çããã¦ãªãã®ã§ãã¯ã©ã¤ã¢ã³ãæ°ãççºã㦠keep-alive å¦çã§è² è·ãé«ã
ã³ã³ããåä½ã®è² è·ã親ããã¨ã
- docker ã¯æè©® lxc ã³ã³ããå
ãªã®ã§ãã³ã³ããåä½ã®ãåå¾ããã®ã¯è¦ªãã¹ãããåå¾ããã¨ãã (åèï¼http://blog.docker.io/2013/10/gathering-lxc-docker-containers-metrics/)
- cgroup ãã¨ã«åå¾ããè¦é ã§
- ã¨ããããã§é©å½ã« plugin ä½ã£ã¦ docker ãã¹ãã«ä»è¾¼ãã
- https://github.com/tatsuru/docker-sample-app/blob/master/sensu/plugins/docker-container-metrics.rb
- ãããããã¡ã¤ã«ããåãã /path/to/cgroup/lxc/$container/cpuacct.stat
- è§£éã¯é©å½ã«ãã®ã¸ãã§
éè¨ã¯ Fluentd
- ã¬ã¹ãã³ã¹ãã¨ã©ã¼ã®éè¨å¦ç㯠sensu ã§ã¯é£ããããªã®ã§ãã£ã±ã fluentd ã§
- ã¢ããªãµã¼ãããã¯è»¢éããã ã https://github.com/tatsuru/docker-sample-app/blob/master/fluentd/config/app_server.conf
- ã¹ãã¼ã¿ã¹ã³ã¼ãã¨ã¬ã¤ãã³ã·ã®éè¨ã¯ fluent-plugin-datacounter ã§ãã¨ã©ã¼ã¬ã¼ã㯠flowcounter ã§æ°ãããããã
- fluentd åãè¶³ããªã㦠fluent-plugin-graphite ã«ããæãã«æ¸¡ãã®ãé£ããã£ãã®ã§ãã©ã°ã¤ã³å´ãããã£ã
Graphite ã§æã
é©åã«åå空éãåãã¦ããã° Graphite ã®ã°ã©ãã並ã¹ã¦dashboardãä½ãã¾ãï¼æ¬ç©ã¯è¦ããããªãã®ã§ã¹ã¯ã·ã§ã¨ xslate ã®ãã³ãã¬ã¼ãã ãããï¼
ããããåå空éã«ãã¦ã¿ã
- Sampleapp.{accesslog,errorlog} 以ä¸ã«ã¢ããªå ¨ä½ã®ã¢ã¯ã»ã¹ãã°ã»ã¨ã©ã¼ãã°ã®éè¨çµæ
- Sampleapp.sampleapp-$version.$container 以ä¸ã«åã³ã³ããããéè¨ããã¡ããªã¯ã¹
- docker.$dockerhost.sampleapp-$version.$container.{memory,cpu}.stat. 以ä¸ã« docker ãã¹ãããéè¨ããã¡ããªã¯ã¹
- Graphite ã® glob ã ã£ããåç¨®è¨æ³ã便å©
- ï¼whisperã ã¨ï¼ï¼ãã¡ã¤ã«ã·ã¹ãã ä¸ã®ãã¡ã¤ã«ã«ãã®ã¾ã¾ãããã³ã°ãããã®ã§ããã®èª¿åã§ã¬ã³ã¬ã³ä½ãã¨ãã®ãã¡ç ´ç¶»ãããã
å ¨ä½ã®dashboard

<p>
<img src="http://graphite.example.com/render?width=350&from=-1hours&until=now&height=250&areaMode=stacked&target=[% ucfirst(service.name) %].accesslog.counts.app.*xx_count&title=Accesses" alt="accesses" />
<img src="http://graphite.example.com/render?width=350&from=-1hours&until=now&height=250&areaMode=stacked&target=[% ucfirst(service.name) %].accesslog.gauges.app.access_*xx_percentage&yMax=100&title=HTTP%20Status%20Code" alt="http status code"/>
<img src="http://graphite.example.com/render/?width=350&height=250&target=[% ucfirst(service.name) %].errorlog.gauges.count&lineMode=connected&from=-1hours&title=Errors&hideLegend=true" alt="errors"/>
</p>
<p>
<img src="http://graphite.example.com/render?width=350&from=-1hours&until=now&height=250&areaMode=stacked&target=[% ucfirst(service.name) %].accesslog.gauges.app.access_0-100msec_percentage&target=[% ucfirst(service.name) %].accesslog.gauges.app.access_100-200msec_percentage&target=[% ucfirst(service.name) %].accesslog.gauges.app.access_200-500msec_percentage&target=[% ucfirst(service.name) %].accesslog.gauges.app.access_500msec-1sec_percentage&target=[% ucfirst(service.name) %].accesslog.gauges.app.access_1sec_over_percentage&yMax=100&title=Latency" alt="latency"/>
<img src="http://graphite.example.com/render/?width=350&height=250&lineMode=connected&from=-1hours&target=[% ucfirst(service.name) %].[% service.name %]-*.*.load_avg.five&drawNullAsZero=true&hideLegend=true&title=Loadavg5" />
<img src="http://graphite.example.com/render/?width=350&height=250&from=-1hours&target=docker.*.[% service.name %]-*.*.memory.stat.total_rss&drawNullAsZero=true&title=Memory%20Usage(RSS)" alt="memory usage" />
</p>
åãã¼ã¸ã§ã³ãã¨ã«

<img src="http://graphite.example.com/render/?width=400&height=200&from=-1hours&target=scale(derivative(docker.*.[% service.name %]-[% deploy_version.id %].*.cpuacct.stat.user)%2C0.01)&drawNullAsZero=true&title=CPU%20Usage" />
<img src="http://graphite.example.com/render/?width=400&height=200&from=-1hours&target=docker.*.[% service.name %]-[% deploy_version.id %].*.memory.stat.total_rss&drawNullAsZero=true&title=Memory%20Usage" />
ã¾ã¨ã
- docker ã§ç«ã¦ãã¢ããªã sensu, fluentd ãã graphite ã«éã£ã¦ããæãã«å¯è¦åãããã¤ãä½ã£ã¦ã¿ã
- Dockerã³ã³ãããä½ã£ã¦å£ãç°å¢ã ã¨ãä¸å¤®ã§é©åã«ã¯ã©ã¤ã¢ã³ã管çããªãã¨ããã«ç ´ç¶»ããã
- Sensu Plugin ã§ã¡ããªã¯ã¹ãéãã®ã¯ä¾¿å©ã ããã¯ã©ã¤ã¢ã³ãä¸è¦§ã¯ç ´ç¶»ãã
- Graphite ãã* ã§ããããã¡ã¯ãããããããæ°ãå¢ããã¨ã¤ãããªããã
- 忣ã®ä»çµã¿ããããããã³ããã¼ã¯ã¯ååããã£ã¦ãã®ã§æå¾ ãã¦ã¾ã
- éç´ããå¦çãå ¥ã㨠Fluentd ã§éãã¦ããã£ã¨å¦çããã®ã便å©ã ã£ã
- Fluentd, Sensu 2ã¤ãåããããã¯ãªãã®ã§ãã©ã¡ããã«ä¸æ¬åããã
- ç£è¦ã¾ã§ãããªã Sensu ã§ããã£ã¨ããã¨ä¾¿å©ãã
- sensu plugin ã®åºåã fluentd/graphite ã«ããæãã«æ¸¡ãä»çµã¿ãä½ãã°ããããï¼
- Graphite ã®è¨æ³ã便å©ã§æ¥½ãã
- ããã¾ã§ glob ãªã®ã§ãGROUP BY çãªãã®ãªã©æ©è½ä¸è¶³ã¯å¦ããªããdashboardå´ã§ãã³ãã¬ã¼ãããçæãããªã©ã®å·¥å¤«ã¯å¿ è¦ãã
