負荷試験についてのはなし

こんばんは.

今日こそは,技術的な話題を書いていきます.

僕はインフラエンジニアなんですが,最近,仕事でとあるサイトの構成を変更しました. そこで,構成変更後のサイトが十分な req/sec を発揮できるかを確かめる必要がありました.

以前までの負荷試験では,gatling を利用していましたが,今回,負荷試験するサイトは 1つのサーバーからかける負荷には十分耐えられるだろうということがわかっていました.

そこで,複数のサーバーから分散して負荷をかけられるようなツールを使う必要がありました. 代表的なものとしては,jmater などがあります.

しかし,構成変更を完了するまでの時間が少なかったこと,そして,最悪でも元のサーバーのスペックから必要な resources を見積もれるだろう ということもあり,jmater ほどきちんとした情報を集める必要はありません.

そこで,もっと簡単に付加をかけることができそうな locust を採用することにしました.

この子は,Python 製の負荷試験のためのフレームワークというようなもので,簡単なコードを書くだけで負荷試験を実現できます. もちろん,複数のサーバーから負荷をかけることもできます.

インストール方法などは,他のブログ等を参考にしてもらうとして,ここでは,locust を利用した負荷試験のためのコードを紹介したいと思います.

ということで,明日はコードについて解説します

禁煙を始めたはなし

人生何度目かの禁煙を始めました.

何度かタバコをやめていて,最長で 1 年とちょっと,挫折したきっかけはとある古いミドルウェアとの戦いでイライラしすぎて...と言った感じです.

僕は,禁煙するときに ”ニコチンパッチ” か ”チャンピックス” を使います. どちらも禁煙にあたっての離脱症状をとっても抑制してくれます. ストレスフリーな連休中(ちょうど今だね!)に始めると,辛さは殆ど無く禁煙を続けていくことができます.

以前,根性だけでやめようとした時は,まぁ,キツかったです.

ということで,挫折したら罵倒すると良いと思うよ!.


ブログを 一ヶ月連続で続けようという活動を,会社の仲間としています. 2日目にして,技術的な内容ではなくなっちゃいましたが,何個か書きたい技術的な話題もあるので, 次とかその次とかにはきっと技術的な話題を書きます....

ErgoDox EZ を買いました

買いました.初日です. まず,今日一日はデフォルトのキー配列で利用してみました.

初めてキーボードに触った時のような時の気持ちを取り戻した1日でした.

まず,良かったこととしては,入力姿勢はものすごく楽です. 健康によい感じがします,肩こりとおさらばできそうです.

次に,運指が矯正されます.いつも,適当に楽な指で入力していたのが,正しい指運びになります. あと,親指を活用できるのが良いですね.

次に,キツかった点.

ある程度わかっていたことですが,修飾キーの配置が全然違います. なので,キーボードショートカットを利用するときにいちいち立ち止まって考えなければならないのが辛いです.

あと,記号の位置も結構違います. コーディングの時,かなり戸惑います.

そして,指運びを普通のキーボードを使っている時と変える必要がありました. 割と厳密に,タッチタイピングのお作法に従って,運指することを強制される感じ.

だけど,このデメリットは,基本的には,慣れで改善する問題なので,しばらく利用していくうちに なんとかなるだろうと楽観してます.

何よりも,日常的にいつも行っている動作を見直す,という行為がとても面白いです. ほんとに初心者のようなタイピングしかできない状態に立ち返って,そこから,練習して段々慣れていくというのが面白い.

練習して,できないことができるようになるってのはどんなに小さいことでも面白いものです.

...,まぁこの記事は,MacBook Pro のキーボードで書いてるんですけどね. ErgoDox EZ ,会社においてきちゃったし,GW あけにはまた赤ちゃんのような状態に戻っているんだろうなぁ....

mruby-cli を頑張る

Hello World まで

mruby-cli を利用すると,LinuxOSX などでネィティブに動作するバイナリを作成できるらしいです.

