AWS CLIを利用して、CloudWatch Logsのログストリームを作成してみます。
前提条件
CloudWatchLogsへの権限
- CloudWatch Logsに対してフル権限があること。
AWS CLIのバージョン
-
以下のバージョンで動作確認済
- AWS CLI 1.7.24
コマンド
aws --version
結果(例)
aws-cli/1.7.24 Python/2.7.5 Darwin/13.4.0
- 準備
=======
0.1. リージョンの指定
ログストリームを作成するロググループのリージョンを指定します。
(カレントユーザが利用するカレントリージョンも切り変わります。)
コマンド(東京リージョンの場合)
export AWS_DEFAULT_REGION='ap-northeast-1'
0.2. 変数の確認
プロファイルとリージョンが想定のものになっていることを確認します。
変数の確認
aws configure list
結果(例)
Name Value Type Location
---- ----- ---- --------
profile cloudwatchFull-prjZ-mbp13 env AWS_DEFAULT_PROFILE
access_key ****************LOAQ shared-credentials-file
secret_key ****************I1O1 shared-credentials-file
region ap-northeast-1 env AWS_DEFAULT_REGION
0.3. ロググループの指定
ログストリームを作成するロググループを指定します。
コマンド
LOG_GROUP_NAME='<ロググループ名>'
0.4. ロググループの内容確認
ログストリームを作成するロググループの内容を確認します。
コマンド
aws logs describe-log-groups \
--log-group-name-prefix ${LOG_GROUP_NAME}
結果(例)
{
"logGroups": [
{
"storedBytes": 0,
"metricFilterCount": 0,
"creationTime": 1430092395471,
"logGroupName": "test/sample",
"retentionInDays": 3653,
"arn": "arn:aws:logs:ap-northeast-1:XXXXXXXXXXXX:log-group:test/sample:*"
}
]
}
- 事前作業
===========
1.1. ログストリーム名の決定
作成するログストリーム名を決めます。
コマンド
LOG_STREAM_NAME='test-stream'
1.2. 同名のログストリームの不存在確認
作成するログストリーム名と同じ名前のログストリームが存在しないことを確認します。
コマンド
aws logs describe-log-streams \
--log-group-name ${LOG_GROUP_NAME} \
--log-stream-name-prefix ${LOG_STREAM_NAME}
結果(例)
{
"logStreams": []
}
- ログストリームの作成
=======================
2.1. ログストリームの作成
ログストリームを作成します。
変数の確認
cat << ETX
LOG_GROUP_NAME: ${LOG_GROUP_NAME}
LOG_STREAM_NAME: ${LOG_STREAM_NAME}
ETX
コマンド
aws logs create-log-stream \
--log-group-name ${LOG_GROUP_NAME} \
--log-stream-name ${LOG_STREAM_NAME}
結果
(戻り値なし)
2.2. ログストリームの確認
作成したログストリームを確認します。
コマンド
aws logs describe-log-streams \
--log-group-name ${LOG_GROUP_NAME} \
--log-stream-name-prefix ${LOG_STREAM_NAME}
結果(例)
{
"logStreams": [
{
"creationTime": 1430093344032,
"arn": "arn:aws:logs:ap-northeast-1:XXXXXXXXXXXX:log-group:test/sample:log-stream:test-stream",
"logStreamName": "test-stream",
"storedBytes": 0
}
]
}
- 最初のログイベント
=====================
3.1. ログイベントの取得
ログストリームにまだログイベントが存在しないことを確認します。
コマンド
aws logs get-log-events \
--log-group-name ${LOG_GROUP_NAME} \
--log-stream-name ${LOG_STREAM_NAME}
結果(例)
{
"nextForwardToken": "f/31892233890440743395043453640721869952627421282803122176",
"events": [],
"nextBackwardToken": "b/31892233890440743395043453640721869952627421282803122176"
}
3.2. 最初のログイベントの作成
ログイベントを作成します。
コマンド
TIME_EPOCH="`date +%s`000"
LOG_MSG='Error: event sample 1.'
LOG_EVENTS="timestamp=${TIME_EPOCH},message=\"${LOG_MSG}\""
変数の確認
cat << ETX
LOG_GROUP_NAME: ${LOG_GROUP_NAME}
LOG_STREAM_NAME: ${LOG_STREAM_NAME}
LOG_EVENTS: "${LOG_EVENTS}"
ETX
コマンド
aws logs put-log-events \
--log-group-name ${LOG_GROUP_NAME} \
--log-stream-name ${LOG_STREAM_NAME} \
--log-events "${LOG_EVENTS}"
結果(例)
{
"nextSequenceToken": "49545657805657863444697949850872230860455870730858398226"
}
3.3. 最初のログイベントの取得
作成したログイベントを確認します。
コマンド
aws logs get-log-events \
--log-group-name ${LOG_GROUP_NAME} \
--log-stream-name ${LOG_STREAM_NAME}
結果(例)
{
"nextForwardToken": "f/31892236143128218881144701261737206596066088858448691200",
"events": [
{
"ingestionTime": 1430097342513,
"timestamp": 1430097329000,
"message": "Error: event sample 1."
}
],
"nextBackwardToken": "b/31892236143128218881144701261737206596066088858448691200"
}
- ログイベントの作成 (2回目以降)
=================================
4.1. ログイベントの作成 (2回目以降)
2つ目のログイベントを作成します。
最初の時以外は、TOKENが必要になります。
コマンド
LOG_PUT_TOKEN=`aws logs describe-log-streams --log-group-name ${LOG_GROUP_NAME} --log-stream-name-prefix ${LOG_STREAM_NAME} --query 'logStreams[].uploadSequenceToken' --output text` \
&& echo ${LOG_PUT_TOKEN}
結果(例)
49545657805836269406286217709901357107175578637378257042
コマンド
TIME_EPOCH="`date +%s`000"
LOG_MSG='Error: event sample 2.'
LOG_EVENTS="timestamp=${TIME_EPOCH},message=\"${LOG_MSG}\""
変数の確認
cat << ETX
LOG_GROUP_NAME: ${LOG_GROUP_NAME}
LOG_STREAM_NAME: ${LOG_STREAM_NAME}
LOG_EVENTS: "${LOG_EVENTS}"
LOG_PUT_TOKEN: ${LOG_PUT_TOKEN}
ETX
コマンド
aws logs put-log-events \
--log-group-name ${LOG_GROUP_NAME} \
--log-stream-name ${LOG_STREAM_NAME} \
--log-events "${LOG_EVENTS}" \
--sequence-token ${LOG_PUT_TOKEN}
結果(例)
{
"nextSequenceToken": "49545657805836269406286217727077775152260327876857954450"
}
4.2. ログイベントの取得
作成したログイベントを確認します。
ここでは、最新の1イベントを取得します。
コマンド
MAX_ITEMS='1'
コマンド
aws logs get-log-events \
--log-group-name ${LOG_GROUP_NAME} \
--log-stream-name ${LOG_STREAM_NAME} \
--limit ${MAX_ITEMS}
結果(例)
{
"nextForwardToken": "f/31892197652042006217289156974186602967837732609731723264",
"events": [
{
"ingestionTime": 1430095690715,
"timestamp": 1430095603000,
"message": "Error: event sample 2."
}
],
"nextBackwardToken": "b/31892197652042006217289156974186602967837732609731723264"
}
完了
ログストリームを作成したら、次はメトリックフィルタを作成してみます。
http://qiita.com/tcsh/items/70b4f9457085e285a7a3