ECSからcloudwatchにながしたログをtailでみたい

![1.png](https://qiita-image-store.s3.amazonaws.com/0/32215/8489914e-fa56-2f4a-bc73-4c2ead1c3622.png)初学者向け
ECSことはじめ中に出会って、調べて活用したことを書いています。


# 今回のお悩み


[AWS Solutions Architect ブログ: Amaozn ECSがawslogs Logging Driver(Amazon CloudWatch Logs)に対応しました ](http://aws.typepad.com/sajp/2016/05/amazon-ecs-with-awslogs.html)

awslogsというLogging DriverをECSでタスク定義をした際に使えば、Dockerコンテナでログとして残しておきたい内容をstdout/stderrに吐き出す様にしておくだけで、自動的にCloudWatch Logsに保存されていきます。

便利！
と思ったんですが、cloudwatchログのロググループに蓄積されたストリームを見て、絶望します。

あれ？これファイル一つづつクリックするんですか？
これ、tailで見たいのですが、と言うお悩みです。

![cloudwatch-log](https://qiita-image-store.s3.amazonaws.com/0/32215/c14be558-6fc8-9916-b19e-c285fed29b58.png)


![無理です](https://qiita-image-store.s3.amazonaws.com/0/32215/2774d829-c189-25cf-e495-9040b1c2269e.png)

- [TIPS] ちなみにcloudwatchのログの画面で表示項目は増やしておきましょう
    - ![mark.png](https://qiita-image-store.s3.amazonaws.com/0/32215/aab8cfce-eb07-66d5-999a-c9a8367f4ecb.png)のところをクリックすると、列の表示非表示が変えられます
    - [ログデータの表示 - Amazon CloudWatch ログ ](http://docs.aws.amazon.com/ja_jp/AmazonCloudWatch/latest/logs/ViewingLogData.html)


# > awslogsで解決

自分のマシンにawslogsをインストールしましょう！pipで簡単に導入可能です。

```
pip install awslogs
```

tailしたい場合はオプションつけてこんな感じで、みたいロググループのログを見ることができます。

```
awslogs get {ロググループ名} --watch
```

```
20:42:19 ~/  $ awslogs get api-logs -w -G --timestamp
6bdd60a3ac787a11fc07db4d8f549c3590f997ebba3aa52b458a1e9acb81c109 2016-12-17T11:41:14.662Z npm info it worked if it ends with ok
6bdd60a3ac787a11fc07db4d8f549c3590f997ebba3aa52b458a1e9acb81c109 2016-12-17T11:41:14.663Z npm info using npm@2.14.12
6bdd60a3ac787a11fc07db4d8f549c3590f997ebba3aa52b458a1e9acb81c109 2016-12-17T11:41:14.663Z npm info using node@v4.3.1
6bdd60a3ac787a11fc07db4d8f549c3590f997ebba3aa52b458a1e9acb81c109 2016-12-17T11:41:15.045Z npm info prestart api@0.0.0
6bdd60a3ac787a11fc07db4d8f549c3590f997ebba3aa52b458a1e9acb81c109 2016-12-17T11:41:15.051Z npm info start api@0.0.0
```

- -w/--watch オプション
    - いわゆるtailです
- -G/--no-group オプション
    - グループ名を非表示に
- --timestampオプション
    - イベントが発生した時間を表示します


私は上記のような形で使っていますが、次に紹介するリンクではもっと詳しい使い方が載っているので、参考にしてください！

### >> インストールや使い方

こちらに詳しく載っています。

- [jorgebastida/awslogs: AWS CloudWatch logs for Humans™ ](https://github.com/jorgebastida/awslogs)

- [ターミナルから直感的にCloudWatch Logsを検索できるawslogsコマンドの紹介 ｜ Developers.IO ](http://dev.classmethod.jp/cloud/aws/show-cloudwatch-logs-with-awslogs-command/)


### >> 事前にcredentialやプロファイルの設定はしておこう
さて、あなたが実行したい環境はどの環境に対してですか？
自分の実験環境なのか、お客さんAなのかBなのか、ターミナルを開いたら、以下で確認しておきましょう。

```
$ aws configure list
      Name                    Value             Type    Location
      ----                    -----             ----    --------
   profile                 bohelabo           manual    --profile
access_key     ****************TTVQ shared-credentials-file
secret_key     ****************TTfQ shared-credentials-file
    region                us-east-1      config-file    ~/.aws/config
```

私は、.bashrcで主に使う環境はセットしています。ただし、コマンド実行前には必ず確認が必要！

```
export AWS_DEFAULT_PROFILE=bohelabo
```

- cli環境がない人はこちら
    - AWS CLI のインストールと設定 - Amazon Kinesis Streams http://docs.aws.amazon.com/ja_jp/streams/latest/dev/kinesis-tutorial-cli-installation.html

# ECSからcloudwatchにログを流す設定方法

そもそもECSからcloudwatchにログを流す設定方法についてってどうするんですか？という追加解説。

## > ECS->タスク定義作成->ログ設定

タスク定義の作成のログ設定のところで、そのタスクと紐付けるログをどこに流すかを設定します。

![awslogs](https://qiita-image-store.s3.amazonaws.com/0/32215/637ec209-58dc-db81-c7dc-ef3bca021f8f.png)

- awslogs-group
    - cloudwatchログのログググループ名。これは事前に、cloudwatch側で作成しておきましょう。タスク実行時にないとエラーになってしまいます
    
- awslogs-region
    - 使っているリージョンを指定します
- awslogs-stream-prefix
    - ストリームにプリフィックスをつけることができます。これを設定すると、ストリームの名称は以下のようになります。スクリーコンテナの名前とプリフィックスにつける名前を工夫すると、フィルタリング等にお役立ちになりそうです

```
prefix-name/container-name/ecs-task-id
```

## > cloudwatchログ

上記のような設定で、ECSのサービスを実行すると、以下のようなログストリームが作成されます。

![cloudwatch-logs](https://qiita-image-store.s3.amazonaws.com/0/32215/8f388e27-d94e-ce78-03df-c646d0a681d5.png)


### >>> 参考サイト

- [Using the awslogs Log Driver - Amazon EC2 Container Service ](http://docs.aws.amazon.com/AmazonECS/latest/developerguide/using_awslogs.html)


- [Amazon CloudWatch Logs logging driver - Docker ](https://docs.docker.com/engine/admin/logging/awslogs/)