社内でisucon6対策をした(追憶編
About
かなり昔に書いた記事が塩漬けになっていたので放流します。 isucon6は結局惨敗でしたが、その前に事前に勉強会した記録を残しておきます。
環境
pixivさんの問題で練習しました! 各競技者用に競技用インスタンスとベンチマーカーをそれぞれ用意しました。
ポータル
最初はポータルを頑張って構築しようと思っていて、一度動く所まで確認したんですが再度構築し直したら動かなくなってたので、mackerelのサービスメトリックを使ってスコアを記録するようにしました。下にスクリプト置いておきます。
#!/bin/bash -eu # ベンチマーカ用インスタンスで動かして下さい! TEAM_NAME="xxxxx" # edit TARGET_IP="XX.XX.XX.XX" # edit FACEICON=${FACEICON:-":ghost:"} # change your favorite icon! BENCHMARKER="/opt/go/bin/benchmarker" USERDATA_DIR="/opt/go/src/github.com/catatsuy/private-isu/benchmarker/userdata" RESULT=`${BENCHMARKER} -t http://${TARGET_IP}/ -u ${USERDATA_DIR}` echo ${RESULT} | jq '.' PASS=`echo ${RESULT} | jq '.pass'` [ ${PASS} != 'true' ] && exit SCORE=`echo ${RESULT} | jq '.score'` ###### # slack notify ##### # isucon WEBHOOKURL="https://hooks.slack.com/services/xxx" CHANNEL=${CHANNEL:-"#general"} BOTNAME=${BOTNAME:-"isucon score bot"} MESSAGE="Team ${TEAM_NAME} score : " WEBMESSAGE="*${SCORE}*" # post curl -s -S -X POST --data-urlencode "payload={\"channel\": \"${CHANNEL}\", \"username\": \"${BOTNAME}\", \"icon_emoji\": \"${FACEICON}\", \"text\": \"${MESSAGE}${WEBMESSAGE}\" }" ${WEBHOOKURL} ##### # mackerl ##### # api MACKEREL_API_KEY="xxx" MACKEREL_ENDPOINT="https://mackerel.io/api/v0/services/xxx" # post curl="curl https://mackerel.io/api/v0/services/ff-isucon/tsdb \ -H 'X-Api-Key: ${MACKEREL_API_KEY}' \ -H 'Content-Type: application/json' \ -X POST \ -d '[{\"name\": \"score.${TEAM_NAME}\", \"time\": '$(date +%s)', \"value\": ${SCORE}}]'" eval $curl
仕組みは単純で、ベンチの結果をmackerelにポストしているだけです!
実は当日うまく動かなかったので、設定足りないかもしれません :bow: