45
30days Albumの裏側 ~監視・インフラCI事情~ Monitoring Casual #7 http://www.zusaar.com/event/9807003 OKUMURA Takahiro

30days Albumの裏側〜監視・インフラCI事情〜 #monitoringcasual

Embed Size (px)

Citation preview

30days Albumの裏側!~監視・インフラCI事情~

Monitoring Casual #7 http://www.zusaar.com/event/9807003

!

OKUMURA Takahiro

OKUMURA Takahiro!

@hfm @tacahilo!

2013年ペパボ新卒入社の2年目インフラエンジニア

dvorak-jp配列の愛用者です

容量 603,966.837GBぐらい

オブジェクト数 1,858,383,772!レプリカ含むと1.x倍

30days Albumの裏側インフラ

30days Albumの裏側見てる人たち

@hfm

@tnmt

@lamanotrama

@pbmasaki

インフラ

監視普通の

nagios

munin

最初は普通の白いmunin 2.0でした!(daysのスクショが無かったので別サービスので代用)

kibanaみたいな色にしたい。

  *'``・* 。   |     `*。 ,。∩      *  system perlの + (´・ω・`) *。+゚  モジュールを `*。 ヽ、  つ *゚*   ごにょごにょ~  `・+。*・' ゚⊃ +゚  ☆   ∪~ 。*゚   `・+。*・ ゚

これはもうmunin3.0といってもいいんではないだろうか。

遠くの街が戦火に包まれているようなグラフだ。

地獄のグラフ

燃えてるのうちのサーバやで

関係者の声

変更の一部--- /usr/lib/perl5/vendor_perl/5.8.8/Munin/Master/GraphOld.pm.orig 2014-03-29 09:26:42.000000000 +0900 +++ /usr/lib/perl5/vendor_perl/5.8.8/Munin/Master/GraphOld.pm 2014-06-09 21:23:19.000000000 +0900 @@ -1677,15 +1677,15 @@ } else { # At least 1.3 @options = ( - '--font', 'DEFAULT:0:DejaVuSans,DejaVu Sans,DejaVu LGC Sans,Bitstream Vera Sans', - '--font', 'LEGEND:7:DejaVuSansMono,DejaVu Sans Mono,DejaVu LGC Sans Mono,Bitstream Vera Sans Mono,monospace', - # Colors coordinated with CSS. - '--color', 'BACK#F0F0F0', # Area around the graph - '--color', 'FRAME#F0F0F0', # Line around legend spot - '--color', 'CANVAS#FFFFFF', # Graph background, max contrast - '--color', 'FONT#666666', # Some kind of gray - '--color', 'AXIS#CFD6F8', # And axis like html boxes - '--color', 'ARROW#CFD6F8', # And arrow, ditto. + '--font', 'DEFAULT:0:Helvetica Neue,DejaVuSans,DejaVu Sans,DejaVu LGC Sans,Bitstream Vera Sans', + '--font', 'LEGEND:7:Helvetica Neue,DejaVuSansMono,DejaVu Sans Mono,DejaVu LGC Sans Mono,Bitstream Vera Sans Mono,monospace', + '--color', 'FONT#EEEEEE', + '--color', 'ARROW#3D3D3D', + '--color', 'AXIS#3D3D3D', + '--color', 'BACK#1F1F1F', + '--color', 'CANVAS#1F1F1F', + '--color', 'SHADEA#1F1F1F', + '--color', 'SHADEB#1F1F1F', ); }

変更の一部--- /usr/lib/perl5/vendor_perl/5.8.8/Munin/Master/GraphOld.pm.orig 2014-03-29 09:26:42.000000000 +0900 +++ /usr/lib/perl5/vendor_perl/5.8.8/Munin/Master/GraphOld.pm 2014-06-09 21:23:19.000000000 +0900 @@ -1677,15 +1677,15 @@ } else { # At least 1.3 @options = ( - '--font', 'DEFAULT:0:DejaVuSans,DejaVu Sans,DejaVu LGC Sans,Bitstream Vera Sans', - '--font', 'LEGEND:7:DejaVuSansMono,DejaVu Sans Mono,DejaVu LGC Sans Mono,Bitstream Vera Sans Mono,monospace', - # Colors coordinated with CSS. - '--color', 'BACK#F0F0F0', # Area around the graph - '--color', 'FRAME#F0F0F0', # Line around legend spot - '--color', 'CANVAS#FFFFFF', # Graph background, max contrast - '--color', 'FONT#666666', # Some kind of gray - '--color', 'AXIS#CFD6F8', # And axis like html boxes - '--color', 'ARROW#CFD6F8', # And arrow, ditto. + '--font', 'DEFAULT:0:Helvetica Neue,DejaVuSans,DejaVu Sans,DejaVu LGC Sans,Bitstream Vera Sans', + '--font', 'LEGEND:7:Helvetica Neue,DejaVuSansMono,DejaVu Sans Mono,DejaVu LGC Sans Mono,Bitstream Vera Sans Mono,monospace', + '--color', 'FONT#EEEEEE', + '--color', 'ARROW#3D3D3D', + '--color', 'AXIS#3D3D3D', + '--color', 'BACK#1F1F1F', + '--color', 'CANVAS#1F1F1F', + '--color', 'SHADEA#1F1F1F', + '--color', 'SHADEB#1F1F1F', ); }

他にも /etc/munin/static/style.css とかhtmlも変更入ってるんですが,全部追い切れず

変更の一部--- /usr/lib/perl5/vendor_perl/5.8.8/Munin/Master/GraphOld.pm.orig 2014-03-29 09:26:42.000000000 +0900 +++ /usr/lib/perl5/vendor_perl/5.8.8/Munin/Master/GraphOld.pm 2014-06-09 21:23:19.000000000 +0900 @@ -1677,15 +1677,15 @@ } else { # At least 1.3 @options = ( - '--font', 'DEFAULT:0:DejaVuSans,DejaVu Sans,DejaVu LGC Sans,Bitstream Vera Sans', - '--font', 'LEGEND:7:DejaVuSansMono,DejaVu Sans Mono,DejaVu LGC Sans Mono,Bitstream Vera Sans Mono,monospace', - # Colors coordinated with CSS. - '--color', 'BACK#F0F0F0', # Area around the graph - '--color', 'FRAME#F0F0F0', # Line around legend spot - '--color', 'CANVAS#FFFFFF', # Graph background, max contrast - '--color', 'FONT#666666', # Some kind of gray - '--color', 'AXIS#CFD6F8', # And axis like html boxes - '--color', 'ARROW#CFD6F8', # And arrow, ditto. + '--font', 'DEFAULT:0:Helvetica Neue,DejaVuSans,DejaVu Sans,DejaVu LGC Sans,Bitstream Vera Sans', + '--font', 'LEGEND:7:Helvetica Neue,DejaVuSansMono,DejaVu Sans Mono,DejaVu LGC Sans Mono,Bitstream Vera Sans Mono,monospace', + '--color', 'FONT#EEEEEE', + '--color', 'ARROW#3D3D3D', + '--color', 'AXIS#3D3D3D', + '--color', 'BACK#1F1F1F', + '--color', 'CANVAS#1F1F1F', + '--color', 'SHADEA#1F1F1F', + '--color', 'SHADEB#1F1F1F', ); }

まあもし壊れても白いmuninに戻せるし別にいいか…

consulとかsensuは?

• nagiosで十分安定稼働している実績があるし,これで十分

• consul-alertはカッコいいけど,オンプレでサーバ増減の少ない環境だと旨味が少ない

consulとかsensuは?

• sensu (というかRabbit MQ) はハマるからしんどい

• sensu-puppetがイマイチ (触った頃はあまり成熟してなかった)

• トラブルの原因は大抵Rabbit MQやRedisで,sensuの構成要素に対する学習コストが高いのでは?という印象

インフラCIごめんなさい!

未完成!

UkigumoServerspec Docker

なぜインフラCI?たぶん普通の理由

daysのインフラに変更があると…1. Vagrant (&VirtualBox) でVMを起動

2. Puppet で provisioning

3. Serverspecでテスト

4. PullRequestでレビュー

5. 本番環境へDeploy

時間かかる1. Vagrant (&VirtualBox) でVMを起動

2. Puppet で provisioning

3. Serverspecでテスト

4. PullRequestでレビュー

5. 本番環境へDeploy

←重い!

←めんどくさい!

←めんどくさい!

←しょうがない!

←しょうがない

時間かかる1. Vagrant (&VirtualBox) でVMを起動

2. Puppet で provisioning

3. Serverspecでテスト

4. PullRequestでレビュー

5. 本番環境へDeploy

←重い!

←めんどくさい!

←めんどくさい!

←しょうがない!

←しょうがない

ここをなんとかしたい=> CIしよう

なぜDocker?

最初はVirtualBoxも検討しました

• Vagrant & VirtualBoxを使ってるなら,CI環境もそれに合わせたい

• 社内にはMaglicaというInternal Cloud (VM) 環境がある

• VM上にCI環境を構築したい,が…

【資料】Maglica

http://www.slideshare.net/mizzy/maglica-techkayac https://github.com/mizzy/maglica

インフラCIをする上での課題母艦!

(Maglica)

VM VM VM •••

VM上でVirtualBoxを起動できない!! (VT-xが動かないとかエラーが出る)=> Vagrant & VirtualBox なCIはキツそう

そうだDockerを使おう

• VM on VMは厳しい(vagrant-kvmとかあるけど…)

• Dockerはいくつかサービスが動かないけど,妥協点としては上々

なぜUkigumo?

なぜUkigumo?

• Jenkinsを愛せなかった

• Dockerさえ動けばいいのでJenkinsのような分厚さは不要

• (Ukigumoちゃん可愛い)

UkigumoでCIする• CIサービス自体への依存を極力減らす

• Jenkinsの環境変数や,CIから与えられるパラメータを使わない

• シェルスクリプト1枚でCI出来るようにする

• UkigumoはTravis-CIみたいにyamlで実行内容を記述出来るけど,あくまでスクリプトを呼び出すだけに留める

ざっくりインフラCIフロー

UkigumoServerspec Docker

push

web hook

pull

Puppet provision & Serverspec

Container

push

web hook & pull

Puppet provision & Serverspec

Container

未完成?

• 環境自体は完成,Ukigumoちゃんは動いてる

• しかしDockerの設定にハマって,十分なCIが出来ていない

• コンテナ内でeth1 (lan) を付けるのがしんどかったり起動しないサービスのためにprovisioningの条件分岐を考えたり…

今後の展開予定1. まずDockerの設定でハマりまくってるのでなんとかする

2. Infratasterで振る舞いテストも導入する

3. CI作った環境の作り方をGitHubとかで公開する

• UkigumoちゃんをItamaeでポンと作れるようにしました

ご清聴ありがとうございました色々間に合ってなくてすいません…