インフラブログスマートフォン用の表示で見るインフラブログとあるWEBサイトのインフラを構築運用するメモこの広告は、90日以上更新していないブログに表示しています。2015-06-18ChatOpsなデプロイ環境にしたい新しい案件の話しがあり、インフラ構成、デプロイ周りをどうしようかと考えていました。いうスタンスでDockerを積極的に使おうとしています。Docker環境でのデプロイとなると、下記の手順になるでしょうか。リリースしたいアプリのDockerイメージを作るDockerレジストリにプッシュするオーケストレーションツールが新しいコンテナを作るWEBリバースプロキシが古いコンテナから新しいコンテナにつなぐどこかにプッシュしたとか、なんらかのイベント発生をトリガとして他のサービスに通知したり、APIを叩いたりとサービス間の連携ができることが最近多いので、上記の手順も流れるように行えるでしょう。Dockerイメージを作るより前の工程がいくつかありますが、これらも同様に自動化できるので一連の流れでデプロイできそうで、図にしてみたらこんな感じになりました。hipchatやgithubなど使っていますが以下のところにメリットがあると思っています。15:27ChatOpsなデプロイ環境にしたいTweet広告を非表示にするもっと読むコメントを書く2015-03-17RedisのHyperLogLogを試してみるAWSのElasticCacheのredisが2.8.19になりHyperLogLogというのをサポートしたとのことなので、どんなものか試してみました。今回のお試しでもwebサイトに訪問した人のユニークユーザが大体どのくらいかを簡単にわかるようにしてみます。HyperLogLogについてはこちらの記事が参考になりました。nginxのインストールwebサイトはnginxでサービスするものとして、nginxの中でredisのコマンド叩くことになるのでredis2-nginx-moduleやらを追加してngxinのrpmを作成します。RPMS/x86_64/nginx-1.6.2-1.amzn1.ngx.x86_64.rpmnginxの設定location内のredis2_queryでpfaddを叩きます。今回はリクエストの度にnginx内でユーザID相当なものをランダムで生成します。このidをredisのpfaddコマンドでuuというHyperLogLogデータに追加していきます。9998pfcountは推定なので実際のアクセス数と同じにはなりません。そもそもuidがランダム生成なので重複したuidが作られてるかもしれません。パフォーマンスredisのpfaddのパフォーマンスがどのくらいかをsetの場合とで単純に比べてみました。上記のabのスループット結果です。16:16RedisのHyperLogLogを試してみるTweet広告を非表示にするもっと読むコメントを書く2015-02-13hubotを使ってあれこれする(mongodbをtailする)サイトの50xエラー発生時になるべくリアルタイムで社内に周知する。運用しているサイトで50xエラーが発生した際に、なるべくリアルタイムで社内に周知したいと考えていました。nginxのログはcapped属性でmongodbにも集約しているので、これを常時tail監視してエラー検知時にアラートを発報するようにします。hubotのスクリプトとして動くようにすれば、hipchatにも周知しやすくなるので、今回はhubotのスクリプトにしました。動きとしては、mongoのカーソル使ってログを500系エラーのログのみtailするようにします。エラーかどうかはngxinログのupstream_statusのステータスコードで判定します。該当データが発生した場合はonイベントで音を鳴らすようにします。音はafplayコマンドで指定のアラート音を鳴らすだけです。瞬間的に大量の50xエラーが発生した場合、afplayコマンドが多重で大量に叩かれてプロセス生成できなくなるエラーが発生したので、afplayプロセス起動中は別のafplayが起動できないようにフラグ管理しておきます。フラグはhubotのbrain(redis)で保持します。hipchatやりたいことチャットアプリのhipchatとボットとして動くhubotを使って、下記の事をしてみようと思い、設定してみました。社内にあるubuntuでhubotを起動して、hipchat上にボットとして常駐させるようにします。運用するサイトに対する問い合わせが届いた際にチャットに通知する。不具合の問い合わせが複数回来た場合は携帯端末にpush通知する。テキストスピーチで読み上げて社内のスピーカーで出力するAWSで作業した履歴をチャットに通知する(履歴はCloudTrailで収集する)処理の流れデータ処理の流れは以下を想定しています。下記は設定の記録です。Tokensも作成します。hubot社内のubuntuマシンにhubotをインストールしてひな形アプリも作成します。hubotがログインの際に使うアカウントも作成して、起動確認まで行います。hipchat問い合わせの対応hipchatに問い合わせ内容をPOSTするGmailに転送設定をつけてMTAサーバにメールを転送します。その後、/etc/aliasesに設定されたスクリプトが起動してhipchatにpostするようにします。body)問い合わせ内容を読み上げるcontact部屋にメッセージが追加されたら読み上げソフトウェアであるopen_jtalkを起動するようなスクリプトをhubotに追加します。msg.send("読み上げを無効にしました。msg.send("読み上げを有効にしました。不具合報告のような問い合わせがREPORT_COUNT回届いた時にpush通知を試みる。不具合報告が多い時はpush通知が連続されるのでトラブルとすぐに認識したい。@fooをつけることでメンションとなり、push通知されるみたい。"お問い合わせがきました。backed)を用意する。registryのWEBUIを用意する。手元のmacでdockerが動くようにする。既存のrailsアプリをDockerイメージ化してregistryにpushする。Dockerまで動く状態の別の端末からRailsアプリのイメージをpullしてRailsを起動する。registryを作る。プライベートregistryを用意して、開発用のmacでdocker-registryをpullできるようにする。下記、repos.example.comサーバで行う。repos.example.com:5000/docker-regisrty-s3docker-registry-frontendブラウザでregistryを閲覧検索できるようにする。registryのIPである172.17.42.1を指定する。restartVirtualBoxの設定からポートフォワードの追加docker-registryをローカルのtcp:5000で立ち上げるため、ポートフォワードを追加する。localhost:5000/sample_railsS3で確認する別mac端末上でアプリをpullしてそのまま起動する。前提boot2dockerが動いている。VirtualBoxの設定でtcp5000-tcp5000のポートフォワード設定がされている。S3の設定アクセスキー、アクセスシークレットキーの作成S3でバケットexample-owncloudを作成。owncloud作成。AmazonS3FullAccessの権限を付ける。owncloud"セットアップブラウザでセットアップ画面を開くhttp://example.com/owncloud管理者ユーザ名、パスワードを決める。DBをmysqlにしてDBを指定する。再度、管理者でログインする。S3を使うので機能追加をします。support>有効と進む。右上のadminから>管理>外部ストレージの項目に進む。互換ストレージ」選択。アクセスキー、アクセスシークレットキー、バケット名を入力。LDAP設定ownCloudのユーザ認証にldap連携を使う。backend>有効と進む。右上のadminから>管理>外部ストレージの項目に進む。設定はアクティブですにチェックをする。