28
AWS運用監視ノウハウ CloudWatch 〜作ってからが本番です!〜 JAWS Festa Tohoku 2014

AWS運用監視ノウハウ CloudWatch 〜作ってからが本番です!〜

Embed Size (px)

DESCRIPTION

JAWS Festa 2014 Tohoku

Citation preview

Page 1: AWS運用監視ノウハウ CloudWatch 〜作ってからが本番です!〜

AWS運用監視ノウハウ CloudWatch

〜作ってからが本番です!〜

JAWS Festa Tohoku 2014

Page 2: AWS運用監視ノウハウ CloudWatch 〜作ってからが本番です!〜

はじめまして!(じゃない方はこんにちは!)Masashi Terui

照井 将士 !https://www.facebook.com/marcy.terui https://twitter.com/FumblePerson !          (株)アグレックス 札幌事業所 システム部           AWS Consulting Partner New!!           AWSチーム技術リーダー(的な立ち位置) !JAWS-UG札幌下っ端メンバー Chef Meetup Sapporo主催 New!! !東京生まれ札幌育ち 1987年 東京都大田区に生まれる 1992年 札幌へ移住 !好きなAWSサービス:AWSドキュメント(サービスじゃないけど)

Page 3: AWS運用監視ノウハウ CloudWatch 〜作ってからが本番です!〜

Agenda

CloudWatchって何?

なんでCloudWatch?

基本操作とカスタムメトリクス(デモ)

CloudWatchの基本概念

CloudWatchの良い所

CloudWatchの足りない所

もっと便利に

新機能CloudWatch Logs

まとめ

この辺りは独自の解釈が含まれており、 AWSの公式情報ではない部分も多いです。

Page 4: AWS運用監視ノウハウ CloudWatch 〜作ってからが本番です!〜

CloudWatchって何?

AWSのリソースをモニタリングするためのWebサービス

CloudWatchの特徴

EC2インスタンスや各サービスのモニタリング

利用料金の取得も可能

その他、カスタムメトリクスとして、

任意のデータも保存可能

メトリクスをベースにアラームを設定できる

アラームからAuto Scaling Policy実行、SNSで通知

Page 5: AWS運用監視ノウハウ CloudWatch 〜作ってからが本番です!〜

なんでCloudWatch?その疑問は正しいです

数あるサービスの中でも地味

ぶっちゃけイケてない所もある(良い所もいっぱいありますよ!)

Zabbix,NagiosとかNew Relic,Mackerelとかの方が良い所あるよ?

だがしかし!AWSを便利に使いたいなら必須!

RDSとかELBとかそもそも独自の内部監視(Agent等)を入れられない

特にELBは埋もらせておくには惜しい情報が多い

AutoScalingやる時に使う

どうせ使わないといけないなら上手く使いたい

運用監視大事!

派手な構築の話だけでは実際のシステムは成り立たない

わがまま言ってごめんなさい(to 関係者)

Page 6: AWS運用監視ノウハウ CloudWatch 〜作ってからが本番です!〜

CloudWatchの基本概念CloudWatchは必ずしも監視サービスではないかも?

フルマネージドな時系列データストア+アプリケーション メトリクスのグラフGUIが付いてる 閾値を指定してトリガーを登録できる

組み合わせることで監視サービスになる トリガーにSNSを登録してプッシュ通知

E-mail HTTP Request → 自動リアルタイム処理(すぐにアクション) SQS → 自動バッチ処理(時間がかかる、確実に処理したい)

他サービス同様、APIで情報取得・コントロールができる 独自の監視の仕組みが作れる

監視以外にも使える 少なくともAutoScalingは監視じゃない AutoScalingや各種自動化等の運用支援サービスと言えるかも

Page 7: AWS運用監視ノウハウ CloudWatch 〜作ってからが本番です!〜

CloudWatchの基本概念(図にすると)

Page 8: AWS運用監視ノウハウ CloudWatch 〜作ってからが本番です!〜

CloudWatchの基本概念(図にすると)

全ての中心にある大事なサービス …っぽく見える(見せ方の問題?w)

Page 9: AWS運用監視ノウハウ CloudWatch 〜作ってからが本番です!〜