puppet で Ruby で作成したコードを Gem を利用してデプロイしようとしたところ,ドハマリしたので,それならいっそのこと, こういったツールを使って,バイナリぽんおきで動くようにすると幸せかなぁと思ったのがきっかけです.

mruby にしたのは,ngx_mruby とか,ミドルウェアを操作する言語として mruby が採用される事例が多くなってきたのと, 社内で mruby が流行ってるからですね.

まずは,インストールと hello world から.

インストールは,https://github.com/hone/mruby-cli からバイナリを落としてきて, PATH が通った適当な場所に置くだけです.

> wget https://github.com/hone/mruby-cli/releases/download/v0.0.4/mruby-cli-0.0.4.tgz
> tar xzvf mruby-cli-0.0.4.tgz
> cp x86_64-apple-darwin14/mruby-cli ~/bin/

そして,

> mruby-cli --setup hello_world
> cd hello_world
> docker-compose run compile

ってやると,hello_world まではできます.

転職しました

むちゃくちゃ久しぶりな更新になりましたが、9月7日に転職しました。 1週間程度を、現職で過ごしてみて、感想を少しまとめてみようかと思います。

これから先も、現職で働き始めた驚きを忘れないようにするために。

1週間を過ごしてみて

まず、入社してみて一番に感じたことは孤立しないようにフォローしてくれてるなってことです。 例えば、いろんな人とランチに連れてってくれたりとか。

それだけじゃなくて、入社時のフォローもすごく手厚かった。 割と早い段階で仕事上で、必要なツールや情報へのアクセスは整えられていった感じです。 前職もその前も、割と手探りで、この辺り頑張って行った感じだったので良さがありました。

人と環境については、こんな感じです。

技術的な面だと、インフラをコードとして管理するってのが徹底されている感じしました。 いわゆる「infrastructure as code」を徹底している感じで、運用をPuppetのコードベースで行っています。

前職では、Chefを利用していたんですが、これは、プロビジョニングツールとしてしか利用していませんでした。 運用は、手順書ベースで行っていました。

前職で、一度、Chefベースで構築から運用までやろうとして挫折しているんで、若干悔しい感じがしますが、 現職では、理想に近い形で「infrastructure as code」ができているんじゃないかなと思います。

あとは、現職だと、情報をGHEに集約しているんですが、これも良いですね。 前職では、情報が複数ツールに分散していたんで、いろいろ大変でした。

まとめ

書こうと思えば、まだ、たくさんかけるんですが、とりあえずこんな感じで。 まだまだ、働き始めて2週間程度なので、これからいろいろな驚きに出会っていくんだと思います。 次はひと月後ぐらいに、また、印象をまとめてみようかと思います。

Graphiteを利用して構築したMetrics収集システムについて

Graphiteを利用した監視システム

  • Graphiteシステムについて
  • GraphiteへのMetricsの送信
  • Graphiteのクラスターについて
    • Graphiteの冗長性の担保
    • Graphiteのスケーラビリティ

前回のブログで、だいぶ前になっちゃったけど、CactiをやめてGraphiteを使おうよ、と書きました。 今回は、僕の会社で、実際にCactiからGraphiteへ移行するプロジェクトを進めてみての知見についてまとめます。 ちな、現在進行形で置き換えを頑張ってます、手が遅いので…

Graphiteシステムについて

前にも書いたと思いますが、Graphiteとは単一のApplicationではありません。 幾つかのApplicationが組み合わさって構成されるシステムです。 下記のソフトウェアを組み合わせて使います。

  • graphite-web

    • Grapheを作るところ
  • carbon-cache

    • Metricsを受信し、whisperと呼ばれるRRDと似た仕組みでtime serise dataを格納する
  • carbon-relay

    • 受信したMetricsを特定のルールに従って、carbon-cacheへ分配する
  • carbon-aggregator

    • Metricsに対して処理を行う

