cloudwatch logsについて

50
CloudWatch Logs普通に使う クックパッド株式会社 菅原元気

Upload: sugawara-genki

Post on 02-Jul-2015

1.634 views

Category:

Technology


0 download

DESCRIPTION

cloudpack night #10での発表資料です

TRANSCRIPT

Page 1: CloudWatch Logsについて

CloudWatch Logsを普通に使う

クックパッド株式会社菅原元気

Page 2: CloudWatch Logsについて

お前誰よ

菅原元気@sgwr_dts / http://so-wh.at/

● Ruby / AWS

● https://bitbucket.org/winebarrel

● https://github.com/winebarrel

● 白金台の方から来ました

Page 3: CloudWatch Logsについて

最近のアクティビティ

便利スキーマ管理ツールを作りましたhttps://github.com/winebarrel/ridgepole

Page 4: CloudWatch Logsについて

増床おめでとうございます

いやーいいオフィスですね(予想)

Page 5: CloudWatch Logsについて

アジェンダ

CloudWatch Logsの話をします

Page 6: CloudWatch Logsについて

CloudWatch Logsとは

Page 7: CloudWatch Logsについて

CloudWatch Logs

汎用的なログ収集サービス● ログ収集● グラフ化● 通知

Page 8: CloudWatch Logsについて

CloudWatch Logs

シンプルなサービスです

Page 9: CloudWatch Logsについて

CloudWatch Logs

ユースケース● ログを使ったエラー監視

Page 10: CloudWatch Logsについて

CloudWatch Logs

ユースケース● ログを使ったエラー監視…ぐらい?

Page 11: CloudWatch Logsについて

CloudWatch Logs

微妙なところ● ログ取得がストリーム単位

Page 12: CloudWatch Logsについて

CloudWatch Logs

微妙なところ● ログ取得がストリーム単位

●検索機能がない

Page 13: CloudWatch Logsについて

CloudWatch Logs

9/2現在、ログの収集先はus-east-1のみただしイベントの投稿はどこからでも可能

Page 14: CloudWatch Logsについて

CloudWatch Logs

各種クライアント● CloudWatch Logs Agenthttps://s3.amazonaws.com/aws-

cloudwatch/downloads/latest/awslogs-agent-setup.py

● AWS CLIhttp://docs.aws.amazon.com/cli/latest/reference/logs/index.html

● fluentdhttps://github.com/ryotarai/fluent-plugin-cloudwatch-logs

● APIhttp://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/Welcome.ht

ml

Page 15: CloudWatch Logsについて

groupとstreamについて

Page 16: CloudWatch Logsについて

log group / log stream

Page 17: CloudWatch Logsについて

log group / log stream

● ログはlog groupごとに処理o 可視化・グラフ化・監視o API上ではstream毎にログの取得は可能

● log groupにlog streamが属するo プログラムはlog streamにイベントを投げるo 1スレッド→1ストリーム

Page 18: CloudWatch Logsについて

使い方

Page 19: CloudWatch Logsについて

AWS CLI

環境変数の設定(またはクレデンシャルファイルを設定)

$ export AWS_ACCESS_KEY_ID=...

$ export SECRET_ACCESS_KEY=...

$ export AWS_DEFAULT_REGION=us-east-1

Page 20: CloudWatch Logsについて

AWS CLI

log groupの作成$ aws logs create-log-group --log-group-name my-group

$ aws logs describe-log-groups | jq '.logGroups[] | select(.logGroupName == "my-group")'

{

"storedBytes": 0,

"arn": "arn:aws:logs:us-east-1:XXX:log-group:my-group:*",

"logGroupName": "my-group",

"creationTime": 1409629885412,

"metricFilterCount": 0

}

Page 21: CloudWatch Logsについて

AWS CLI

log streamの作成$ aws logs create-log-stream --log-group-name my-group --log-stream-name my-stream

$ aws logs describe-log-streams --log-group-name my-group

{

"logStreams": [

{

"creationTime": 1409630168044,

"logStreamName": "my-stream",

"arn": "arn:aws:logs:us-east-1:822997939312:log-group:my-group:log-stream:my-stream",

"storedBytes": 0

}

]

}

Page 22: CloudWatch Logsについて

AWS CLI

イベントの投稿$ aws logs put-log-events ¥