基本操作とカスタムメトリクス(デモ)

この後色々話しますが、基本は簡単です。 というのをデモで感じてもらえれば…

Page 10: AWS運用監視ノウハウ CloudWatch 〜作ってからが本番です!〜

基本操作とカスタムメトリクス(デモ)実際の手順

SNSトピックを登録

メール通知

Subscribe(通知受信許可)

IAM Role作成

cloudwatch:putMetricData(メトリクス送信)

ec2:describeInstances(自身のデータを取得)

EC2起動

UserData(cloud-init)で諸々設定

Apache HTTP Serverインストール

定期的にhttpdプロセス数のカスタムメトリクスを送信する設定

アラーム設定

httpdプロセス数のカスタムメトリクス

Apache Benchでプロセス数を上げてみる

メール通知が飛んだら成功!

時間の都合上この方法ですが、先に作成してからSSHで流す、 Chefレシピやスクリプト実行等、方法は色々あります。

Page 11: AWS運用監視ノウハウ CloudWatch 〜作ってからが本番です!〜

基本操作とカスタムメトリクス(デモ)IAM Roleの内容

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ec2:DescribeInstances", "cloudwatch:PutMetricData" ], "Resource": [ "*" ] } ] }

Page 12: AWS運用監視ノウハウ CloudWatch 〜作ってからが本番です!〜

基本操作とカスタムメトリクス(デモ)UserDataのシェル内容

#!/bin/sh REGION=`curl http://169.254.169.254/latest/meta-data/placement/availability-zone | sed -e 's/.$//g'` ENDPOINT=http://monitoring.$REGION.amazonaws.com INSTANCE_ID=`curl http://169.254.169.254/latest/meta-data/instance-id` INSTANCE_NAME=$(aws ec2 describe-instances --region ${REGION} --instance-ids ${INSTANCE_ID} --query 'Reservations[].Instances[].Tags[?Key==`Name`].Value' --output text) ( cat <<-EOP #!/bin/sh PROC=\`ps -ef | grep "httpd" | grep -v "grep" | wc -l\` NOW=\`date --iso-8601=seconds\` aws cloudwatch --region=$REGION --endpoint-url=$ENDPOINT put-metric-data --namespace "System/Linux" --metric-data "[{\"Dimensions\":[{\"Name\":\"Instance\",\"Value\":\"$INSTANCE_NAME($INSTANCE_ID)\"}],\"Timestamp\":\"\$NOW\",\"Value\":\$PROC.0,\"Unit\":\"Count\",\"MetricName\":\"Process-httpd\"}]" EOP ) > /usr/local/cloudwatch.sh chmod 755 /usr/local/cloudwatch.sh ( cat <<-EOP * * * * * /usr/local/cloudwatch.sh > /dev/null 2>&1 EOP ) > /usr/local/.crontab crontab /usr/local/.crontab yum -y install httpd php ( cat <<-EOP <?php sleep(1); ?> JAWS Festa 2014!!<br/> $INSTANCE_NAME($INSTANCE_ID) EOP ) > /var/www/html/index.html /etc/init.d/httpd start

Page 13: AWS運用監視ノウハウ CloudWatch 〜作ってからが本番です!〜

CloudWatchの良い所安い(2014.09.06現在、月当たり)

無料枠

標準提供のメトリクス

10カスタムメトリクス、10アラーム、100万APIリクエスト

料金設定

$0.50 / カスタムメトリクス

$0.10 / アラーム

$0.01 / 1,000 API リクエスト

監視用にサーバ立てるよりも遥かに安いと思われる

サーバ/システム保守コストも考えよう

もちろん使い方による

Page 14: AWS運用監視ノウハウ CloudWatch 〜作ってからが本番です!〜

CloudWatchの良い所

スケーラブル

何百台でも何千台でも

何項目(カスタムメトリクス)でも

カスタムメトリクスでなんでも突っ込める

メトリクスの取得APIもシステム負荷を気にせずにいつでもどこでも

保存容量無制限(ただし、保存期間は2週間)

フルマネージドで運用要らず(↓自前運用時の例)

