Hateburo: kazeburo hatenablog

SRE / 運用系小姑 / Goを書くPerl Monger

2018年 作った・喋ってきたまとめ

振り返り的なやつです。

作った

no_excl_open

github.com

LD_PRELOADをつかって、ファイルを作成する際の O_EXCLを取り除いてみるもの。

詳しくは YAPC::Okinawa 2018 前夜祭で喋った

speakerdeck.com

relaxlogs

github.com

daemontoolsで動かしているデーモンのログをもう少し長くとりたいということで書いたもの。lestrratさんのfile-rotatelogsをコマンドにしたものとも言える

wsgate-server

github.com

なんらかの汎用的な認証を通して、MySQLに繋ぎたいということで書いていたもの。WebSocketはインターンにきていた優秀な若者がだしたアイディアからきている。

wsgate-client

github.com

wsgate-serverのclient。そういえば某productionでMySQLに対してコンテナから接続するために動き始めている。

この2つに関してはblog書いていた。

kazeburo.hatenablog.com

mackerel-plugin-linux-process-status

github.com

プロセス単位のCPU使用率をとるために書いた。statusと言いつつCPU使用率しかとれないので名前負けしている。

とあるリリースでMySQLのCPU使用率があがっていたが、昼間に気づかずアクセスの上がる夜間にサービスに影響がでてしまった障害があり、影響が出てしまう前に検知するためにつくった。

サーバのCPU使用率で十分じゃないかと思うが、backupやログの圧縮でCPU使うことがあり、単純な監視では誤検知が多くなりそうということで、この監視プラグインを作成した。現在は全てのMySQLサーバに導入済み。

sabo

github.com

毎日0時に動くとある処理に、複数のDBからデータをmysqldumpなどでかき集めて、処理に適したフォーマットに変換して、S3にアップロードするというものがあるのだが、その際にネットワークを使いすぎて、サービスに影響が出ているかもしれないということで作った。(サービスへの影響は別の原因だったわけだが)

throttleというコマンドがあり、これはpipeで挟み込むことで処理の速度を制限するものがある。production環境でも巨大なログの転送などで利用している。

linux.die.net

cgroupsを使うというアイディアもチームで話をしたときにあったが、ピンポイントで帯域制限ができるthrottle形式でやってみた。

MAX_BW=100M
WORK_DIR=/tmp/sabo_for_dump
mkdir -p /tmp/sabo_for_dump
mysqldump -h backup1 db table1  | sabo --max-bandwidth $MAX_BW --work-dir $WORK_DIR > /tmp/sabo_for_dump/table1.sql &
mysqldump -h backup2 db table2  | sabo --max-bandwidth $MAX_BW --work-dir $WORK_DIR > /tmp/sabo_for_dump/table2.sql &
wait

saboはwork-dir内にファイルをつくり、flockをかける。一定間隔でwork-dir内のflockがかかったファイルの数を数え、max-bandwidthをそれで割る。

なので、2つのmysqldumpのうち、一つが終われば残った方は最大の帯域が使えるようになるということ。production環境でも落としてくるデータのサイズはバラバラなので、等しく帯域制限をかけてしまうと無駄が多くなる。

名前は「みいつけた」からとった。

motarei

github.com

Dockerコンテナを雑に動かして、さらにHot Deployしたいと思って書いたもの。blogも書いていた。

kazeburo.hatenablog.com

motarei + server starterという環境でproductionで某某が動き始めている。

ところで、productionで動かし始めて気づいたことではあるが、go版のserver starterには、新しいプロセスが正しく起動してなくても、古いプロセスを止めてしまうという問題があった。

こちらは修正済みになる。

Fix worker exiting detection by kazeburo · Pull Request #17 · lestrrat-go/server-starter · GitHub

ちなみに名前は「みいつけた」からとった。

--

6/7がGo言語、のこり一つがC言語。 社内のrepoにしかないものでもGo言語が増えている。Perlで書くのはmackerelの監視プラグインぐらいだ。

喋ってきた

気づいたら後半は喋ってない

2月 Developers Summit

インフラチームからSREへ / SRE in Mercari Developers Summit 2018

speakerdeck.com

3月 YAPC::Okinawa 2018 ONNASON

speakerdeck.com

沖縄楽しかった!

3月 MANABIYA Teratail developer days

speakerdeck.com

7月 July Tech Festa 2018

speakerdeck.com

--

仕事ではSREに新メンバーが増え、MySQL、検索、データセンターのプロジェクトなどチームとしてできることがかなり広がってきました。その一方で北海道での地震の影響、外部のネットワークトラブル、データベースへの負荷などお客様にご迷惑をおかけしてしまうこっとも多くありました。お客様に信頼性や価値を届けるためにできることはまだまだあると考えており、来年以降も取り組んでいきます。

そろそろ「SREは死んだ、これからはXXXだ」みたいなトークやりたい