AWSのELB、超便利ですよね。これがないと生きていけないくらい便利です。AWSの各種サービスは日々バージョンアップされ使いやすくなっているのだけど、ELBも御多分にもれずバージョンアップされておりました。大きくは2つ。
ELBでアクセスログをS3に保存
今まではELBにぶら下げているEC2インスタンスのアクセスログをfluentdとか使って一箇所に集約してゴリゴリ解析とかやっていたかと思いますが、それがELB単体でアクセスログ保存ができるようになりました。
保存先はもちろんS3。
設定方法は、ELBを選択して「Description」タブの一番下に「Access Logs」という項目があります。そこをクリックして、S3のバケット名を入力するだけ。新規でS3バケットを作る場合は、「Create the location for me」にチェックを入れるとパーミッションなど自動で設定してくれます。楽。
既存バケットに設定したい場合は、自分でパーミッション設定を変更する必要あり。設定方法はConfigure an Amazon S3 Bucket for Storing Access Logs - Elastic Load Balancingを見ると良いです。
保存間隔も5分 or 60分と選ぶことが出来る。
アクセスログフォーマット
参照 : Access Logs - Elastic Load Balancing
フィールド名 | 内容 | サンプル |
---|---|---|
timestamp | UTCのタイムスタンプ | 2014-02-15T23:39:43.945958Z |
elb | ELBの名前 | my-test-loadbalancer |
client:port | クライアントのIPアドレス&ポート番号 | 192.168.131.39:2817 |
backend:port | ELBによって振り分けられたインスタンスのIPアドレス&ポート番号 | 10.0.0.0.1 |
request_processing_time | ELBがリクエストを受け付けてから、インスタンスへ送るまでの時間 | 0.000073 |
backend_processing_time | ELBがリクエストを受け付けて、インスタンスへ送信してから返ってくるまでの時間 | 0.001048 |
response_processing_time | ELBがインスタンスからレスポンスを受け取ってから、クライアントへ返すまでの時間 | 0.000057 |
elb_status_code | ELBのステータスコード(HTTPのみ) | 200 |
backend_status_code | バックエンドのステータスコード(HTTPのみ) | 200 |
received_bytes | 受信したリクエストのサイズ(bytes) | 0 |
sent_bytes | 送信したリクエストのサイズ(bytes) | 29 |
"request" | クライアントからのリクエストURI | "GET http://www.example.com: 80/HTTP/1.1" |
Cross-Zone Load Balancingで柔軟な分散へ
AWS ELBを使う際に注意すべきことで書いた AZ毎のEC2インスタンスは同じにする! という注意点。もう定番というくらい言われていることですが、Cross-Zone Load Balancingを有効すると、ELBにぶら下がっているEC2インスタンス全体で分散してくれるようになります。
これによって、Availability Zoneを複数運用している場合、スケールアウトするには均等に増やす必要があり、ちょっと面倒くさかったりコストが余計にかかったり、ちょうどいい塩梅に出来なかったりしましたが、あと1台インスタンスあれば十分という状況でも気軽にスケールアウトできるようになりました。
デメリット的な部分で言えば、RDSとAZが違うインスタンスが増えることで通信コストとレイテンシの問題が出てくるかも…という所かな。
設定方法は簡単で、アクセスログと同じように「Description」タブの中にある「Cross-Zone Load Balancing」をEnabledにするだけ。即時反映されます。
今まででも十分、神的なELBがより神になりましたね。と。