メトリクスデータストア(DBサーバ)

APIエンドポイント(Web/APサーバ)

Web GUI(Web/APサーバ)

通知システム(メールサーバ等)

Page 15: AWS運用監視ノウハウ CloudWatch 〜作ってからが本番です!〜

CloudWatchの良い所他サービスとの連携

AutoScaling SNSによる多彩な通知方法

人に通知(メール) システムに通知(HTTP、SQS)

IAMによる認証機構 IAM Role Credentialキー 二段階認証 目的別に権限指定できる(↓例)

監視対象にはメトリクス登録権限だけ与える メトリクス取得だけできる外部監視システム連携用 グラフを見るだけの監視員ユーザ

Page 16: AWS運用監視ノウハウ CloudWatch 〜作ってからが本番です!〜

CloudWatchの足りない所2週間しか保存できない

メトリクスの間隔は最短1分

秒単位のリアルタイム監視ができない

ただし、1分間(以上も可)の集計値を入れることもできる

Max,Min,Total,SampleCountの項目がある

単純に一つの瞬間値だけ入れることも可能

通知内容のフォーマットが変えられない

SNS側の制限でもある

メッセージタイトルがどうなるか考えて名前とか付ける必要が…

メッセージ文面が分かりづらい(もちろん英語…)

システム通知のフォーマット変わると困るけど

Page 17: AWS運用監視ノウハウ CloudWatch 〜作ってからが本番です!〜

CloudWatchの足りない所

最近はだいぶ良くなったけど、まだGUIが微妙…     ※個人的見解

メトリクスのデータ構造が独自でちょっとわかりにくい ※個人的見解

Namespace ≒ 監視グループ(標準ではサービス毎)

MetricName ≒ 監視項目

Dimensions ≒ 監視対象の情報(e.g. AZ, Instance[Name,Id])

ここから先は個人的願望ですw

メトリクスにタグつけたい

アラームにタグつけたい

Dimensionsだとメトリクスデータの持ち方が変わってしまうので

Page 18: AWS運用監視ノウハウ CloudWatch 〜作ってからが本番です!〜

もっと便利に別のデータストアに連携する

2週間より長く保持したい

見ることをとりあえず考えないならS3

すぐに or 定期的に見たいなら(+もっと見やすく!)

GrowthForecast(主にMySQL)→ シンプル!http://kazeburo.github.io/GrowthForecast/index.ja.html

Zabbix(主にMySQL)→ 多機能なので見るだけだと勿体無い http://www.zabbix.com/jp/

Grafana (Graphite or InfluxDB) → オススメ! http://grafana.org/

その他にも色々あります

視覚化目的の場合、CloudWatchを一時保管用・予備GUIと捉えると良い

2週間以前が失われても仕方ないと割り切る

データストアの可用性担保や障害復旧にゆとりができる

長期保存要件があるならついでにS3に入れておく

Page 19: AWS運用監視ノウハウ CloudWatch 〜作ってからが本番です!〜

もっと便利に参考までに弊社の監視ダッシュボード(by Grafana)です。

ほとんどの情報をCloudWatchから取得している。 一部例外有(Response TimeやSlow Query等)

!請求情報やインスタンス数とかも見れたり…

※部外者に見せたら怒られるので載せてませんがw

Page 20: AWS運用監視ノウハウ CloudWatch 〜作ってからが本番です!〜

もっと便利に

メール以外の通知方法を作る

IRC

チャットサービス(HipChatやSlack等)

Twitter

SNSのHTTP通知やSQS通知

HTTP通知をどこかのサーバで受ける

SQSをどこかのサーバがポーリング

受け取ったメッセージを解析し、対象のAPI等へ送信

中継だけじゃなく、システム内で閉じた自動対応の仕組みも作れる

そこまではやってないですが…いずれやりたい

Page 21: AWS運用監視ノウハウ CloudWatch 〜作ってからが本番です!〜

もっと便利に参考までに弊社のHipChat通知

通知された内容だけだと、 その時何が起きているのか把握しにくいので、 全体の状態を取得した上で出したりしている

