ãã®è¨äºã¯ã¯ã¦ãªã¨ã³ã¸ãã¢ã¢ããã³ãã«ã¬ã³ãã¼2014ã®8æ¥ç®ã§ãã
ä»åã¯ãGoè¨èªã§ãµã¼ã管çãã¼ã« Mackerel ã®ã³ãã³ãã©ã¤ã³ãã¼ã«mkr
ãä½ãã¨ãã«èª¿ã¹ããã¨ãèãããã¨ããã£ããã¨ã«ã¤ãã¦ç´¹ä»ãã¾ããï¼mkr
ã¯ç¾æç¹ã§ã¯éçºçã§ã®æä¾ã«ãªãã¾ããï¼
ã³ãã³ãã©ã¤ã³ãã¼ã«ã«ã¤ãã¦
ã³ãã³ãã©ã¤ã³ãã¼ã«ãä½ãã«ããã£ã¦ã@deeeet ããã® YAPC Asia 2014 ã§ã®çºè¡¨è³æãé常ã«åèã«ãªãã¾ãã æ¸ç± UNIXという考え方ーその思想と哲学 ã®å 容ããã¼ã¹ã«ãã³ãã³ãã©ã¤ã³ãã¼ã«ã¯ã©ãããã¹ããã¨ãããã¨ãä¸å¯§ã«èª¬æããã¦ãã¾ãã
ä¸è¨è³æããå¼ç¨ããã¦ããã ãã¨ãã³ãã³ãã©ã¤ã³ãã¼ã«ã«ããã¦éè¦ãªãã¤ã³ãã¯ä»¥ä¸ã®7ã¤ã§ããã¨ããã¦ãã¾ãã
- 1ã¤ã®ãã¨ã«éä¸ãã¦ãã
- ç´æçã«ä½¿ãã
- ä»ã®ãã¼ã«ã¨é£æºã§ãã
- å©ç¨ãå©ãã¦ããã
- é©åãªããã©ã«ãå¤ãæã¡è¨å®ãã§ãã
- è¦çãªãã¤ã³ã¹ãã¼ã«ã§ãã
- ããã«æ¹ä¿®ã§ãã
ã¾ãããããã«"è¯ã"CLIãã¼ã«ãä½ãå§ãããï¼ãã«ã¤ãã¦ã以ä¸ã®4ã¤ã®æé ã示ããã¦ãã¾ãã
- ã©ããªãã¼ã«ãä½ããèãã
- è¨èªãé¸ã¶
- README.mdãæ¸ã
- é«éã«ãããã¿ã¤ããä½ã
ããã«ãåãã@deeeet ããã®ã¨ã³ã㪠コマンドラインツールを作るときに参考にしている資料 | SOTA ãåèã«ãªãã¾ãã
Goè¨èªã«ãããã³ãã³ãã©ã¤ã³ãã¼ã«
Goè¨èªã¯ä¾åã®ãªããã¤ããªçæã¨ã¯ãã¹ã³ã³ãã¤ã«ãã§ããã®ã§ã"è¦çãªãã¤ã³ã¹ãã¼ã«ã§ãã"ã¨ããç¹ã§ãã³ãã³ãã©ã¤ã³ãã¼ã«ãæ¸ããã¨ã«åãã¦ããã¨æãã¾ãã
Goã§æ¸ãã¨Rubyãªã©ã¨æ¯ã¹ã¦åºæ¬çã«ã¯åä½ãé«éãªãããHeroku ã GitHub ã®ã³ãã³ãã©ã¤ã³ãã¼ã«ãGoã§æ¸ããªãããã¦ããã¨ããã®ã注ç®ãã¹ããã¤ã³ãã§ãã
hk
ã¯ä½¿ã£ã¦ãªãã®ã§ãããã¾ããããhub
ã¯ä½æã§ãã¯ã£ãããããã»ã©åä½ãé«éã«ãªãã¾ããã
- heroku/hk · GitHub
- github/hub · GitHub
- jingweno/gh · GitHub
- motemen/ghq · GitHub
- https://github.com/tcnksm/dmux
- walter-cd/walter · GitHub
ä½è«ã§ãããHeroku ã§ã¯Goã§ã³ãã³ãã©ã¤ã³ãã¼ã«ãæ¸ãä»äºãåéãã¦ããããã§ãã Go/Golang job: Command Line Interface Developer @ Heroku
Go ã§ã³ãã³ãã©ã¤ã³ãã¼ã«ãä½ãä¸ã§ãã³ãã³ãã©ã¤ã³ãã¼ã«ã®ã¤ã³ã¿ãã§ã¼ã¹é¨åã®å®è£
ãå©ãã¦ãããcli
ã¨ããã©ã¤ãã©ãªãé常ã«ä¾¿å©ã§ãã
ããã使ãã¨ãµãã³ãã³ãããã¤ã¤ã³ã¿ãã§ã¼ã¹ãããã«ãæ©è½ãªã©ãç°¡åã«ä½ããã¨ãã§ãã¾ããï¼Ruby ã§ããã¨ããã® thor ã®ã©ã¤ãã©ãªé¨åã«è¿ãããï¼
使ãæ¹ã¯ motemen ããã® ghq ã cli
ã®ä½è
ã®Goã®ã³ã¼ããã¿ãã¨ããã¨æãã¾ãã
ã¾ãã³ãã³ãã©ã¤ã³ãã¼ã«ã¨ã¯é¢ä¿ãªãã§ãããGo ã§ã®ããã³ã¼ãã®æ¸ãæ¹ã«ã¤ãã¦ãå
æ¥ã®GoConã®è³æãåèã«ãªãã¾ãã
Goに入ってはGoに従え
Go ã«ã¤ãã¦ã¯ã以å便å©ãªã³ã¯éãã¾ã¨ãã¾ããã
Go言語の便利情報 - ゆううきブログ
mkr
mkr
ã¯ããµã¼ã管çãã¼ã« Mackerel ã® REST API ãå©ç¨ããã³ãã³ãã©ã¤ã³ãã¼ã«ã§ãã
Mackerel ã®ãããªç®¡çãã¼ã«ç³»ã®ãµã¼ãã¹ã¯ãããæä½ãä¸æ¬ã§è¡ããããªã©ã®æè»ãªæä½æ§ãæ±ãããã¾ããããããWebUIã§è¡¨ç¾ãããã¨ãé£ãããã¨ãããã¨æãã¾ãã ãããªã¨ãã«ãAPIã«ããä¸æ¬æä½ãªã©ãã§ããã¨ãæä½ãèªååããããã®ã§ä¸ç³äºé³¥ã¨ããã¾ãã ç¹ã«ãµã¼ã管çãã¼ã«ã®å ´åãä»ã®ãã¼ã«ã®APIãªã©ã®åºåããµã¼ã管çãã¼ã«ã«åæ ããããéã«ãµã¼ã管çãã¼ã«ã®APIã®åºåãä»ã®ãã¼ã«ã«æ¸¡ããããªã©ã®è¦æ±ã¯ããããã¨æãã¾ãã
ä¾ãã°ãMackerel API 㨠tssh ãçµã¿åããã¦è¤æ°ãã¹ãã«åæã«ãã°ã¤ã³ãããªã©ã®å¿ç¨ãããã¾ããtmux + ssh + Mackerel API を組み合わせたとにかくモダンなサーバオペレーション - ゆううきブログ
ãµã¼ã管çãã¼ã«ã¨APIã«ã¤ãã¦ã¯ãæ¨å¹´ã®YAPCã§çºè¡¨ããè³æãåèã«ãªãããããã¾ããã
はてなのサーバ管理ツールの話 // Speaker Deck
mkr
ã¯å種APIã®æä½ã¨ã³ãã³ãã対å¿ãã¦ãããAPIã®å
¥åºåã¨ã³ãã³ãã©ã¤ã³ã§ã®å
¥åºåã®ãã¤ãã¨ãã¦ã ãæ©è½ããããã«æèãã¦ãã¾ãã
"1ã¤ã®ãã¨ã«éä¸ãã"ãã¨ãã§ããããã«ãåºåã®ãã£ã«ã¿ãªã³ã°/å å·¥æ©è½ãªã©ã¯æå°éã®å®è£
ã«ãã¦ãã¾ãã
代ããã«ãAPIã®åºåãä½åãªæ
å ±ãå¤å°é¤ãã¦ãã®ã¾ã¾JSONã§åºåããããã«ãã¦ãjq
ã§èªå¨ã«ãã£ã«ã¿ãªã³ã°/å å·¥ããã°"ä»ã®ãã¼ã«ã¨é£æºã§ãã"ãã¨ãããããã¨èãã¾ããã
ä¾ãã°ãç¹å®ãã¼ã«ã®ãã¹ã群ã®IPã¢ãã¬ã¹ä¸è¦§ãåºåãããã¨ãã«ã¯ mkr ã® hosts ãµãã³ãã³ãã« service 㨠role ãªãã·ã§ã³ãä»ãã¦ãjq 㧠eth0 ã®ã¿ããã£ã«ã¿ã¼ãã¾ãã
$ mkr hosts --service Mackerel --role proxy | jq -r -M ".[].ipAddresses.eth0"
åçã®ãã£ã«ã¿ãªã³ã°ã mkr
å´ãããã¯APIå´ã§å®è£
ãããã¨æãã¨ããªã大å¤ã§ãå®è£
ããã¨ãã¦ã表ç¾åãæ±ç¨ãã£ã«ã¿ã¼ã® jq
ã«å£ãå¯è½æ§ãé«ãããããããããã¼ã«ã¨çµã¿åãããã¨ããããã«ã¯ãããªããªãããããã¾ããã
ä»ã®ãµã¼ãã¹ã®APIã¨çµã¿åããã¨ãã¦ä¾ãã°ãEC2 㨠Mackerel é£æºãããã¾ãã
mkr retire <hostIds>
㨠aws-cli
ã® descrive-instancesãçµã¿åãããã¨ãEC2ä¸ã§ Terminated ã«ãªã£ãã¤ã³ã¹ã¿ã³ã¹ãªã¹ãã mkr retire
ã³ãã³ãã«æ¸¡ãã°ãä¸æ¬ã§éå½¹å¦çãã§ãã¾ãã
ããã«ãmackerel-agent-plugins
㨠mkr throw
ãçµã¿åãããã¨ãSensu å½¢å¼ã®ãã©ã°ã¤ã³ã®åºåããã¹ãã¡ããªãã¯ããµã¼ãã¹ã¡ããªãã¯ã«æãè¾¼ãã¾ãã
cron ã§å®ææ稿ããããã¨ã§ãmackerel-agentããªãã¦ãã¡ããªãã¯æ稿ãã§ãã¾ãã
ELB ã RDS ãªã©ãç¹å®ã®ã¤ã³ã¹ã¿ã³ã¹ã«ç´ä»ããªãã¡ããªãã¯ã¯ããã使ãã¨æ¥½ããããã¾ããã
$ /usr/local/bin/mackerel-plugin-aws-elb | mkr throw --service <hostId>
mkr 㨠Go
mkr
ã Go ã§å®è£
ããæ大ã®çç±ã¯ãmackerel-agent ãã¤ã³ã¹ãã¼ã«ããããã¹ãä¸ã§ãmkr status
ã¨ãã¤ã¨ãã°ã¤ã³ãããã¹ãã®æ
å ±ãç°¡åã«ã¿ãããã¹ãã¼ã¿ã¹ãå¤æ´ã§ããããã«ãããã¨ãããã®ã§ãã
mackerel-agent ãåä½ãã¦ããã°ã/etc/mackerel-agent/mackerel-agent.conf
ã /var/lib/mackerel-agent/id
ã«APIãã¼ããã¹ãIDãæ¸ããã¦ãã¾ãã
æå®ããªããã°ããããèªãããã«ãããã¨ã§ãå
¥åãçç¥ã§ããããã«ãã¾ãã
åãã¹ãã«ã¤ã³ã¹ãã¼ã«ããã¦ããå¿
è¦ãããã®ã§ãé
å¸ã®ç°¡å㪠Go ã§å®è£
ããã®ãé©å½ã ã¨æãã¾ããã
mkr ä½ææé
ä¸è¨ã®æé ã§ä½ãã¾ããã
- ã¤ã³ã¿ãã§ã¼ã¹ã決ãã
- READMEãæ¸ã
- go çã®APIã©ã¤ãã©ãªããªãã£ãã®ã§ä½ã https://github.com/mackerelio/mackerel-client-go
- ã²ãªå½¢ãä½ã https://github.com/tcnksm/cli-init 高速にGo言語のCLIツールをつくるcli-initというツールをつくった | SOTA
ghq
ãåèã«å®è£ ãã¨ã«ããåèã«ãªããgo vet
,golint
ãéã- CIç°å¢ãæ´ãã (TravisCI)
- ãªãªã¼ã¹ããã¼ãæ´ãã (goxc, travisci)
- Dockerfile ãæ¸ãã¦ãDockerHub 㧠Automated Build https://registry.hub.docker.com/u/mackerel/mkr/
- Homebrew Formulaãæ¸ã https://github.com/y-uuki/homebrew-mkr (ããã motemen ããã® https://github.com/motemen/homebrew-ghq ããã®ã¾ã¾ï¼
ã¤ã³ã¿ãã§ã¼ã¹
mkr
ã¯ã¤ã³ã¿ãã§ã¼ã¹ã«ãã ãã£ã¦ä½ã£ã¦ãã¾ãã
ä¾ãã°ãRuby ã®CLIãã¼ã«ã®ã¤ã³ã¿ãã§ã¼ã¹ã¯ https://github.com/mackerelio/mackerel-client-ruby#cli ã®ããã«ãªã£ã¦ãã¾ãããã³ãã³ãå + ãªã½ã¼ã¹å + åè© ã¨ãªã£ã¦ãããREST ããã®ã¾ã¾è¡¨ç¾ããããã§ãããã¿ã¤ãæ°ãå¤ããªã£ã¦ãã¾ãã¨ããæ¬ ç¹ãããã¾ãã
(ä¸å¿ãµããµãã³ãã³ãçãªãã®ãcli
ã©ã¤ãã©ãªã§å®è£
ã§ããããã§ããï¼
ããã§ãmkr
ã¯ã³ãã³ãå + åè©ã§è¡¨ç¾ããããã«ãã¦ãã¿ã¤ãæ°ãçããªãããã«ãã¦ãã¾ãã
代ããã«æä½ããããªã½ã¼ã¹ã®è¡¨ç¾åãè½ã¡ã¾ãããå®éã«ã¯"service"(ãªã½ã¼ã¹)ã"create"(åè©)ãããªã©ã®æä½ã¯é常ã³ãã³ãã©ã¤ã³ããã¯è¡ãã¾ããã
ãã®ããã«WebUIã§ååäºè¶³ããæä½ã«ã¤ãã¦ã¯ãã³ãã³ãã©ã¤ã³ã§ã¯è¡¨ç¾ããªããããã¯ã¿ã¤ãæ°ããã¾ãæ°ã«ããªãã¤ã³ã¿ãã§ã¼ã¹ã«ãã¦ãã¾ãã
é »ç¹ã«ã³ãã³ãã©ã¤ã³ã§æä½ãããã¨æãã®ã¯"host"ã§ãããããåºæ¬çã«ã¯"host"(ãªã½ã¼ã¹)ã«å¯¾ããæä½ãåè©ã¨ãã¦ãã¾ãã
ã¾ããAPIã§ã¯ç°ãªãã¨ã³ããã¤ã³ãã¨ãã¦è¨è¨ããã¦ãã¦ããã¦ã¼ã¶ã®ç´æã§ã¯1ã³ãã³ãã¨ãã¦è¡¨ç¾ããã¦ãããã¨æããã®ãããã¾ãã
ä¾ãã°APIã§ã¯ããã¹ãæ
å ±ã®æ´æ°ã¨ãã¹ãã®ã¹ãã¼ã¿ã¹ã®æ´æ°ãåããã¦ãã¾ãããã©ã¡ãããã¹ãæ
å ±ã®æ´æ°ã§ãããããmkr
ã§ã¯ update ã³ãã³ãã«ã¾ã¨ãã¦ããã¾ãã
ãªãªã¼ã¹ããã¼
ä»ã¯ GitHub ã® releasesã«ã¢ãããã¼ããããã¨ããªãªã¼ã¹ã¨ãã¦ãã¾ãã "è¦çãªãã¤ã³ã¹ãã¼ã«ã§ãã"ãã¨ãèããã¨ãyumãªãã¸ããªãaptãªãã¸ããªãHomebrewã§æä¾ãããã¨ãèããã»ããããããã¨ã¯æãã¾ãã
CIç°å¢ã¨åãã㦠GitHub ã® releases ã¸ã®ã¢ãããã¼ã㯠TravisCI, CircleCIãwercker ã使ãã¨ä¾¿å©ã§ãã
Travis CI: GitHub Releases Uploading
ããã«ãè¤æ°ç°å¢ã®åæã¯ãã¹ã³ã³ãã¤ã«ã«ã¯ gox
ã¾ã㯠goxc
ã便å©ã§ãã
toolchain ã®ç´°ãã validation ã Zip ã tar.gz ã¸ã®ã¢ã¼ã«ã¤ãããã¼ã¸ã§ãã³ã°ãªã©ãã§ããç¹ãã goxc
ã使ã£ã¦ã¿ã¾ããã
ãã®ãããã¯ãMakefileãtravis.ymlãåç
§ãã¦ãã ããã
Dockerfile
ã¢ãã³æãåºãããã«ãã¨ããããç½®ãã¦ããã¨ããã§ãããã 2è¡ã§æ¸ã¿ã¾ãã(ãã«ãã« make ã使ããªãã£ããããã®ã§ãã¡ããã¨ãããã¨ãã㨠onbuild image 使ããã«ãããã©ã¨ããããåã)
FROM golang:1.3.3-onbuild ENTRYPOINT ["/go/bin/app"]
Go ã§ãªããã¼ã«ã§ docker ããå ¥ã£ã¦ããã°ã³ãã³ãä¸çºã§ã¤ã³ã¹ãã¼ã«ã§ããã®ã§ãRuby ã Python ã®ã³ãã³ãã©ã¤ã³ãã¼ã«ã§ã¯æç¨ããããã¾ããã
ã¾ã¨ã
UNIXå²å¦æé«ãGoæé«ã

UNIXã¨ããèãæ¹âãã®è¨è¨ææ³ã¨å²å¦
- ä½è : Mike Gancarz,è³å°¾æ¡
- åºç社/ã¡ã¼ã«ã¼: ãªã¼ã 社
- çºå£²æ¥: 2001/02
- ã¡ãã£ã¢: åè¡æ¬
- è³¼å ¥: 40人 ã¯ãªãã¯: 498å
- ãã®ååãå«ãããã° (140件) ãè¦ã
次å㯠id:hatz48 ããã§ãããããããé¡ããã¾ãï¼
ã¯ã¦ãªã§ã¯ãPerlã ãã§ãªããScala, Goã®ã¨ã³ã¸ãã¢ãããã«èªç¤¾éçºã®ãã¼ã«ã§ãµã¼ã管çããããWebãªãã¬ã¼ã·ã§ã³ã¨ã³ã¸ãã¢ãåéãã¦ããã¾ãã
æ¡ç¨æ å ± - æ ªå¼ä¼ç¤¾ã¯ã¦ãª