チラ裏

[WIP]Locustで初心者がAPIサーバーの負荷試験をやってみた

この記事はチラ裏です。僕の頭の中を整理するためだけの記事です。 寒いなぁ…寒いなあ… 卒論を提出して2/6にはパワポとレジュメを作成して発表です。   負荷をかけるツールはいっぱいある 便利な世の中なので負荷ツール(Load test tool)はたくさんあります。 ここでどれを使うかを選定しないといけないわけですがいくつか候補を挙げてみたいと思います。 JMeter(有名、高機能、リクエストがいっぱい出せる、知見多) ab(シンプル、知見多、手軽) httpperf(手軽、リクエストがいっぱい出せる) vegeta(リクエストがいっぱい出せる) hey(手軽) siege(使ったことない) goad(Lambdaから負荷をかけれる、色んなリージョンからアクセスできる、JSONのPOSTのやり方分からず、手軽) Locust(分散して負荷をかけれる、Web GUIがある) 分散しないで負荷をかける vegeta や hey では家のネットワークとか、1台のマシンだけじゃサーバー側のリソースを使い切ってくれないため除外。 JMeterは設定がダルい、勉強するのは少し面倒。 Locust は Qiita 等で取り上げられてるので知見は結構あります。 JMeter のようなシナリオを Python で書き、負荷をかけるサーバーも簡単に実行することができる。 ドキュメントもきちんと整備されているので今回は Locust を使ってみました。     Locust を使ってみる インストールも簡単です。 pip install locustio これだけです。 実行は locust -H host --master Slaveは locust -H host --slave --master-host=masterip Master は実際に負荷をかけず、集計や Web GUI を担当し、Slaveが実際の負荷を行います。 今回は c4.large のインスタンスを6つ建てて 1Master 6Slave で負荷をかけました。 画面が多いと負荷試験がやりやすい pic.twitter.com/QozJrFR3ag — るいす (@lu_iskun) 2018年1月29日 負荷試験中は、LB(Nginx), API, DBのリソース状況、各サーバーのログを表示しておき、 Nginx のコネクション数や、FD数などは Nginx Amplify を表示しておくと便利です。   今回は 10万ユーザーを作成し、秒間1万ユーザーずつ増加していく方法を取りました。   Charts には数値がグラフ化されています。 この図を見るだけで、RPSは最大3200、ユーザー数が増えるごとにレスポンスタイムが増えていっていることが分かります。   失敗したリクエストは Failures にまとめられています。 先程の図から推測すると、何らかの要因でレスポンスタイムがどんどん増えていき、サーバーがコネクションを切ってしまったんだと思います。     [crayon-5b088f3ee173e712262563/] ルーターのネットワークインターフェースを見てみると LB, API, DB が載ってるサーバーからのパケットで、いくつかドロップされてるパケットがあります。 CDN に Cloudflare を挟んでいるのですが原因は Cloudflare ではなく完全にこちら側ってことが分かります。     コンテナで動かしているAPIサーバーに16スレッドを割り当ててますがうまいこと全部のスレッドを使っているようです。Go はメモリが全然消費されなくてすごいですねぇ ここを見ている限り、平均70%のCPU負荷で %iowait もそこまで高くないため(そもそもディスクの読み書きがないようなAPI)、LBかDBのような感じもします。   LBは2段あって、3段目にAPIがあるわけですがこの画像には写って無くて申し訳ないですが(画像は最上段LB)、最上段LBは HTTP Error が発生していましたが、2段目のLBでは HTTP Error…

去年の振り返りと、今年の抱負 – 2018

