tjinjin's blog

インフラ要素多めの個人メモ

社内で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: