ã¡ãã£ãšããæŽå²
2011幎ã«ãããã·ã¥ã¿ã°
#monitoringsucksã®äžã§å£çµããæè»æ§ã®æ¬ åŠã«ã€ããŠæ¢åã®ç£èŠã·ã¹ãã ãæ¹å€ããDevOpsç°å¢ã«åããçŸããŸããã 圌ãã«ãŽã£ããåããªãã£ãããšã¯ã
ãã®ãã¬ãŒã³ããŒã·ã§ã³ã§å®å
šã«èª¬æãã
ãŠããŸãã
æçã«èšãã°ã人ã
ã¯ãã³ã³ããŒãã³ãããã®æè»ã§ã¹ããŒããªç£èŠãæ§ç¯ããããã«ãç£èŠã³ã³ããŒãã³ãéã®çžäºäœçšãããã³ãããã®ã³ã³ããŒãã³ãèªäœã®å€èŠ³ã®ããã®ç¹å®ã®APIæšæºãæãã§ããŸãã
ãã®äžæºã®æ³¢ã®çµæã¯ãåé¡ã®å€§èŠæš¡ãªè°è«ã§ããã
Sensuã
Riemannãªã©ã®èå³æ·±ããŠãŒãã£ãªãã£ã«æ³šç®ãéããŸããã
2013幎ã«ãã³ãã¥ããã£ã®ããã·ã¥ã¿ã°ãå€æŽãããŸãã-çŸåšã¯
#monitoringloveã§ãã ããã¯ããªãŒãã³ãœãŒã¹ç£èŠãŠãŒãã£ãªãã£ã®éçºãåå ã§çºçããŸããã
æ°ãããŠãŒãã£ãªãã£ã®äžã§ãSensuãæãèå³æ·±ããã®ã§ãã çŸæç¹ã§ã¯ããã©ãŒã«ããã¬ã©ã³ã¹ã確ä¿ããæ段ããªããããRiemannãçå£ã«æ€èšããŸããã§ãããClojureã§æ§æãèšè¿°ãããšããèãã¯ããŸã奜ãã§ã¯ãããŸããã
ãã®èšäºã§ã¯ãSensuã«ã€ããŠèª¬æããŸããä»äºã®åºæ¬ååã説æããå
žåçãªç£èŠã¿ã¹ã¯ã解決ããäŸã瀺ããŸãã
Sensuã«ã€ããŠã®éèŠãªäºå®ïŒ
* Rubyã§èšè¿°ãããEventMachineã䜿çšããŸãïŒPythonã奜ã¿ãŸããã倧äžå€«ã§ãïŒã
* JSONã®æ§æ
* Nagiosã®ãã©ã°ã€ã³ã䜿çšã§ããŸãã
*ã¯ã©ã€ã¢ã³ãèªèº«ããµãŒããŒã«éä¿¡ããå Žåãããã·ã¥ã¢ãŒãã§RabbitMQãä»ããŠåäœããŸã
å©çšå¯èœã«ãªã£ããã¹ãçµæã
* DEBãRPMãããã³MSIããã±ãŒãžããããŸãã
*ã·ã§ãçšã®ãããããšã¯ãã¯ããã¯çšã®ã¢ãžã¥ãŒã«ããããŸãã
äžã®ç»åã¯Sensuã®åäœã瀺ããŠããŸãã ç§ã®æèŠã§ã¯ããã¹ãŠãéåžžã«è«ççã§ããããã®ãããªäœæ¥ã¹ããŒã ã¯ã¹ã±ãŒãªã³ã°ãšãã©ãŒã«ããã¬ã©ã³ã¹ãããã®ãŸãŸãæäŸããŸãã
ã·ã¹ãã ã¯ãsensu-serverãsensu-apiãããã³sensu-clientsã®3ã€ã®äž»èŠã³ã³ããŒãã³ãã§æ§æãããŠããŸãã ã»ã³ã¹ããã·ã¥ããŒããå©çšã§ããŸãã ã€ã³ã¹ããŒã«ã¯ç°¡åã§ãããã¥ã¡ã³ãã«è©³çŽ°ãèšèŒãããŠããŸããææ°ããŒãžã§ã³0.12ã«ã€ããŠã¯ã
ããããå
¥æã§ã
ãŸã ã åè¿°ããããã«ãdebãrpmãmsiããã±ãŒãžããããŸãã
åºæ¬çãªæŠå¿µ
ãããã©ã®ããã«æ©èœããããç解ããã«ã¯ãçšèªãç解ããå¿
èŠããããŸãã ç§ã¯å
¬åŒææžã®ç¿»èš³ãç®æšãšããŠèšå®ããŠããŸããããä»åŸäœãè°è«ãããããæ確ã«ãªãããã«ãåºæ¬çãªæŠå¿µã瀺ããããšæããŸãã
次ã®ãšã³ãã£ãã£ããããŸãã
ã¯ã©ã€ã¢ã³ã
ããã¯sensu-clientãã€ã³ã¹ããŒã«ããã³æ§æããããµãŒããŒã§ãããRabbitMQã§èªèº«ã«é¢ããæ
å ±ãå
¬éãããããSensuç£èŠã·ã¹ãã ã«ç»é²ãããŸãã SensuãµãŒããŒããäžé£ã®ãã§ãã¯ãåä¿¡ããŠââå®è¡ããçµæãRabbitMQã«è¿œå ããŸãã
èªå·±èå¥ã®ããã«ã圌ã¯æ¬¡ã®ãããªæ§æãå¿
èŠã§ãïŒããã¥ã¡ã³ãããååŸïŒã
{ "client": { "name": "i-424242", "address": "127.0.0.1", "subscriptions": [ "production", "webserver", "mysql" ] } }
ããµãã¹ã¯ãªãã·ã§ã³ããé€ãããã¹ãŠãéåžžã«æçœã§ãã ãµãã¹ã¯ãªãã·ã§ã³ã¯ããã®ãµãŒããŒã«é¢é£ä»ããããŠããããŒã«ã®ãªã¹ãã§ããããµãŒããŒã§å®è¡ããããã§ãã¯ã®ãªã¹ãã決å®ããŸãã ãã詳现ãªèª¿æŽã«ã€ããŠã¯ã
å
¬åŒããã¥ã¡ã³ãã«èšèŒãããŠããŸããæçšæ§ããããã§ãã¯ã§å€ã䜿çšã§ãããã£ãŒã«ããè¿œå ã§ããã»ããã¯ã©ã€ã¢ã³ãããªãã©ã€ã³ã®ãŸãŸã«ãªãã€ãã³ããçæããããã«çµéããå¿
èŠãããæéééãè¿œå ã§ããŸãã
確èªãã
ãã§ãã¯ã«ãããã¯ã©ã€ã¢ã³ãã§å®è¡ãããã³ãã³ããšãã®ãã©ã¡ãŒã¿ãŒã決å®ãããŸãã Nagiosãã©ã°ã€ã³ãšå®å
šã«äºææ§ããããŸãã ãã§ãã¯ã®æåã®åºæºãšããŠçµäºã³ãŒãã䜿çšããããŒã¿ãœãŒã¹ãšããŠSTDOUTãŸãã¯STDERRã䜿çšããŸãã ãã§ãã¯ã¯sensu-serveræ§æã§æ§æãããäžè¬çãªãã§ãã¯ã¯æ¬¡ã®ããã«ãªããŸãïŒããã¥ã¡ã³ãã®äŸïŒïŒ
{ "checks": { "chef_client": { "command": "check-chef-client.rb", "subscribers": [ "production" ], "interval": 60 "handlers": [ "pagerduty", "irc" ] } } }
ããã§ãèå³æ·±ãã®ã¯ããµãã¹ã¯ãªãã·ã§ã³ãšãã³ãã©ãŒã§ãã ãµãã¹ã¯ãªãã·ã§ã³ã¯ããã®ã³ãã³ããå®è¡ããã¯ã©ã€ã¢ã³ãã決å®ããŸãã
äžé£ã®ãã³ãã©ãŒã¯ããã®ãã§ãã¯ããã®ããŒã¿ãåŠçãããšãã«å®è¡ãããã³ãã³ãã®ãªã¹ãã決å®ããŸãã ãããã«ã€ããŠããã«èª¬æããŸãã
æ€èšŒã¯ãã¡ããªãã¯ãã§ããå¯èœæ§ãããããšã«æ³šæããå¿
èŠããããŸãã STDOUTããã®ããŒã¿ã¯åžžã«ãã³ãã©ãŒã«åã«æž¡ãããŸãã ããã«ãããã¡ããªãã¯ããŒã¿ãã©ããã«éä¿¡ããŠãã°ã©ããæ ŒçŽãŸãã¯æç»ã§ããŸãïŒããšãã°ãGraphiteã§ïŒã
ããã¥ã¡ã³ãã®è©³çŽ°ã
ãã³ãã©ãŒ
ãã³ãã©ãŒã¯ããã§ãã¯ããã®ããŒã¿ãå°çãããšãã«ç£èŠãµãŒããŒã§å®è¡ãããã³ãã³ããšãã®ãã©ã¡ãŒã¿ãŒã決å®ããŸãã ããšãã°ããã®ãã³ãã©ã¯ããã§ãã¯ãããŒã以å€ã®çµäºã³ãŒããåä¿¡ãããšãã³ãã³ã
mail -s 'sensu event' email@address.com
ãå®è¡ã
mail -s 'sensu event' email@address.com
ïŒããã¥ã¡ã³ãã®äŸïŒïŒ
{ "handlers": { "mail": { "type": "pipe", "command": "mail -s 'sensu event' email@address.com" } } }
ããã§ã¯ãã¹ãŠãæãã
ã§ã ã
ãã©ã°ã€ã³ãªããžããªã«
ã¯å€ãã®ãã³ãã©ã
ãããŸã ã Pagerdutyã§éä¿¡ããŠæçŽãéä¿¡ããGraylog2ã§gelfã§éä¿¡ã§ããŸãã
ããã¥ã¡ã³ãã®è©³çŽ°ã
äžèšã®ãã¹ãŠããã§ã«åäœããã·ã¹ãã ãæ§ç¯ããã®ã«ååã§ãã ãã¥ãŒããŒã¿ãŒãæ¡åŒµæ©èœãAPIããããŸãããããã¯ä»ã§ã¯éèŠã§ã¯ãããŸããã
楜ããéšåã«å°éãã
Sensuã¯æ£ç¢ºã«ãç£èŠãã¬ãŒã ã¯ãŒã¯ããšããŠäœçœ®ä»ããããŠãããããã¯ãç®±ããåºããŠãããã«Zabbixã®ãããªãšã³ã¿ãŒãã©ã€ãºã·ã¹ãã ã«ã€ããŠãªãã¿ããªãããšãæå³ããŸãã ãã©ã°ã€ã³ã®ãããã§ãã¹ãŠã®æ©èœãè¿œå ãããŸãã
äœã圹ã«ç«ã€ããšãè©ŠããŠã¿ãŸãããã ç°¡åãªã¿ã¹ã¯ãèŠãŠã¿ãŸããã-åé¡ãçºçããå Žåã«ã¯ã©ã€ã¢ã³ãã®Redisããã§ãã¯ããDashingããã«ã«ã¢ã©ãŒãã衚瀺ããGraylog2ã«ã¡ãã»ãŒãžãéä¿¡ããadmin @ example.comã«å±¥æŽãéä¿¡ããŸãã ãŸããRedisã§ã¡ããªãã¯ãååŸããããããã¹ãã¬ãŒãžçšã«Graphiteã«éä¿¡ããŠãããéçŽãããããŒå€ããã§ãã¯ããŸãã
ã¯ã©ã€ã¢ã³ãã®ã¢ãã¬ã¹ã¯192.168.1.2Nã§ãGraphiteã¯192.168.1.80:8082ã«ãããã€ãããRabbitMQãšRedisã192.168.1.80ã«ãããã€ãããŸãã Graylog2ã¯192.168.1.81ã§ãªãã¹ã³ããDashingãå±éãããŸãã
æ§æ
ã¯ã©ã€ã¢ã³ãæ§æããå§ããŸãããã
redisã®åœ¹å²ã§Nåã®ãµãŒããŒããããšããŸãã
ã¯ã©ã€ã¢ã³ãæ§æã¯æ¬¡ã®ããã«ãªããŸãã
/etc/sensu/config.json { "client": { "graphite_server": "192.168.1.80:8082", "address": "192.168.1.2N", "name": "clientN", "subscriptions": [ "redis" ] } "rabbitmq": { "vhost": "/sensu", "host": "192.168.1.80", "password": "password", "port": 5672, "user": "sensu" } }
Nåã®åã¯ã©ã€ã¢ã³ãã§ãã¹ããããŠããŸãã
ä»ã®ãã¹ãŠã®æ§æãã¡ã€ã«ã¯SensuãµãŒããŒäžã«ã®ã¿ãããŸãã
åºæ¬èšå®ïŒ
/etc/sensu/conf.d/settings.json { "api": { "host": "192.168.1.80", "port": 4567 }, "redis": { "host": "192.168.1.80", "port": 6379 }, "rabbitmq": { "vhost": "/sensu", "host": "192.168.1.80", "password": "password", "port": 5672, "user": "sensu" }, "mailer": { "mail_from": "sensu@example.com", "smtp_port": "25", "mail_to": "admin@example.com", "smtp_address": "localhost" }, "dashing": { "auth_token": "YOUR_AUTH_TOKEN", "host": "http://192.168.1.81:8088" }, "gelf": { "server": "192.168.1.81" "port": "12201", } }
ã芧ã®ãšãããSensuã ãã§ãªããããã·ã¥ãgelfãã¡ãŒã©ãŒãã³ãã©ãŒã®ãã©ã¡ãŒã¿ãŒãèšå®ããŸããã
次ã«ããããã®ãã³ãã©ãŒèªäœãå®çŸ©ããŸãã
/etc/sensu/conf.d/handlers.json { "handlers": { "default": { "type": "set", "handlers": [ "mailer", "dashing", "gelf" ] }, "gelf": { "type": "pipe", "command": "/etc/sensu/handlers/gelf.rb" }, "mailer": { "type": "pipe", "command": "/etc/sensu/handlers/mailer.rb" }, "dashing": { "type": "pipe", "command": "/etc/sensu/handlers/dashing.rb" }, "graphite": { "mutator": "only_check_output", "type": "amqp", "exchange": { "durable": true, "type": "topic", "name": "metrics" } } } }
ããã§ã¯ãã¹ãŠãç°¡åã§ãã Graphiteã§ã¯ãAMQPãä»ããŠããŒã¿ãã«ã¡ãããäœæããŸãã ãã³ãã©ãŒã¯ã/ etc / sensu / handlersã®ç£èŠãµãŒããŒã§å解ããå¿
èŠããããŸãã
次ã«ãã¯ã©ã€ã¢ã³ãã§å®è¡ããããã§ãã¯ãæ§æããŸãã
/etc/sensu/conf.d/checks.json { "checks": { "redis_processes": { "interval": 60, "command": "/etc/sensu/plugins/processes/check-procs.rb -p redis -c 8 -C 0 -w 7 -W 1", "subscribers": [ "redis", ], "handlers": [ "default" ] }, "redis_memory": { "dependencies": [ "redis_processes" ], "command": "/etc/sensu/plugins/redis/check-redis-memory.rb -c 204800 -w 51200", "interval": 60, "subscribers": [ "redis", ], "handlers": [ "default" ] }, "redis_metric": { "handlers": [ "graphite" ], "interval": 60, "dependencies": [ "redis_processes" ], "command": "/etc/sensu/plugins/redis/redis-graphite.rb --scheme stats.:::name:::.redis", "subscribers": [ "redis", ], "type": "metric" }, "redis_keys_from_graphite": { "interval": 60, "command": "/etc/sensu/plugins/graphite/check-data.rb -s :::graphite_server::: -t stats.:::name:::.redis.db0.keys -w 500 -c 900 -a 120", "subscribers": [ "redis" ], "dependencies": [ "redis_processes" ], "handlers": [ "default" ] } } }
ãã§ãã¯ã¯Sensuãã©ã°ã€ã³ã«ãã£ãŠå®è¡ãããŸããããã¯ã/ etc / sensu / pluginsã®ã¯ã©ã€ã¢ã³ãã§å解ããå¿
èŠããããŸãã Nagiosã«ç²ŸéããŠãã人ã«ãšã£ãŠã¯ãæ°ãããã®ã¯äœããããŸãããredis_metricã¡ããªãã¯ã®ã¿ãèå³æ·±ãã®ã§ãããããããŒã¿ãGraphiteã«å
¥ãããã®åŸredis_keys_from_graphiteãã§ãã¯ã§æåŸã®10åéã®ããŒã¿ãååŸããŠãã§ãã¯ããŸãã äžè¬ã«ãã»ãšãã©ãã¹ãŠã®ãã©ã°ã€ã³ã«ã¯--helpã¹ã€ããããããå®å
šã«æ£ãããªãã¡ã¬ã³ã¹ã䜿çšã§ããŸãã
ãããæ§æå
šäœã§ãã ãã¹ãŠãæ確ã§ããã¹ãŠããªããžããªã«ä¿åã§ããŸããããã¯çŽ æŽãããããšã§ãã
ãã¡ãããDashingãšGraphiteãæ§æããå¿
èŠããããŸãããããã¯èšäºã®ç¯å²å€ã§ãã Sensu + Graphiteã®ã»ããã¢ããæé ã¯
ããã«ãããŸãããDashingã䜿çšãããšãã¹ãŠãæ確ã«ãªããŸãã
Sensuã«ã¯ãã¯ã©ã€ã¢ã³ãããã§ãã¯ãããªã¬ãŒãããã¢ã©ãŒãã®ãªã¹ãã衚瀺ã§ããã·ã³ãã«ãªããã·ã¥ããŒãããããŸãã APIããã³ããã·ã¥ããŒãã䜿çšããŠããã¹ããŸãã¯ãã§ãã¯ã®ã¢ã©ãŒãã®çæããªãã«ããã·ã¹ãã ã®äžè¬çãªã¹ããŒã¿ã¹ã確èªã§ããŸãã
次ã®ããã«ãªããŸãïŒç»é¢ã¯ç§ã®ãã®ã§ã¯ãããŸããïŒïŒ
çµè«
ã芧ã®ãšãããSensuã¯ã«ãŒã¿ãŒãšãªãŒã¬ãã€ã¶ãŒã®åœ¹å²ã®ã¿ãæ
ãããã¹ãŠã®æ±ãäœæ¥ã¯å€éšããã°ã©ã ã«ãã£ãŠè¡ãããŸãã ããã«ããããœãŒã¹ã³ãŒãã®å°ããªãµã€ãºãšã·ã¹ãã ã®å
šäœçãªã·ã³ãã«ããç¯çŽã§ããŸãã RabbitMQãä»ããã¯ã©ã€ã¢ã³ãã®ç»é²ã«ãããã¯ã©ã€ã¢ã³ãã®ãçºèŠãã®ã¡ã«ããºã ãåãé€ãããšãã§ããŸããããã¯ãã¯ã©ãŠãã«ç¹ã«äŸ¿å©ã§ãã ã¹ã±ãŒãªã³ã°ã¯éåžžã«ç°¡åã§ããHA+ããŒããã©ã³ã·ã³ã°ã®äŸã¯
ããã«ãããŸã ã
ç§ã¯ZensbixãšäžŠè¡ããŠSensuãçŽ1ãæéæ¬çªç°å¢ã§äœ¿çšããŠããããã¹ãçã§ã¯æ°ãæ䜿çšããŸããã Sensuã®æè»æ§ã«ãããZabbixãéåžžã«é·ãé䜿çšããŠããéã«ãäž»èŠãªãã©ã¡ãŒã¿ãŒãšãããžã§ã¯ãã¡ããªãã¯ã¹ã®ç£èŠãDashingããã«ãžã®åºåã§æ§æã§ããçŸåšã§ã¯ããå
æ¬çãªç£èŠã«åãçµãã§ããŸãã äžè¬ã«ãå€ãã®ãããžã§ã¯ããç¹ã«ã¯ã©ãŠãã§ã¯ãSensuãåªããéžæè¢ã«ãªããŸããããã¯ãã€ãã³ããæè»ã«ã«ãŒãã£ã³ã°ã§ããã¯ã©ãŠãã®åçãªæ§è³ªã«ãããŸãé©å¿ã§ããããã§ãã ãã¬ãŒã³ããŒã·ã§ã³ã§ã¯ãSensuã®ç£ç£äžã§æ°åå°ã®ãµãŒããŒã«äŒã£ããããããã©ãŒãã³ã¹ã«åé¡ã¯ãããŸããã
çµè«ãšããŠãSensuïŒãã¹ãŠç§èŠïŒã®é·æãšçæãææããããšæããŸãã
çæ
- æ¢åã®éç¥ãã³ãã©ãŒã®èšå®ã¯äžååã§ãã PagerDutyãªã©ã®ãµãŒãã¹ã䜿çšããªãå Žåããããã¡ã€ã³ã®ãã€ãã¹ã«ãªããŸãã å¯äžã®è§£æ±ºçã¯ãcãªãã³ãã©ãŒãäœæããããšã§ãã
- èšå®ã¯yamlã§ã¯ãªãjsonã«ãããŸãã
- å€éšã®ã¡ããªãã¯ã«ã¹ããã£ã¢ã³ãå¿
èŠã§ãã圌ã¯ãã£ãŒããã€ã³ã¿ãŒã§ããããŸãã
- å®å
šãªããã¥ã¡ã³ãã§ã¯ãããŸããã 幞ããªããšã«ããããžã§ã¯ãã¯ã·ã³ãã«ã§ãã³ãŒããèªãã ãã§ç解ã§ããŸãã
ããã»ã³ã¹
- æ§æã¯gitã«ä¿åã§ããChef / Puppetã§ãã¹ãŠãã¬ã€ã¢ãŠãã§ããŸãã
- ã¹ã±ãŒã©ããªãã£ã
- èé害æ§ã
- ã¹ãã¬ãŒãžã·ã¹ãã ã®éžæã«ãããæè»æ§ã
- Nagiosãã©ã°ã€ã³ã®ãµããŒãã
- ã¯ã©ã€ã¢ã³ããèªåæ¥ç¶ããŸãã
- ãµãã¹ã¯ãªãã·ã§ã³ã¡ã«ããºã ã
- ããŒã¿ã¯ãçæããããšé¡§å®¢ã«ãã£ãŠå
¬éãããŸãã
- ãã¹ãçµæã¯ãããŸããŸãªãã³ãã©ãŒã«æè»ã«éä¿¡ã§ããŸãã