明けました おめでとうございます。 今年はうまくいけば大学を卒業し、社会人となります。 2017年バージョン同様にブログのまとめ記事っぽくなります。 チラ裏です。 去年の振り返りと、今年の抱負   初めてのフルサイズ 初めてのフルサイズを買ってみた「SONY ILCE-7M2」 α65 から α7II へ一気にグレードアップしました。 フルサイズの良さが分かったので、APS-Cがどんなもんだったかを思い出すために今は PENTAX K-70 を使ってます。既にフルサイズ機が欲しいです。というか、ソニー機が欲しい。 K-70 も好きな描写なのですが、どうしてもソニーの無機質な冷たい描写が好きみたいです。 K-70 は一眼レフで、ミラーレス機のようにファインダー内が液晶で表示したときと一緒(ISOとか色々)に対して、K-70 はペンタプリズムファインダーなので、液晶で表示(実際に撮影されるイメージ)されるのと、ファインダー内の写りは全く異なる。 それでも、ファインダー内に露出計があるので今では慣れたのですがアレはアレで便利でした。   Ergodox EZ に手を出す 35,000円する最高のキーボードを買ってみた「ErgoDox EZ」 今でも使っています。 キーボードは東プレ、HHKB、LEOPOLD、リベルタッチと高級なものを使ってきたもののすぐ飽きてしまいましたがこのキーボードは今でも好きです。見栄えも良いし慣れると結構速く打てます。   コンテナの手軽さを知る コンテナ上で何もできなくなる「Too many open files.」 今でも仮想アプライアンスとして Proxmox を使ってますが2016年ぐらいまでは KVM を主に使ってました。毎回 ISO からインストールしていたのは手間でしたが LXC を使うようになってテンプレートを指定するだけで良いのは最高です。KVM と違ってオーバーヘッドも少ないのでホストマシンを圧迫することなく良いことづくし。   AWSの色んなサービスを使うようになった Lambda+S3+EC2を使用してできるだけ安くリアルタイムwebPエンコードをやってみる S3をCloudFrontから配信&LambdaとWAFを組み合わせて利便性とセキュリティを確保してみる 友人の会社を手伝うようになり、流石に自宅サーバーだけでやるのはアホすぎるので AWS を触るようになりました。2017年の抱負でも「AWSの色んなサービスを使う」があったので良い感じに実現はできました。 Redshift とか、Quichsight みたいなデータ解析寄りのサービスを触れることはありませんでした。   MBP 2017 13inc に買い替えた MacBook 2016 m7 から MacBook Pro 2017 2.3GHz に買い替えた Macbook m7 での不満は「ディスプレイが小さすぎた」という点だけ。 買ったのは13インチでそこまで大きな差はありませんが、家で MBP を使うようになってからは Type-C が2つになって良かったと思いました。 CPU のスペック差も正直そこまで感じられず m7 の凄さを知りました。   Ansible を良く書いた1年 AnsibleでコピーするときはSynchronizeモジュール使ったほうが幸せになれる 構成管理ツールって、Ansible だったり、Itamaeだったりありますが何で Ansible にしたのか思い出せない。 ベストプラクティス構成は悩みどころかと思いますが僕はこうなりました。 [crayon-5b088f3ee1a07260337214/]   Node.js と Go に手を出した 2017年、まともに Javascript も書いたことないのに Node.js を書き、Go も書くようになりました ただ、Go は未だに慣れませんね。慣れていなくても簡素に書けて最高の言語です。   今年はもっと成長できるはずの年なので、頑張りたいと思います。 今年から社会人です。宜しくお願い致します。

Slackにネイティブアプリのエンジニアに優しいBOTを作ってみた

皆さんSlack使ってますよね。 今じゃIT企業以外にもSlackが導入されてて日本への浸透も広がってきたと思います。   背景 今は趣味で色々やってるんですが、開発したAPIを叩くiOSエンジニアに 「最近のアクセスログが欲しい」 「エラーログ見せて欲しい」 等、色々と言われます。 ネイティブアプリのエンジニアはそもそもサーバーにログインする習慣がないので SSHのアクセス権限等を付与してあげてもインフラに関する知識や、覚えることが増えるので 直接聞いてきます。 これを解決するためにSlackのBOTがやるようにすればお互い楽なんじゃね?と思い、 作ってみた結果良かったのでチラ裏程度にご紹介です。   Buri Bot できることは ・APIサーバーのアクセスログを返す ・APIサーバーのエラーログを返す ・DBのテーブルを全て空にする ・DBのテーブル レコードを返す と言った、必要最低限のものを実装しました。   アクセスログを見る とりあえず最新の3件だけ   エラーログを見る エラーログはとりあえずの最新の1件だけ   テーブルを全部空にする APIを叩きすぎてぐちゃぐちゃになったテーブルをリセットするには とても便利。   テーブルの中身を見る GetRecord <テーブル名> <環境(stg|dev)> where <カラム> <値>みたいな感じで見る。 レコード数が多いとどうなるか分からない(文字制限が分からない)のでとりあえずwnereで規制しました。   結果 文字化けしててよく分からないけど便利だってことは分かりました。