状態が変化したら再度通知 平常時の監視運用業務から煩雑なメールを撤廃 モバイルクライアントもあるので外出先からも見られる ※見たく無いですけどね!w

Page 22: AWS運用監視ノウハウ CloudWatch 〜作ってからが本番です!〜

もっと便利に別の監視システムと統合する

一つであらゆる問題に対応できるものは無い(当然CloudWatchも) 既に確立された監視の仕組みを持っている場合

EC2はそれをそのまま使っても良い その他サービスはAPIでデータを抜いて集約する方法もある

ZabbixとかSensuとかだとWeb上に色々情報があるおググりください 誰かが作ったPluginが既に公開されている場合もhttps://github.com/sensu/sensu-community-plugins

逆に、別のシステムで取ったデータをCloudWatchに集約しても良い カスタムメトリクスは何でもあり(形式さえ合わせられれば) 別の監視ツールなら簡単に取れて有用な指標もある

全く別々に扱うと運用に困るかも… 集約する or 役割分担をハッキリしておく

Page 23: AWS運用監視ノウハウ CloudWatch 〜作ってからが本番です!〜

もっと便利に参考までにCloudWatch→Graphite(Grafana)のデータ連携を行うスクリプト(PHP)

都合上、実際に使用している ものではありませんが、 全体でたったの60行未満。 ※ウンコードなのはご勘弁w !これを定期的(cron)に実行。 !大体こんなレベルで大抵は 実現できたりします。

Page 24: AWS運用監視ノウハウ CloudWatch 〜作ってからが本番です!〜

新機能CloudWatch Logs

新機能!(2014.07 AWS Summit NYCで発表された)

ログの監視と集約のための機能

無料枠が大きい!

モニタリング用5GB(期間指定)

アーカイブ用5GB(指定期間後自動でアーカイブ)

現状はUS Eastのみのサポート

とりあえず貯めるだけなら別にUSでも良いかも

バックエンドはKinesisらしい

Kinesisは東京来てるから時間の問題?

Page 25: AWS運用監視ノウハウ CloudWatch 〜作ってからが本番です!〜

新機能CloudWatch Logs転送エージェントを利用してアップロード

AWS純正エージェント

fluent-plugin-cloudwatch-logs

もちろんAPIからのアップロードも可能

ただし、欠損等のケアは自分でやらないといけない

ログの保管形式

Log Event ≒ ログレコード

Log Stream ≒ 発生元毎のログシーケンス

Log Group ≒ ログ種別

フィルターを設定する

該当した数がCloudWatchメトリクスとして登録される

モニタリング

アラーム設定して通知

It’s me!! ※他Pluginの機能を移植しただけw

Page 26: AWS運用監視ノウハウ CloudWatch 〜作ってからが本番です!〜

新機能CloudWatch Logs新機能で使い倒してないので所感レベルですいません

安い

大きな無料枠

モニタリング対象は月当たり$0.5/GB

長期保存アーカイブは≒S3の保存料金っぽい

アーカイブ時にさらに圧縮されて保存されるらしい

とりあえずでS3に入れて塩漬けになっているようであれば乗り換え対象

他のログ管理サービスと比べると物足りない感がある?

リアルタイムモニタリングできない

検索できない

目指している方向が違う気もしている

現状はフィルター(からのメトリクス)監視に特化

CloudWatchと同じで、物足りない部分は他と連携して解決するものっぽい

一時集約用+長期保存アーカイブ

何か(例えばFluentd Plugin)で吸い上げて分析用データストアへ…とか?

今後、機能は増えるはずなのであくまで現状

Page 27: AWS運用監視ノウハウ CloudWatch 〜作ってからが本番です!〜

まとめ作ってからが本番です!

AWSを使う上で、CloudWatchは避けて通ることはできない

シンプルにも使えるし、色々組み合わせて便利にも使える

便利な機能がたくさんあるが、物足りない部分もある

利点は活用し、欠点は何かで補って使おう

他ツール連携やAPIインテグレーションは実は簡単

あなたの運用監視スタイルを確立しよう!

上手に使って良い運用監視ライフを!

Page 28: AWS運用監視ノウハウ CloudWatch 〜作ってからが本番です!〜

Thank you!!