> --log-group-name my-group --log-stream-name my-stream ¥

> --log-events ¥

> timestamp=1409630448000,message="Test event 1" ¥

> timestamp=1409630448001,message="Test event 2"

{

"nextSequenceToken": "49540113588536892459580435126484523626194989597679702066"

}

Page 23: CloudWatch Logsについて

AWS CLI

イベントの投稿(二回目)$ aws logs put-log-events ¥

> --sequence-token 49540113588536892459580435126484523626194989597679702066 ¥

> --log-group-name my-group --log-stream-name my-stream ¥

> --log-events ¥

> timestamp=1409630448003,message="Test event 3" ¥

> timestamp=1409630448004,message="Test event 4"

{

"nextSequenceToken": "49540113588536892459580435126797635413475185494595751986"

}

Page 24: CloudWatch Logsについて

AWS CLI

イベントの投稿● 1回のAPIコールで複数のイベントを投稿可能● timestampはミリ秒を含むUNIX time

● streamへの2回目以降の投稿にはsequence

tokenが必要o 複数のスレッドから同じstreamの投稿はsequence

tokenの同期が必要

Page 25: CloudWatch Logsについて

AWS CLI

イベントの取得$ aws logs get-log-events --log-group-name my-group --log-stream-name my-stream

{

"nextForwardToken": "f/31435809445027774223220423298428344103348277957912231937",

"events": [

{

"ingestionTime": 1409630516068,

"timestamp": 1409630448000,

"message": "Test event 1"

},

{

"ingestionTime": 1409630516068,

"timestamp": 1409630448001,

"message": "Test event 2"

},

Page 26: CloudWatch Logsについて

AWS CLI

コンソール

Page 27: CloudWatch Logsについて

CloudWatch Logs Agent

某社のブログを参照してください。http://dev.classmethod.jp/cloud/aws/amazon-

cloudwatch-logs/

Page 28: CloudWatch Logsについて

CloudWatch Logs Agent

Agent便利なんですかねぇ…

Page 29: CloudWatch Logsについて

便利機能

Page 30: CloudWatch Logsについて

グラフ化

Metric Filterによりグラフ化http://docs.aws.amazon.com/AmazonCloudWatch/latest/DeveloperGuide/CountingLogEventsExample.html

log groupにフィルタを作成することで、ログ(イベント)ごとにメトリクスを記録できる

Page 31: CloudWatch Logsについて

グラフ化

metricName

CloudWatchのメトリック名metricNamespace

メトリックのネームスペースmetricValue

メトリックを記録するときの値。”1”なら1イベントにつき”1”が記録される。文字列も可http://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/API_MetricTransformation.html

$ aws logs put-metric-filter ¥

> --log-group-name my-group ¥

> --filter-name my-filter ¥

> --filter-pattern '' ¥

> --metric-transformations ¥

> metricName=EventCount,metricNamespace=YourNamespace,metricValue=1

Page 32: CloudWatch Logsについて

グラフ化

Page 33: CloudWatch Logsについて

フィルターhttp://docs.aws.amazon.com/AmazonCloudWatch/latest/DeveloperGuide/FilterAndPatternSyntax.html

filter patterの指定により特定の条件をメトリックとして記録できる

Page 34: CloudWatch Logsについて

フィルター

127.0.0.1 - frank [10/Oct/2000:13:25:15 -0700] "GET /apache_pb.gif HTTP/1.0" 200 1534

127.0.0.1 - frank [10/Oct/2000:13:35:22 -0700] "GET /apache_pb.gif HTTP/1.0" 500 5324

127.0.0.1 - frank [10/Oct/2000:13:50:35 -0700] "GET /apache_pb.gif HTTP/1.0" 200 4355

[ip, user, username, timestamp, request, status_code, bytes > 1000]

[ip, user, username, timestamp, request, status_code = 200, bytes]

[ip, user, username, timestamp, request, status_code = 4*, bytes]

[ip, user, username, timestamp, request = *html*, status_code = 4*, bytes]

$ aws logs put-metric-filter ¥

> --log-group-name my-group ¥

> --filter-name my-filter ¥

> --filter-pattern '' ¥

> --metric-transformations ¥

> metricName=EventCount,metricNamespace=YourNamespace,metricValue=1

Page 35: CloudWatch Logsについて

フィルター

● 空白区切りの構造化文字列として解釈● ダブルクォート(“)、角括弧([])はグループ化

o シングルクォート(‘)、普通の括弧()、中括弧{}はグループ化されない

● 「...」で適当に省略してくれるo [..., status_code = 200, bytes]

末尾のstatus_codeが200

Page 36: CloudWatch Logsについて

フィルター

マッチングはCLIでテストできるトの取得~$ aws logs test-metric-filter ¥

> --filter-pattern '[...]' ¥

> --log-event-messages '127.0.0.1 - frank [10/Oct/2000:13:25:15 -0700] "GET /apache_pb.gif HTTP/1.0" 200 1534'

{

"matches": [

{

"eventNumber": 1,

"eventMessage": "127.0.0.1 - frank [10/Oct/2000:13:25:15 -0700] ¥"GET /apache_pb.gif HTTP/1.0¥" 200 1534",

"extractedValues": {

"$6": "200",

"$7": "1534",

"$4": "10/Oct/2000:13:25:15 -0700",

"$5": "GET /apache_pb.gif HTTP/1.0",

"$2": "-",

"$3": "frank",

"$1": "127.0.0.1"

}

}

]

}

Page 37: CloudWatch Logsについて

fluentdとの連携

Page 38: CloudWatch Logsについて

fluent-plugin-cloudwatch-logs

https://github.com/ryotarai/fluent-plugin-cloudwatch-logs

● @ryot_a_rai先生作● Input / Output 両方対応

o Inputは全然検証してません

Page 39: CloudWatch Logsについて

fluent-plugin-cloudwatch-logs

<match cloudwatch_logs.**>

type cloudwatch_logs

log_group_name my-group

log_stream_name my-stream

auto_create_stream true

message_keys message

#use_tag_as_group false

</match>

$ echo '{"message":"item1 item2 item3"}' | fluent-cat cloudwatch_logs.test

Page 40: CloudWatch Logsについて

fluent-plugin-cloudwatch-logs

● log group / log streamは自動作成可能● sequence tokenはメモリに記録

Page 41: CloudWatch Logsについて

fluent-plugin-cloudwatch-logs

● “message_keys”を指定しないとJSONとして投稿されるo フィルターの動作を考えると指定した方がよい

Page 42: CloudWatch Logsについて

管理ツール作りました

Page 43: CloudWatch Logsについて

Radiosonde / Meteorlog

「AWSコード化」シリーズ● Radiosonde

o CloudWatchのAlartの管理

● Meteorlogo CloudWatch Logsの管理

Page 44: CloudWatch Logsについて

Meteorloghttps://github.com/winebarrel/meteorlog

log_group "any-group" do

log_stream "my-stream"

# Please write the following if you do not want to manage log_streams

#any_log_streams

metric_filter "MyAppAccessCount" do

# see http://docs.aws.amazon.com/AmazonCloudWatch/latest/DeveloperGuide/FilterAndPatternSyntax.html

filter_pattern '[ip, user, username, timestamp, request, status_code, bytes > 1000]'

metric :name=>"EventCount", :namespace=>"YourNamespace", :value=>"1"

end

metric_filter "MyAppAccessCount2" do

metric :name=>"EventCount2", :namespace=>"YourNamespace2", :value=>"2"

endend

Radiosonde / Meteorlog

Page 45: CloudWatch Logsについて

Radiosonde / Meteorlog

Radiosondehttps://github.com/winebarrel/radiosonde

alarm "alarm1" do

namespace "AWS/EC2"

metric_name "CPUUtilization"

dimensions "InstanceId"=>"i-XXXXXXXX"

period 300

statistic :average

threshold ">=", 50.0

evaluation_periods 1

actions_enabled true

alarm_actions []

ok_actions []

insufficient_data_actions ["arn:aws:sns:us-east-1:123456789012:my_topic"]end

Page 46: CloudWatch Logsについて

Radiosonde / Meteorlog

便利ですよ

Page 47: CloudWatch Logsについて

まとめ

Page 48: CloudWatch Logsについて

まとめ

● CloudWatch Logsは便利

Page 49: CloudWatch Logsについて

まとめ

● CloudWatch Logsは便利…そうな雰囲気があります

Page 50: CloudWatch Logsについて

まとめ

● CloudWatch Logsは便利…そうな雰囲気があります

●検索機能欲しい