これらを適当に組み合わせて、Metricsを収集し、グラフ化するシステムを構築していきます。 最低限、

- graphite-web
- carbon-cache

は必要ですね。

GraphiteへのMetricsの送信

前述したシステムには、Metricsを送信するApplicationがありませんでした。 Cactiのようなシステムを作成するには、サーバーの情報を取得し、carbon-cacheへ送信する仕組みがなければなりません。

このような、ApplicationはGraphiteシステムには存在していません。 Graphite(carbon-cache)に対応している、任意のApplicationを用います。 私は「collectd」というApplicationを使用しています。

collectd

ここで、Graphiteシステムからは外れますが、「collectd」について紹介しておきましょう。 collectdはC言語で実装された、軽量な、Metrics収集、送信システムです。 Pluginにより、様々な拡張が可能であり、自由度も高いです。

私は、collectdにcarbon-cacheへMetricsを送信するPluginを組み込んで使用しています。

Graphiteのクラスターについて

Graphiteは単純なクラスター構成を組むことができます。 負荷分散目的のクラスターと、冗長化目的のレプリケーションという種類があります。

...ここまで書いてめんどくさくなったので、詳細はそのうち書きます。

Cactiを捨ててGraphiteを使うべき理由

導入がひと通り完了したので、Graphiteについて情報を出していくよ。 最初は、Graphiteって一体なんなのか、についてまとめる。

Graphiteって

Graphiteってのは、一言で表すと「収集した情報をグラフにするソフトウェア郡」のことだ。 Graphiteは下記のソフトウェアから構成される。

1. graphite-web
2. carbon

graphite-web

graphite-webとは、実際にグラフを表示する部分だ。 正直、UIの出来はあまり良くない。 こいつの一番の売りは、APIを利用してグラフの見た目をカスタマイズしたり、統計処理をかけられるところにある。 下記に、APIをまとめたページが有る。英語であるが、何となくわかると思う。

このAPIを利用すれば、要件にあったグラフを作ることが簡単にできる。 また、画像としてデータを取り出すだけでなく、json、csv等といった形式でも取り出せるので、javascriptに食わせて かっこいいグラフを書くなんてこともできる。

まぁ、バグも多いけど。 インストールはこのブログの前の記事を見れば問題無いと思う。

carbon

graphiteはrrdを使用しない。 代わりに独自のwhisperと呼ばれる形式でMetricsを集積する。 rrdと比べた際のwhisperのメリットは主に下記の3つ。

  • RRDは最新の更新の前にタイムスロットをアップデートすることができない
  • RRDはイレギュラーなアップデートが出来るように設計されていない
  • 遅滞なく更新が書き込まれる

パフォーマンス

carbonは割りと大量のMetricsを処理することができて、僕は30000を超えるMetricsを30秒から300秒間隔でためているけど、 今のところ問題はない。

Carbonができないこと

ところで、carbonはMetricsを受けるだけで、送信することはできない。 carbonにMetricsを集めさせたければ、対応したMetrics収集ソフトウェアを利用するか、自前で実装するしかない。 だけど、対応している収集ソフトウェアはいろいろあるので、心配しなくて大丈夫。 自分で実装するにしても、パケットフォーマットは単純だし、そこをカバーしてくれるソフトウェアもある。

僕は自前で実装することはせずに

- collectd

というソフトウェアを利用した。 自前で実装するなら、statdと呼ばれるソフトウェアを利用したと思う。

graphiteって何が良いのさ

周辺ソフトウェアの充実に尽きると思う。 graphiteとその周辺のソフトウェアを活用すれば、色々できる。 そして、それなりに動く。

今、僕はGraphiteをCPUの利用率とかそういったMetricsの収集に使っているんだけれども、この分野で、 それなりに動いて、カスタマイズもいっぱい出来て、ていうのを探しているのなら、Graphiteは選択肢に入れても良いと思う。

日本語の情報は殆ど無いけど…。