Raspberry Pi Zero で温度センサーと赤外線センサーを使ってサーバーとネットワーク機器を自動で冷やしてみた

Raspberry Pi Zero を買って放置したまま1年経ち、 夏を前にサーバーの冷却を考えていたのでタイトル通り、 Raspberry Pi と 温度センサー&赤外線センサーを使って夏を乗り切ろうっていう記事です。 ちなみに結局温度センサーは接続したものの 今回はCPUの温度やSSDの温度をトリガーとして赤外線センサーを使うので 使いませんでした?   Canon IXY 430F (4.3mm, f/2.7, 1/30 sec, ISO500)ちなみに僕は電子工作に関して全く知識がありません。 抵抗値の計算すらできません。それでもできたのでネットは偉大ですね。     買ったもの Canon IXY 430F (4.3mm, f/2.7, 1/30 sec, ISO400)・1/2W 100Ω ・1/2W 1kΩ ・ADT7410 温度センサー ・OSRB38C9AA 赤外線リモコン受信モジュール ・OSI5LA5113A 赤外線LED ・OSI5FU5111C-40 赤外線LED 何となく2種類買った ・EIC-801 ブレッドボード ・ブレッドボード・ジャンパーコード     接続 Canon IXY 430F (4.3mm, f/2.7, 1/30 sec, ISO320)基本的に赤外線LEDは1つが良い(波形が安定する?)らしいのですが 赤外線LED自体の有効照射範囲(?)が15°とかなので3つぐらい設置してみました。 ちなみに抵抗の接続の仕方などは計算ツールみたいのを使った結果を 何となく配置しただけです。 ジャンパーコードは オス – オス を買い忘れたので 抵抗の足を使いました?     WiringPiで制御する ここがとても参考になりました。 http://www.feijoa.jp/laboratory/raspberrypi/infrared2/ LIRCがも何のか分かってないけど ネットで引っかかるLIRCを使った記事ではうまくいきませんでした。     シェルスクリプトでエアコンを操作する [crayon-5b088f3ee1b2b941339158/]     Zabbixのメディアタイプに登録する Zabbixのメディアタイプに登録します。 手順は面倒なので割愛です。     トリガーを作成する 今回はサーバー、ルーター、スイッチのCPU温度のいずれかが 60℃を超えたらエアコンがONになるって感じ。     アクションを作成する トリガー名にEaconを含めておけば、アクションもこんな感じで設定できます。     動作確認 動画を撮って載せるのは面倒くさいのでしないんですけど エアコンを切って家をでるとSlackから通知がきます。 数分後に温度を確認すると60℃を下回っていい感じ。   素晴らしい~~~ ただ、このまま運用すると 60℃超える → エアコンON → 59℃辺りになる → エアコンOFF(ループ) となるので閾値だったり、トリガー条件をもうちょっと考えないとダメですね。

月額$2.5で東京リージョンがある激安SSD VPSを契約してWordPressを移行した「Vultr」

