æè¿å稿ã®ç· ãåãã追ãããã¦ãã夢ãããè¦ã@cubicdaiyaã§ããä»åã¯ãã®éé¿ã®ä¸ç°ã¨ãã¦å®çªã®ãã£ãããã¼ã«ã§ããSlackã®ã¡ã«ã«ãªã§ã®æ´»ç¨æ³ã«ã¤ãã¦ç´¹ä»ãã¾ãã
ã¡ã«ã«ãªã§ã®Slackæ´»ç¨
å¤ãã®ã¨ã³ã¸ãã¢çµç¹ãããã§ããããã«ã¡ã«ã«ãªã§ã¯Slackãåãªã社å ãã£ããã«çã¾ãããæè¬ChatOpsçãªç¨éã«ãæ´»ç¨ãã¦ãã¾ãã
ãã¨ãã°ã¡ã«ã«ãªã§ã¯ãµã¼ãã®ç£è¦ã®ããã«Zabbixãå©ç¨ãã¦ãã¾ãããbot ack all
ã¨Slackã§å
¥åããã¨ç¾å¨èµ·ãã¦ãããã¹ã¦ã®é害ãAcknowledgedãªç¶æ
ã«ã§ãã¾ãã
ããã«ãbot test master
ã¨Slackã§å
¥åããã¨APIãµã¼ãã®ãã¹ããèµ°ãã¾ãã
ããã«ããã«ãbot hello
ã¨Slackã§å
¥åããã¨èªå®
ããã§ãåºå¤ãããã¨ã«ã§ãã¾ãã
ãªãããã®æã¯ãããç§ã«åãã¦èªå® ã§å¾ æ©ãã¦ããã®ã§ããã
ã»ãã«ãSlackãããããã¤ãè¡ãããã®ä»çµã¿ãªã©ãããã¾ãããé·ããªãã®ã§ããã¯ã¾ãæ¬¡ã®æ©ä¼ã«ç´¹ä»ãããã¨æãã¾ãã
Slackãããã·ãµã¼ãã®éè¦
ä¸è¨ã®Slackãããããã ãã§ãªãã¡ã«ã«ãªã§ã¯ãããã¯ã·ã§ã³ã«æå ¥ããã¦ãããã¾ãã¾ãªãµã¼ãããSlackã«ã¡ãã»ã¼ã¸ããã¹ãããã¾ãã以ä¸ã¯ãã®ä¸ä¾ã§ãã
- crontabã«ç»é²ããããããã®å®è¡ã¨ã©ã¼ã®éç¥ã¨ãã®ã¨ã©ã¼å 容
- Norikraãæ¤ç¥ããã¤ãã³ãã¨ãã®å 容
- Zabbixãæ¤ç¥ããã¢ã©ã¼ãã¨ãã®å 容
ãããã«é¢é£ããå¦çãè¨å®ã¯è¤æ°ã®ãµã¼ãã«æ£ãã°ã£ã¦ããã®ã§åãµã¼ãããç´æ¥Slackã«ã¡ãã»ã¼ã¸ããã¹ãããã®ã¯éç¨ç®¡çä¸ã®åé¡ãæ±ãããã¨ã«ãªãã¾ãã使 ãªãã¯ã©ã¤ã¢ã³ããSlackã«ã¡ãã»ã¼ã¸ããã¹ãããã«ã¯APIãã¼ã¯ã³ãIncoming Webhooksã®URLãç¥ã£ã¦ããªããã°ãªããªãããã§ãã
ãã®ããããã®ã©ã¡ãããåãµã¼ãã«é ç½®ããããHTTPãµã¼ãçãå©ç¨ãã¦åãµã¼ãããåç §å¯è½ãªå ´æã«é ç½®ããå¿ è¦ãããã¾ãã
Incoming Webhooksã®URLæ å ±ãåãµã¼ãã«é ç½®ãã
Incoming Webhooksã®URLæ å ±ãåãµã¼ãããåç §å¯è½ãªå ´æã«é ç½®ãã
Slackãããã·ãµã¼ãã®å°å ¥
æ¨å¹´ã¾ã§ã¯ã¡ã«ã«ãªã§ãåãµã¼ãæ¯ã«Incoming Webhooksã®URLãåãè¾¼ãã åéç¥ããã°ã©ã ãæ£ãã°ã£ã¦ãã¾ãããããã¦ãããæ¥è«¸äºæ ã«ãã大å ã®Incoming Webhooksã®URLã夿´ããæ°æ¥å¾ããã¤ãã®ãµã¼ãã§å¤æ´æ¼ãããããã¨ãããã°ãã¹ãã¬ã¼ã¸ãµã¼ãã¹ã«ã¤ã³ãã¼ãããããã°ã©ã ã®å®è¡ã¨ã©ã¼ãSlackã«éç¥ããã¦ããªãã®ãçºè¦ãããªã©ã¤ã³ã·ãã³ããçºçããããç¶æ ã§ããã
ã¾ããSlackã¸ã¡ãã»ã¼ã¸ããã¹ãããåããã°ã©ã ã®å®è£ è¨èªããã©ãã©ãªãã¨ãéç¨ç®¡çã®ç ©éãã«æè»ãããã¦ãã¾ããã
ãããã£ãäºæ ããããç¾å¨ã¯Slackã®ãããã·ãµã¼ããç«ã¦ã¦ãã®ãããã·ã¨éä¿¡ããã¯ã©ã¤ã¢ã³ãã³ãã³ããåãµã¼ãã«é ç½®ããã¨ããæ§æã«ç§»è¡ãã¦ãã¾ãã
ãã®ãããã·ãµã¼ãã¨ãã®ä»å±ãã¼ã«ç¾¤ã次ã«ç´¹ä»ããslackboardã§ãã
slackboard
slackboardã¯Goã§æ¸ãããSlackã®ãããã·ãµã¼ãã§ä»¥ä¸ã®3ã¤ã®ããã°ã©ã ã§æ§æããã¦ãã¾ãã
ããã°ã©ã å | 解説 |
---|---|
slackboard | Slackã®ãããã·ãµã¼ã |
slackboard-cli | slackboardã«ã¡ãã»ã¼ã¸ããã¹ãããããã°ã©ã |
slackboard-log | ããã°ã©ã ã®å®è¡ã«å¤±æããæã ãslackboardã«ã¡ãã»ã¼ã¸ããã¹ãããããã°ã©ã |
slackboard
ãèµ·åããã«ã¯è¨å®ãã¡ã¤ã«(TOML)ãå¿
è¦ã§ããæå°è¨å®ã§ã¯ä»¥ä¸ã®ããã«slackboard
ãlistenãããã¼ãçªå·(port
)ã¨Slackã®Incoming Webhooksã®URL(slack_url
)ãè¨è¿°ãã¾ãã
# slackboard.toml [core] port = "29800" slack_url = "https://hooks.slack.com/services/..."
ãã£ã³ãã«ã«ã¿ã°ãä»ãããéç¥ã¢ã¤ã³ã³ã夿´ãããã¨ãã§ããã®ã§ããããã£ã¨è©³ããç¥ãããæ¹ã¯slackboard/CONFIGURATION.mdãåç §ãã¦ãã ããã
-c
ã§è¨å®ãã¡ã¤ã«ãæå®ãã¦slackboard
ãèµ·åãã¾ãã
$ slackboard -c slackboard.toml
slackboard
ã¯Slackã®Incoming Webhooksã®URLãç¥ã£ã¦ããã®ã§ãåãµã¼ãã«é
ç½®ãããslackboard-cli
ã¯
åã«Slackã«ãã¹ããããã¡ãã»ã¼ã¸ãslackboard
ã«ãã¹ãããã ãã§ãããéç¥ããã°ã©ã å´ã§Incoming Webhooksã®URLãåãè¾¼ãå¿
è¦ã¯ããã¾ããã
å®éã«slackboard-cli
ã§slackboard
ãçµç±ãã¦Slackã«ã¡ãã»ã¼ã¸ããã¹ãããã®ã¯ä»¥ä¸ã®ããã«ãã¤ãçµç±ã§ã¡ãã»ã¼ã¸ãslackboard-cli
ã«æ¸¡ãã¾ãã
$ echo slack-proxy | slackboard-cli -s slackboard-host:29800 -c #tech-test -u cubicdaiya
ä¸è¨ã®ã³ãã³ããå®è¡ããã¨slackboard
(slackboard-host:29800)ãslackboard-cli
ããã®ã¡ãã»ã¼ã¸ãåä¿¡ãã¦Slackã®#tech-testãã£ã³ãã«ã«ã¡ãã»ã¼ã¸ããã¹ããã¾ãã
ããã§éç¥ããã°ã©ã å´ã§Slackã®Incoming Webhooksã®URLãç¥ããªãã¦ãSlackã«ç°¡åã«éç¥ã§ããããã«ãªãã¾ããã
slackboard-logã§ããã°ã©ã ã®å®è¡å¤±ææã«ã®ã¿Slackã«éç¥ãã
slackboard
ã¨slackboard-cli
ãå©ç¨ãããã¨ã§Slackã«æ°è»½ã«ã¡ãã»ã¼ã¸ããã¹ãã§ããããã«ãªãã¾ããã
ããããæã
ããã°ã©ã ã®å®è¡ã«å¤±æããå ´åã«ã®ã¿Slackã«éç¥ãã¦ã»ãããã¨ãããã¾ãã
ä¾ãã°gsutil
ã§Google Cloud Storageã«ãã°ãã¤ã³ãã¼ãããå ´åãèãã¦ã¿ã¾ãããã
æ»
å¤ã«èµ·ããã¾ããããå¤é¨ãµã¼ãã¹ã¨ãããã¯ã¼ã¯éä¿¡ããã®ã§å¤±æããå ´åãèæ
®ããªããã°ãªãã¾ããã
ãªã®ã§å¤±æããå ´åã ãslackboard-cli
ã§Slackã«éç¥ããå¦çãã·ã§ã«ã¹ã¯ãªããã§æ¸ãã¦ã¿ã¾ãã
# copy log file to Google Cloud Storage
gsutil cp /data/${data_log}_20150505.log.gz gs://${bucket}/
result=</span><span class="synStatement">echo</span><span class="synConstant"> </span><span class="synPreProc">$?</span><span class="synSpecial">
if [ $result -ne 0 ];
then
echo "@channel: failed to copy log to Google Cloud Storage(${date_log})." | \
slackboard-cli -s slackboard-host:29800 -t error-gcs
exit
fi
ãã®ããæ¹ã¯æ±ç¨çã§ãã䏿¹å°ãç ©éã§ããããã¦ç§ã¯è¨æ¶åãæªãæªã ã«ã·ã§ã«ã¹ã¯ãªããã®ifæãç´ ã§æ¸ããã¨ãã§ããªãã®ã§æ¯åã°ã°ãç¾½ç®ã«ãªãã¾ãã
次ã«crontabã«æ¸ãããã¹ã¯ãªããã®å®è¡ã失æããéã«Slackã«éç¥ãããã¨ãã¾ãã
0 6 * * * some-command some-args
some-command
ãã©ãããã¦some-command
ã失æããéã«Slackã«éç¥ãããã¸ãã¯ãåãè¾¼ããã¨ãã§ããã°ä¾¿å©ã§ãã
ä¼¼ããããªãã¨ããããã¼ã«ã«cronlog
ãããã¾ãã
0 6 * * * cronlog -- some-command some-args
cronlog
ã¯Q4Mãh2oã®éçºè
ã§ãã@kazuhoãããgithubã§å
¬éãã¦ããkaztoolsã«å«ã¾ããã³ãã³ãã¦ã¼ãã£ãªãã£ã§ããä¸è¨ã®ããã«cronlog
ãã¯ããã¨some-commnd
ã失æãã(ãªã¿ã¼ã³ã³ã¼ããéã¼ãã®)ã¨ãã«ã ãå®è¡çµæãæ¨æºåºåãæ¨æºã¨ã©ã¼åºåã«åããã¨ãã§ãã¾ãã
slackboard-log
ã¯some-command
ã失æãã(ãªã¿ã¼ã³ã³ã¼ããéã¼ãã®)ã¨ãã«ã ãslackboard
çµç±ã§Slackã«ã¨ã©ã¼å
容ãéç¥ããããã°ã©ã ã§ãã
0 6 * * * slackboard-log -s slackboard-host:29800 -t error-some -- some-command some-args
ä¾ãã°ãåå¨ããªããã¡ã¤ã«ãls
ãããã¨ããã¨ã¨ã©ã¼ã«ãªãã¾ããã
$ ls notfound ls: notfound: No such file or directory $ echo $? 1 $
ããã«slackboard-log
ãã¯ããã§ã¿ã¾ãã
$ slackboard-log -s slackboard:29800 -c #tech-test -u cubicdaiya -- ls notfound
ããã¨ãããªé¢¨ã«Slackã«éç¥ããã¾ãã
ã¨ããã§ãã¡ã«ã«ãªã§ã¯@kazeburoãããPerlã§æ¸ããslacklog
ã¨ããslackboard-log
ã¨åãç¨éã®ããã°ã©ã ã®æ¹ã主æµã ã£ãããã¾ãã(slacklog
ã®æ¹ãslackboard-log
ãããå
ã«å®è£
ããã¦æå
¥ãããã®ã§)
slackboard-cli
ãslackboard-log
ãslacklog
ã¯slackboard
ã®HTTPãã¼ã¹ã®APIãå
ã«éä¿¡ãã¦ããã®ã§æ°ãã«slackboard
ã¨éä¿¡ããã¯ã©ã¤ã¢ã³ããä½ãã®ã¯é£ããããã¾ãããèå³ã®ããæ¹ã¯slackboard/SPEC.mdãã覧ä¸ããã
ã¾ã¨ã
ã¡ã«ã«ãªã§ã®Slackã¨Slackã®ãããã·ãµã¼ãã§ããslackboardã®æ´»ç¨ã®ä»æ¹ã«ã¤ãã¦è§£èª¬ãã¾ããã
Slackã¸ã®éç¥ãç´æ¥ã§ã¯ãªããããã·ãä»ãã¦è¡ãã®ã«ã¯ä»¥ä¸ã®ã¡ãªãããããã¾ãã
- Slackã¸ã®éç¥è¨å®ããããã·ãµã¼ãã§ä¸å 管çã§ãã
- åãµã¼ãã«æ£ãã°ã£ãSlackã¸ã®éç¥ããã°ã©ã ã䏿¬åã§ãã
- Slackã¸ã®ã¡ãã»ã¼ã¸ã®ãã¹ãããã®ã³ã°ã§ãã
slackboardã¯ãããã£ãç®çãéæããããã«éçºãã¾ãããå ã ã¯æ¨å¹´æ«ã®å¬ä¼ã¿åæ¥ã«è¨å®å¤æ´æ¼ãã«æ°ä»ããç´å¾ã¤ãã«ãã¨ãªã£ã¦1æéã§æ¸ãããã®ã§ããã使ã£ã¦ã¿ããæãã®ã»ã便å©ã ã£ãã®ã§å¹´æãã«æ¬çªæå ¥ãã¦ä»ã«è³ãã¾ãã
ããã§ã¯å¿«é©ãªSlackã©ã¤ããã