Edited at

[JAWS-UG CLI] CloudWatch Logs:#2 ログストリームの作成

More than 3 years have passed since last update.

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. 準備


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.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. ログストリームの作成


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. 最初のログイベント


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"
}


4. ログイベントの作成 (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