WordPress は脆弱性が多く、その影響も大きいものが有ります。 さすがに自分のサーバーに WordPress を置いとくのは何となく怖いのでVPSを契約した。   Vultr 東京リージョンがあるのにも関わらず月額$2.5から契約できるVPSです。 スペックと料金は公式サイトを見てみてください。 https://www.vultr.com/pricing/ 今回契約したのは最安の 1CPU / 512MB / 20GB(SSD) です。 今開いてるこのサイトはそのVPSで動いています。   UIが直感的で分かりやすい サーバーのリソース状況も「User Graphs」タブから色々見れる。 noVNCも実装されているので万が一SSHができなくなっても安心ですね?   東京リージョンは素晴らしい VPSのスペックは低くても東京リージョン+SSDのお陰かSSHもストレスなく作業できた。 東京リージョンでも価格が変わらない点もとても良い?   デフォルトでプライベートIPがない [crayon-5b088f3ee1c12738945221/] 管理画面から無料で追加することが可能 パブリックIPは月$2で追加可能(最大2つまで 計3つまで可能?)   弱小WordPressならメモリ512MBでもギリギリ足りる [crayon-5b088f3ee1c1d746340374/] 記事編集中のfree -mです。 いつもは nginx を使うのですが今回は検証も兼ねて Openlitespeed を使っています。 Openlitespeed に関しても次の記事にでもしようかと思います。便利ですよ。 ちなみにメモリ使用率TOP10 [crayon-5b088f3ee1c20868442263/] mariadbをチューニングしたらもうちょっとはメモリに余裕が生まれそう。 たまにmariadbが落ちて「データベース接続確立エラー」が起こる。   WordPressを動かすVPSを探している人にはオススメ 何かステマっぽいですけど一切ステマじゃないです。 オススメです。 https://www.vultr.com/

去年の振り返りと、今年の抱負

