LoginSignup
13
11

More than 5 years have passed since last update.

aws-cliでAWS CloudWatchにログを書き込む

Last updated at Posted at 2018-05-04

ちょっとしたテストの際、コマンドラインでサラッとログが書きたい時があります。
そんなときは、aws put-log-events が使えます。

PHPで書きたいときはこちらを参照にしてください。

準備

aws-cliのインストールとセットアップ

aws-cliを利用できるようにします。Macなら、

brew install awscli

でインストール可能なようです。便利。
インストールしたら、

aws configure

を実行し、Key, Secret, Region, formatを設定します。

もちろん、CloudWatchに書き込み権限のあるユーザーである必要があります。

ロググループとストリームを事前に作成しておく

put-log-eventsでは、指定したグループやストリームが存在しない場合に勝手に作成してくれることはないようなので、事前に作成しておきます。ここでは、

  • グループ : test
  • ストリーム : app1

を作成し、利用します。

タイムスタンプを出力する

コマンドの引数として13桁のmillisecondのUnixTimestampを付与する必要がありますが、その出力はnodeで行うこととします。

node -e 'console.log(Date.now())'
1525438246400

date +%s でも出力できますが、11桁なので。。。

ログを書き込む

コマンドは1回目と2回目以降では、実行の際のオプションが少し異なります。

2回目以降の実行には、実行の戻り値として返される nextSequenceTokenを --sequence-token オプションで渡してやる必要があるようです。

1回目

下記を実行すると、nextSequenceTokenが返されます。

aws logs put-log-events --log-group-name "test" --log-stream-name "app1" --log-events timestamp=$(node -e 'console.log(Date.now())'),message='Hello1'

{
    "nextSequenceToken": "495802684308768944976731644967294124703722208857969xxxxx"
}

2回目以降

返されたToken情報を --sequence-token で指定して実行します。

aws logs put-log-events --log-group-name "test" --log-stream-name "app1" --log-events timestamp=$(node -e 'console.log(Date.now())'),message='Hello2' --sequence-token 495802684308768944976731644967294124703722208857969xxxxx

延々と繰り返します。。。

nextSequenceTokenを忘れたら

ずっとTokenを追い続けるのはしんどいです。忘れた場合でも、グループを指定して、aws log describe-log-strems を実行すれば、uploadSequenceToken として次に添付すべきtoken値を返してくれるようです。

なお、複数のストリームがある場合はストリーム毎に値が返るようです。

aws logs describe-log-streams --log-group-name "test"
    "logStreams": [
        {
            "logStreamName": "app1",
            "creationTime": 1525436712803,
            "firstEventTimestamp": 1525436741548,
            "lastEventTimestamp": 1525436767883,
            "lastIngestionTime": 1525436768309,
            "uploadSequenceToken": "495802684308768944976731645408177281858981340448628xxxxx",
            "arn": "arn:aws:logs:ap-northeast-1:051990479xxx:log-group:test:log-stream:app1",
            "storedBytes": 0
        },

とりあえずはこんな感じ。

参考

以下、参考にさせていただきました。ありがとうございます。

13
11
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
13
11