cloudwatchの使い方
TRANSCRIPT
CloudWatch の使い方
CM re:GrowthDevelopers.IO Meetup 01
classmethod.jp 2
2013/12/10 横田慎介
CloudWatch とは
classmethod.jp 3
CloudWatch とは
classmethod.jp 4
AWS の各種サービスのリソース状況を監視するサービス
CloudWatch とは
classmethod.jp 5
AWS サービスのリソース状況はCloudWatch でしか監視できない
結果の解釈が難しいことがある
CloudWatch とは
classmethod.jp 6
CloudWatch は監視データ ( データポイント ) の倉庫。EC2 などの AWS サービスはデータポイントを CloudWatch に登録
ユーザはデータの統計情報を取得データポイントそのものではない
CloudWatch とは
classmethod.jp 7
用語
classmethod.jp 8
メトリクス
classmethod.jp 9
データポイントの入れ物データポイントは時系列データとして各メトリック単位にまとめられる
メトリックは メトリック名 ネームスペース ディメンジョン ( ユニット )で一意に定まる
メトリクス
classmethod.jp 10
classmethod.jp 11
6 24.5
34,01210,960
632.8
85.2
77.5
メトリック名
classmethod.jp 12
メトリックの内容を表すCPUUtilizationHealthyHostCountDiskReadBytes
メトリック名
classmethod.jp 13
6 24.5
34,01210,960
632.885.2
77.5
HealtyHostCount
CPUUtilization
DiskReadBytes
ネームスペース
classmethod.jp 14
メトリックをまとめるものAWS ではサービスごとのネームスペース
AWS/EC2AWS/RDSAWS/ELB
同じメトリック名であってもネームスペースが異なれば違うものとして扱われる
ネームスペース
classmethod.jp 15
624.5
34,01210,960
632.8
85.277.5
AWS/ELB AWS/EC2 AWS/RDS
CPUUtilization
CPUUtilization
ディメンジョン
classmethod.jp 16
メトリックを何らかの特徴でカテゴライズするものInstanceId(AWS/EC2)AutoScalingGroupName(AWS/EC2)
ディメンジョン
classmethod.jp 17
24.5 34,012
10,96032.8
AWS/EC2
CPUUtilization
InstanceId=xxx
InstanceId=yyy
DiskReadBytes
InstanceId=xxx
InstanceId=yyy
メトリック
classmethod.jp 18
メトリックはネームスペースメトリック名ディメンジョンで指定する。
例:EC2 の CPU 使用率 ( インスタンス ID はxxx)
データの登録と取得
classmethod.jp 19
登録
classmethod.jp 20
メトリックネームスペースメトリック名ディメンジョン ( 任意 )
タイムスタンプ値
単一値 : 79.3統計値 : SampleCount=5, Sum=500, Minimum=50, Maximum=150
登録
classmethod.jp 21
メトリック
12:00 12:01 12:03 12:04 12:05
リソース① リソース②
20 80
5 / 500 / 50 / 150 5 / 300 / 10 / 150
登録
classmethod.jp 22
mon-put-data \ --namespace DEVELOPERSIO \ --metric-name test \ --value 20 \ --timestamp 2013-12-09T12:00:00Z
登録
classmethod.jp 23
mon-put-data \ --namespace DEVELOPERSIO \ --metric-name test \ --statisticValues \ "SampleCount=5, Sum=500, Minimum=50, Maximum=150" \ --timestamp 2013-12-09T12:00:00Z
取得
classmethod.jp 24
メトリックネームスペースメトリック名ディメンジョン
開始日時、終了日時統計
方法:サンプル数、合計、平均 最大値、最小値周期: 60 秒~ 2 週間
取得
classmethod.jp 25
メトリック
12:00 12:01 12:03 12:04 12:05
20 80
5 / 500 / 50 / 150 5 / 300 / 10 / 150
周期 60 秒で平均を取得する場合
86.66…=(20+500)/(1+5)
63.33…=(80+300)/(1+5)
NA NA
取得
classmethod.jp 26
mon-get-stats \ --namespace DEVELOPERSIO \ --metric-name test \ --statistics “Average" \ --period 60 \ --start-time 2013-12-09T12:00:00Z \ --end-time 2013-12-09T12:10:00Z \ --headers
取得
classmethod.jp 27
Time : 2013-12-09 12:00:00Average : 86.66666666666667Unit : None
Time : 2013-12-09 12:03:00Average : 63.333333333333336Unit : None
取得
classmethod.jp 28
メトリック
12:00 12:01 12:03 12:04 12:05
20 80
5 / 500 / 50 / 150 5 / 300 / 10 / 150
周期 300 秒で最小値を取得する場合
10
取得
classmethod.jp 29
mon-get-stats \ --namespace DEVELOPERSIO \ --metric-name test \ --statistics "Minimum" \ –-period 300 \ --start-time 2013-12-09T12:00:00Z \ --end-time 2013-12-09T12:10:00Z \ --headers \
取得
classmethod.jp 30
Time : 2013-12-09 12:00:00Minimum : 10.0Unit : None
AWS メトリクス
classmethod.jp 31
AWS/EC2
classmethod.jp 32
CPUUtilizationDiskReadOpsDiskWriteOpsDiskReadBytesDiskWriteBytesNetworkInNetworkOutStatusCheckFailedStatusCheckFailed_InstanceStatusCheckFailed_System
AWS/EC2
classmethod.jp 33
CPUUtilizationDiskReadOpsDiskWriteOpsDiskReadBytesDiskWriteBytesNetworkInNetworkOutStatusCheckFailedStatusCheckFailed_InstanceStatusCheckFailed_System
AWS/EC2
classmethod.jp 34
CPUUtilization
OS 内部から top コマンド等で見る CPU使用率は不正確
http://www.axibase.com/cloud/2010/07/22/ec2-monitoring-the-case-of-stolen-cpu/
AWS/EC2
classmethod.jp 35
例CPUUtilization
Basic モニタリング監視間隔: 5 分
DimensionInstanceID=i-xxxxxxx
AWS/EC2
classmethod.jp 36
CPUUtilization統計値:平均周期: 5 分
AWS/EC2
classmethod.jp 37
CPUUtilization統計値:最大周期: 5 分
AWS/EC2
classmethod.jp 38
CPUUtilization統計値:サンプル数周期: 5 分
classmethod.jp 39
AWS/EC2
5 分に一回の監視じゃないの?
AWS/EC2
classmethod.jp 40
[ec2-user@zabbix-server ~]$ mon-get-stats \> --namespace AWS/EC2 \> --metric-name CPUUtilization \> --dimensions "InstanceId=i-1c46481e" \> --statistics "SampleCount,Average,Sum,Maximum,Minimum" \> --period 300 \> --start-time 2013-12-09T10:10:00.000Z \> --end-time 2013-12-09T10:30:00.000Z \> --region ap-northeast-1 \> --aws-credential-file /opt/aws/credential-file \> --headersTime SampleCount Average Sum Minimum Maximum Unit2013-12-09 10:10:00 5.0 96.704 483.52 91.8 100.0 Percent2013-12-09 10:15:00 5.0 96.338 481.69 95.0 100.0 Percent2013-12-09 10:20:00 5.0 97.682 488.41 93.44 100.0 Percent2013-12-09 10:25:00 5.0 97.688 488.44 95.08 100.0 Percent
CPUUtilization
AWS/EC2
classmethod.jp 41
Time : 2013-12-09 10:10:00SampleCount : 5.0Average : 96.704Sum : 483.52Minimum : 91.8Maximum :100Unit : percent
CPUUtilization
AWS/EC2
classmethod.jp 42
CPUUtilization(InstanceId=i-xxxxx)
12:00 12:05 12:10 12:15 12:20
5 / 480 / 95 / 100
i-xxxxx
AWS/EC2
classmethod.jp 43
[ec2-user@zabbix-server ~]$ mon-get-stats \> --namespace AWS/EC2 \> --metric-name CPUUtilization \> --dimensions "InstanceId=i-1c46481e" \> --statistics "SampleCount,Average,Sum,Maximum,Minimum" \> --period 60 \> --start-time 2013-12-09T10:10:00.000Z \> --end-time 2013-12-09T10:30:00.000Z \> --region ap-northeast-1 \> --aws-credential-file /opt/aws/credential-file \> --headersTime SampleCount Average Sum Minimum Maximum Unit2013-12-09 10:14:00 5.0 96.704 483.52 91.8 100.0 Percent2013-12-09 10:19:00 5.0 96.338 481.69 95.0 100.0 Percent2013-12-09 10:24:00 5.0 97.682 488.41 93.44 100.0 Percent2013-12-09 10:29:00 5.0 97.688 488.44 95.08 100.0 Percent
CPUUtilization
AWS/EC2
classmethod.jp 44
Time : 2013-12-09 10:14:00SampleCount : 5.0Average : 96.704Sum : 483.52Minimum : 91.8Maximum :100Unit : percent
CPUUtilization
AWS/EC2
classmethod.jp 45
CPUUtilization統計値:平均周期: 1 分
AWS/EC2
classmethod.jp 46
CPUUtilization統計値:平均周期: 5 分
AWS/EC2
classmethod.jp 47
周期を 1 分にしても、 1 分毎の平均ではなく、 5 分毎の平均がプロットされる
サンプル数の場合も、 1 分間ではなく 5分間のサンプル数がプロットされる
AWS/EC2
classmethod.jp 48
紛らわしいので、周期は監視間隔より大きい値を指定する
監視間隔は下記 URL で確認http://aws.amazon.com/jp/cloudwatch/
AWS/EC2
classmethod.jp 49
詳細モニタリング監視間隔: 1 分$3.675/ 月
AWS/EC2
classmethod.jp 50
AWS/EC2
classmethod.jp 51
CPUUtilization[ec2-user@zabbix-server ~]$ mon-get-stats ¥ --namespace AWS/EC2 ¥ --metric-name CPUUtilization ¥ --dimensions "InstanceId=i-1c46481e" ¥ --statistics "SampleCount,Average,Sum,Maximum,Minimum" ¥ --period 60 ¥ --start-time 2013-12-10T00:00:00.000Z ¥ --end-time 2013-12-10T00:05:00.000Z ¥ --region ap-northeast-1 ¥ --aws-credential-file /opt/aws/credential-file ¥ --headers
Time SampleCount Average Sum Minimum Maximum Unit2013-12-10 00:00:00 1.0 32.43 32.43 32.43 32.43 Percent2013-12-10 00:01:00 1.0 96.72 96.72 96.72 96.72 Percent2013-12-10 00:02:00 1.0 100.0 100.0 100.0 100.0 Percent2013-12-10 00:03:00 1.0 91.8 91.8 91.8 91.8 Percent2013-12-10 00:04:00 1.0 95.0 95.0 95.0 95.0 Percent
AWS/EC2
classmethod.jp 52
CPUUtilization
Time : 2013-12-10 00:00:00SampleCount : 1.0Average : 96.72Sum : 96.72Minimum : 96.72Maximum : 96.72Unit : Percent
AWS/EC2
classmethod.jp 53
CPUUtilization(InstanceId=i-xxxxx)
12:00 12:01 12:02 12:03 12:04
95
12:05 12:06 12:07
i-xxxxx
AWS/EC2
classmethod.jp 54
Basic 監視も詳細監視も 1 分に 1 回の監視を行っている
違いは監視結果をデータポイントとしてCloudWatch に登録する頻度
AWS/EC2
classmethod.jp 55
CPUUtilization[ec2-user@zabbix-server ~]$ mon-get-stats ¥ --namespace AWS/EC2 ¥ --metric-name CPUUtilization ¥ --dimensions "InstanceId=i-1c46481e" ¥ --statistics "SampleCount,Average,Sum,Maximum,Minimum" ¥ --period 300 ¥ --start-time 2013-12-10T00:00:00.000Z ¥ --end-time 2013-12-10T00:10:00.000Z ¥ --region ap-northeast-1 ¥ --aws-credential-file /opt/aws/credential-file ¥ --headers
Time SampleCount Average Sum Minimum Maximum Unit2013-12-10 00:00:00 5.0 83.19 415.95 32.43 100.0 Percent2013-12-10 00:05:00 5.0 96.662 483.31 95.0 100.0 Percent
AWS/EC2
classmethod.jp 56
CPUUtilization
Time : 2013-12-10 00:00:00SampleCount : 5.0Average : 83.19Sum : 415.95Minimum : 32.43Maximum : 100.0Unit : Percent
AWS/EC2
classmethod.jp 57
NetworkInNetworkOut
1 分間のネットワーク転送量 ( バイト )
AWS/EC2
classmethod.jp 58
NetworkIn[ec2-user@zabbix-server ~]$ mon-get-stats \> --namespace AWS/EC2 \> --metric-name NetworkIn \> --dimensions "InstanceId=i-43523f46" \> --statistics "SampleCount,Average,Sum,Maximum,Minimum" \> --period 300 \> --start-time 2013-12-09T16:10:00.000Z \> --region ap-northeast-1 \> --aws-credential-file /opt/aws/credential-file \> --headersTime SampleCount Average Sum Minimum Maximum Unit2013-12-09 16:10:00 5.0 154.0 770.0 42.0 444.0 Bytes2013-12-09 16:15:00 5.0 122.4 612.0 42.0 264.0 Bytes2013-12-09 16:20:00 5.0 3224.0 16120.0 132.0 9184.0 Bytes2013-12-09 16:25:00 5.0 29705.4 148527.0 306.0 135225.0 Bytes2013-12-09 16:30:00 5.0 868.0 4340.0 306.0 1568.0 Bytes
AWS/EC2
classmethod.jp 59
DiskReadOpsDiskWriteOpsDiskReadBytesDiskWriteBytesエフェメラルディスク ( ローカルディスク ) の監視結果EBS を使っている場合は AWS/EBS のメトリクスを参照する
AWS/EC2
classmethod.jp 60
Disk*
classmethod.jp 61
AWS/EBSVolumeRead/Write5 分間の読み込み・書き込み回数 ( 回 )
AWS/ELB
classmethod.jp 62
ロードバランシングサービス
『 ELB の挙動と CloudWatch メトリクスの読み方を徹底的に理解する』http://dev.classmethod.jp/cloud/aws/elb-and-cloudwatch-metrics-in-depth/
http://docs.aws.amazon.com/ElasticLoadBalancing/latest/DeveloperGuide/US_MonitoringLoadBalancerWithCW.html
AWS/ELB
classmethod.jp 63
ELB は分散システム
=
AWS/ELB
classmethod.jp 64
ELB は分散システム台数は Network Interfaces で確認高負荷時には数十台まで増える各ノードがデータポイントを登録する
AWS/ELB
classmethod.jp 65
CPUUtilization(InstanceId=i-xxxxx)
12:00 12:01 12:02 12:03 12:04 12:05 12:06 12:07
AWS/ELB
classmethod.jp 66
{Healthy,Unhealty}HostCountRequestCountLatencyHTTPCode_ELB_{4,5}XXHTTPCode_Backend_{2,3,4,5}XXBackendConnectionErrorsSurgeQueueLengthSpilloverCount
AWS/ELB
classmethod.jp 67
{Healthy,Unhealty}HostCountノードと同じアベイラビリティゾーンにある EC2 インスタンスのうち{Healty,Unhealty} なものの数
classmethod.jp 68
AWS/ELB
Availability Zone Availability Zone
42
AWS/ELB
classmethod.jp 69
{Healthy,Unhealty}HostCountノードと同じアベイラビリティゾーンにある EC2 インスタンスのうち{Healty,Unhealty} なものの数
ディメンジョンLoadBalancerName = TestELBAvailabilityZone=ap-northeast-1c
統計値:平均マルチ AZ 構成の場合は、合計する
AWS/ELB
classmethod.jp 70
RequestCountバックエンドのインスタンスからレスポンスが返ってきた数
ディメンジョンLoadBalancerName = TestELB
統計値:合計
AWS/ELB
classmethod.jp 71
HTTPCode_ELB_{4,5}XXHTTPCode_Backend_{2,3,4,5}XXBackendConnectionErrors
ディメンジョンLoadBalancerName = TestELB
統計値:合計
AWS/ELB
classmethod.jp 72
LatencyEBL からバックエンドのインスタンスにリクエストが送信されてから、レスポンスが戻るまでの時間
ディメンジョンLoadBalancerName = TestELB
統計値:平均、最大値
AWS/ELB
classmethod.jp 73
SurgeQueueLengthバックエンドへのリクエスト待ちキューの長さ
ディメンジョンLoadBalancerName = TestELB
統計値:最大値 平均値、最小値
AWS/ELB
classmethod.jp 74
SpilloverCountキューがあふれて、 HTTPCode_ELB_500 エラーが返った数
ディメンジョンLoadBalancerName = TestELB
統計値:合計
まとめ
classmethod.jp 75
期待しているものと違う値をとっている可能性がある
主要なメトリクスはドキュメントで確認メトリクスの値があらわすものメトリクスに適した統計値監視間隔
http://docs.aws.amazon.com/AmazonCloudWatch/latest/DeveloperGuide/CW_Support_For_AWS.html