去年の振り返り 時系列はバラバラですけど、技術的な話も含めて振り返ってみます。 ただのチラ裏なのであしからず。   インターンに参加した サイバーエージェントで長期インターン行ってきた   何が何でも去年はインターンに参加したことが一番思い出深かった。 まさかサイバーエージェントでインターンに行けるとは思ってなかった。 刺激的で充実な毎日をおくれていました。 自分の知識不足も痛感されたインターンでもありました。       クラウドソーシングで仕事を請け負ってみた クラウドソーシングとやらを利用してみた話   自分の技術でできそうな仕事はいくつかあったので度胸試しじゃないですけど 利用してみたって話です。 多少なりともお小遣いになっているのでいい感じです。 今もお付き合いしている人がいてやってよかったなと思います。 地雷を見極めるのがマジで重要です。         WordPressのプラグインを作ってみた [blogcard url=”https://ja.wordpress.org/plugins/block-wpscan/”][/blogcard]   こんなのあればいいなあと思って作ったもの。 Wordpressのプラグインは敷居高いかなと思ったけどそうでもなかった。 フックとかも細かいところまで用意されていて色んなプラグインが作れそうだなと思った。       AWS(パブリッククラウド)に興味を示す Amazon RDS 最安インスタンス db.t2.micro を契約してみた。【ベンチマーク】   個人で作ってるアプリのDBとかを自サーバーに置くのは中々に面倒なので RDSに載せようと思ったのが始まり。 2015年はAzureを使ってましたがUI/UXとレスポンスの悪さ、AWSの情報の多さから AWSに興味を示すようになった。 インターン先でもAWSに触れることがあったのも大きい。 EC2, RDS, SES, Cloudfrontは個人で使っているも、Cloudwatch, Lambdaとか深いとこに触れてないので AWS強みの連携に重要視して今年は行きたい(個人じゃ使わねえ…お金欲しい…)       がんばってHTML/CSSを書いた 田村ゆかり非公式ファンサイト「YOWS Notification」をリニューアルした #yukarin   田村ゆかりさんの非公式ファンクラブサイト(笑)を作ってて Bootstrapを使って1から(?)リニューアルしようと思ってやった。 CSSが難しすぎて泣いた。 これを仕事にしたくないと思った出来事です。 ここだけの話、このサイトを運営するに当たってスクレイピング関係は良いのかどうかを田村ゆかりさんの運営事務局にメールしたら 田村ゆかりさんご本人の承諾が必要。やられていることは善意ですし、こちらからやめろとも言えないのが現状です。 みたいなことを言われた。ちなみに移籍する前の事務局には全然オッケーだよ❤今後もよろしく❤みたいな感じだった。 田村ゆかりさんの公式サイトをスクレイピングしてLINEで通知するBOTを作ってみたりもした。 【PHP】LINE Messaging APIで田村ゆかりさんの公式サイト更新通知BOTを作りなおした #yukarin       引っ越しをした 引っ越しをした   引っ越しをしたって言ってもまだ実家に住んでる身分です。 光配線方式からVDSLに降格し、上り下り100Mbpsの雑魚回線。 どうにかしたいと思ってる。 最近の悩み。       ファイアウォールに手を出す 家のネットワーク網のセキュリティを上げるために【WatchGuard Firebox XTM23】を買ってみた。   なおほとんどライセンスが切れている模様。 今もこいつを使っていますがこいつのせいでネットワークがとても遅いことが分かったので 近いうちにリプレースする予定でいる。 Web GUIもあって、管理ツールも日本語で提供されていて導入難易度は低いと思う。 このモデルはファンも搭載されてなくて良いんだけど如何せん遅い…。 次は何にしようかと模索中。       静電容量式のキーボードを買う 史上最高に良い静電容量式キーボード「LEOPOLD FC660C/EG」を買ってみた   ちょっと前までメカニカルな黒軸を使って、その前はLibretouchを使って、その前はリアフォなんかを使ってた。 今も若干飽きつつあるがデザイン性と、USキーボード、打ちやすさでは超えるキーボードはないかなとも思ってる。 キーボードと、ディスプレイ、スマートフォンは使ってて飽きてしまう。何故でしょうね。       10G NICに手を出す 激安10G NIC – Mellanox ConnectX-2 on…

LINE Messaging APIのWebhookにCloudflareのSSLを使ってるサーバーを指定すると機能しなくなる

LINE BOT APIがもうすぐ、新たに「LINE Messaging API」というのになるらしく 従来のLINE BOT APIは無くなるらしいです。 結論だけ言うと CloudflareのSSL機能を使ってるサーバーだとWebhook時のリクエスが飛んできません 理由は分かりませんがとりあえず Let’s Encrypt 使いました。

サイバーエージェントで長期インターン行ってきた

サイバーエージェントの長期就業型インターンシップに行ってきました。 そこで思ったこと、感想みたいのを忘れないように備忘録的な感じで書きたいと思います。 いつも通りで雑な記事です。     きっかけ   サポーターズというエンジニアを夢見る学生と企業を支援する会社で 色々なイベントが開催されています。 そのイベントでサイバーエージェントの人事の方、エンジニアの方とお話できる機会があり、 喋っているうちにいつのまにか渋谷のファーストプレイスに居ました。 (間違えて渋谷のマークシティに行っちゃってめっちゃ遅刻しました。) そこからはエンジニアの方と面接?面談?みたいのをしてやりたいことや、参加したい日程などを お話しました。 そして運良くインターンに参加することができました\(^o^)/     やったこと   実務をやったり色々やりました。 インフラ周りです。ネットワーク機器を検証したり、Chef書いてみたり、Jenkins触ってみたり、シェルスクリプト書いたり…。 どこまで書いていいのか分からないのと怖いのでNDAと言っておきます。 趣味範囲で触れることのない場所に触れられるので毎日新しい発見がありました。 知らなかったことを知れるので新たな知見を家(趣味)でアウトプットさせれば良さそうと思った。 プログラム書くインターン生は多かったけどインフラやってた人は僕含めて同期は二人しか 居なかったような。     感想   Canon IXY 430F (4.3mm, f/2.7, 1/30 sec, ISO250) 本題はここ。サイバーエージェントのインターンは絶対参加した方が良いと思います。 媚を売るつもりは全く無くて、トラフィックの量は膨大でそれを捌く技術なり環境なり。 右に出る会社はそうそう無いと思います。 渋谷は美味しいものが多いし、月に1回は高級ランチができたり、ジュースが0円だったり、アイスが安かったり、ピザがたまに無料配布されたり、楽しい環境で参加できました。 自分のやりたいことができるのかという不安も、めちゃくちゃ人事の方が相談に乗ってくれるので心配はないです。週に1回、人事の方と面談があるので心強い味方になりますし。 お世話になった方々には感謝しかありませんm(_ _)m 色々ご迷惑おかけしました!     Canon IXY 430F (4.3mm, f/2.7, 1/30 sec, ISO640) Canon IXY 430F (4.3mm, f/2.7, 1/30 sec, ISO500)