Amazon CloudWatch Logs ユーザーガイドを読んで理解を深める

#0. はじめに
* Amazon CloudWatch Logs サービスを理解、活用するために、[Amazon CloudWatch Logs ユーザーガイド](http://docs.aws.amazon.com/ja_jp/AmazonCloudWatch/latest/logs/WhatIsCloudWatchLogs.html) を一読して、個人用に概要と最低限設定しておくべきことをまとめる。
* 補足は、[Amazon CloudWatch の よくある質問](https://aws.amazon.com/jp/cloudwatch/faqs/) の よくある質問を参考にしている。

##0.1 概要、注意点など
**(1) CloudWatch Logs**

* [特徴](#characteristic)

**(2) IAMポリシー、IAMロール**

* [IAMロールの注意点](#IAMRoleNote)

**(3) CloudWatch Logs エージェント**
CloudWatch Logs エージェントは、Amazon Linux または Ubuntu を実行する Amazon EC2 インスタンスでログデータを CloudWatch Logs に自動送信する方法を提供する。

 * [前提条件](#agentprerequisite)
 * [リファレンス](#agentreference)
 * [サポートしているログローテート](#logrotate)
 * [エージェントを停止させた場合の挙動](#agentstop)

**(4) [ログの保持期間の変更](#retentionperiod)**

 * ロググループに対して保持期間を設定することができる。
 * 期限切れのログイベントは自動的に削除される。

**(5) ログデータ送信タイミング**

初回時

* CloudWatch Logs エージェントを起動すると[awslogs.conf の設定](#38-cloudwatch-logs-%E3%82%A8%E3%83%BC%E3%82%B8%E3%82%A7%E3%83%B3%E3%83%88%E3%81%AE%E3%83%AA%E3%83%95%E3%82%A1%E3%83%AC%E3%83%B3%E3%82%B9)を読み込んで自動的に CloudWatch Logs へログが送信される。
* CloudWatch Logs にプッシュするログファイルは「file」に設定する。ファイルのどの位置からデータの読み出しを開始するかを「initial_position」に設定する（デフォルトはファイルの先頭(start_of_file))。
* なので、デフォルト設定では指定したファイルのすべての内容が送信される。

以降

* **[次の条件のいずれかが満たされる場合にバッチがフルになり](#batch)**、データがPUSHされる(リアルタイム送信ではない）。
 1. 最初のログイベントが追加されてから、[buffer_duration] の時間が経過した(デフォルト 5000ms=5秒)。
 2. 累積されたログイベントの [batch_size] 未満ですが、新しいログイベントを追加すると [batch_size] を超過します(デフォルト　32768 バイト)。
 3. ログイベント数は [batch_count] に達しました(デフォルト 1000)。
 4. バッチのログイベントは 24 時間以上になりませんが、新しいログイベントを追加すると 24 時間の制約を超過します。


**(6) [ログエントリ、ログイベント、またはバッチがスキップまたは切り捨てられる原因](#batchskip)**

<a name="cloudwatchlogs-metrics">**(7) メトリクス**
※[よくある質問](https://aws.amazon.com/jp/cloudwatch/faqs/#monitoring)から

* Amazon CloudWatch のメトリクスでは何を測定できるのですか?
 * *Amazon CloudWatch では、AWS のクラウドリソースや、お客様が AWS で実行するアプリケーションのモニタリングを行うことができます。*
 * AWS の多数の製品とサービスについて、メトリクスが自動的に生成されます。
<br/><br/>
* すべてのメトリクスの保存期間はどうなっていますか?
 * *2016 年 11 月 1 日、CloudWatch はメトリックスの保存期間の延長を発表しました。これにより、お客様のすべてのメトリックスの保存期間が、従来の 14 日間から 15 か月間になりました。*
 * *CloudWatch Metrics で選択できる保存期間スケジュールは、次の 3 種類になりました。*
<pre>
1 分ごとのデータポイントを 15 日間保存
5 分ごとのデータポイントを 63 日間保存
1 時間ごとのデータポイントを 455 日間保存
</pre>
<br/>
<a name="metricsdel">
* メトリクスは削除できますか?
 * *CloudWatch ではメトリクスの削除はサポートされません。メトリクスは上記の保存期間スケジュールに基づいて有効期間が切れます。*
　<br/><br/>
* Amazon EC2 インスタンスのモニタリングを無効にした場合、メトリクスデータを失いますか?
 * *いいえ。すべてのアマゾン EC2 インスタンスのメトリックスデータは、上記の保存期間スケジュールに基づいて常に取得できます。*
 * *ただし、名前空間で最新のインスタンスが表示されるように、CloudWatch コンソールでのメトリクスの検索は、メトリクスが最後に取り込まれてから 2 週間に制限されます。*
<br/><br/>
* 終了した Amazon EC2 インスタンスや削除された Elastic Load Balancer のメトリクスデータにアクセスできますか?
 * *はい。Amazon CloudWatch は、終了した Amazon EC2 インスタンスまたは削除された Elastic Load Balancing のメトリクスを 15 か月間格納します。*



##0.2 設定例

###0.2.1 CloudWatch Logs を新規利用するための基本設定の手順例

[1] CloudWatch Logs の利用を許可するIAMポリシーを付加したIAMロールを作成

* 参考
 * [3.1 クイックスタート ステップ 1](#31quickstartstep1)
 * [3.2 クイックスタート](#32quickstart)

>1) 管理者権限ポリシーが付加されたIAMユーザ でAWSマネジメントコンソールへサインインして、IAMサービスへ遷移する。(参考:[IAM 管理者のユーザーおよびグループの作成](http://qiita.com/tonishy/items/9eb772b4a5a338ac6ee6#35-iam-%E7%AE%A1%E7%90%86%E8%80%85%E3%81%AE%E3%83%A6%E3%83%BC%E3%82%B6%E3%83%BC%E3%81%8A%E3%82%88%E3%81%B3%E3%82%B0%E3%83%AB%E3%83%BC%E3%83%97%E3%81%AE%E4%BD%9C%E6%88%90))

>　https://console.aws.amazon.com/iam

>2) ナビゲーションペイン「ポリシー」
>>ポリシーの作成 ⇒ 独自のポリシーを作成 ⇒ 選択
>>>・ポリシー名
CloudWatchLogs
>>>
>>>・ポリシードキュメント

```
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "logs:CreateLogGroup",
        "logs:CreateLogStream",
        "logs:PutLogEvents",
        "logs:DescribeLogStreams"
    ],
      "Resource": [
        "arn:aws:logs:*:*:*"
    ]
  }
 ]
}
```

>>>ポリシーの作成


>3) ナビゲーションペイン「ロール」
>>新しいロールの作成
>>>・ロール名
ec2role

>>ロールタイプの選択
>>>・AWS サービスロール
「Amazon EC2」 を選択

>>ポリシーのアタッチ
>>>・作成した　CloudWatchLogs　ポリシーをアタッチする

>>ロールの作成

>
![20161222-01.png](https://qiita-image-store.s3.amazonaws.com/0/148868/85de983c-9065-d57a-d08e-3661956c2ba7.png)

[2] 上記のIAMロールを割り当てた EC2 を作成

> EC2インスタンス作成時の、「インスタンスの詳細の設定」画面の「IAM ロール」に作成した ec2role を選択する

>
![20161222-02.png](https://qiita-image-store.s3.amazonaws.com/0/148868/54f7b003-4a63-9dff-93f1-3107ac3a3b0a.png)



[3] 上記のEC2インスタンスに CloudWatch Logs エージェントをインストール

* 参考
 * [3.1 クイックスタート ステップ 2](#31quickstartstep2)
<br/>
・インストール
<pre>
$ sudo yum update
$ sudo yum install awslogs
</pre>
・バージョン確認
<pre>
$ yum info aws-cli-plugin-cloudwatch-logs
</pre>

[4] CloudWatch Logs エージェントの設定ファイル編集

* 参考
 * [3.1 クイックスタート ステップ 2](#31quickstartstep2)
<br/><br/> 
/etc/awslogs/awscli.conf
<pre>
[plugins]
cwlogs = cwlogs
[default]
region = ap-northeast-1
</pre>

[5] CloudWatch Logs エージェントが送信するログファイルを設定

* 参考
 * [3.1 クイックスタート ステップ 2](#31quickstartstep2)<br/>
 * [3.8 CloudWatch Logs エージェントのリファレンス](#38-cloudwatch-logs-%E3%82%A8%E3%83%BC%E3%82%B8%E3%82%A7%E3%83%B3%E3%83%88%E3%81%AE%E3%83%AA%E3%83%95%E3%82%A1%E3%83%AC%E3%83%B3%E3%82%B9)
<br/><br/>
/etc/awslogs/awscli.conf
デフォルト設定<pre>
[general]
state_file = /var/lib/awslogs/agent-state
　　　
[/var/log/messages]
datetime_format = %b %d %H:%M:%S
file = /var/log/messages
buffer_duration = 5000
log_stream_name = {instance_id}
initial_position = start_of_file
log_group_name = /var/log/messages

[6] CloudWatch Logs エージェントの起動と、動作確認

* 参考
 * [3.1 クイックスタート ステップ 2](#31quickstartstep2)
 * [3.6 CloudWatch Logs エージェントの開始](#36-cloudwatch-logs-%E3%82%A8%E3%83%BC%E3%82%B8%E3%82%A7%E3%83%B3%E3%83%88%E3%81%AE%E9%96%8B%E5%A7%8B)
 * [3.5 CloudWatch Logs エージェントのステータスをレポートします](#35-cloudwatch-logs-%E3%82%A8%E3%83%BC%E3%82%B8%E3%82%A7%E3%83%B3%E3%83%88%E3%81%AE%E3%82%B9%E3%83%86%E3%83%BC%E3%82%BF%E3%82%B9%E3%82%92%E3%83%AC%E3%83%9D%E3%83%BC%E3%83%88%E3%81%97%E3%81%BE%E3%81%99)
<br/><br/>
・起動
<pre>
$ sudo service awslogs start
$ sudo chkconfig awslogs on
</pre>
・プロセス動作確認
<pre>
$ sudo service awslogs status
awslogs (pid  8281) is running...
</pre>
・/var/log/awslogs.log ファイルを開き、CloudWatch Logs エージェントのエラー、警告、問題等のメッセージが出ていないことを確認

[7] CloudWatch Logs へログが送信されているか確認

* 参考
 * [3.9 ログデータの表示](#39-%E3%83%AD%E3%82%B0%E3%83%87%E3%83%BC%E3%82%BF%E3%81%AE%E8%A1%A8%E7%A4%BA) 

* logger コマンドで、/var/log/messages にメッセージを出力して、CloudWatch Logs へログが送信されているか確認する。5秒以内(buffer_duration = 5000)には、送信される。
<pre>
$ logger test
</pre>

<a name="editperiod">[8] ログの保持期間の変更

* 参考
 * [3.10 ログの保持期間の変更](#310-%E3%83%AD%E3%82%B0%E3%81%AE%E4%BF%9D%E6%8C%81%E6%9C%9F%E9%96%93%E3%81%AE%E5%A4%89%E6%9B%B4)

>1) CloudWatch サービスへ遷移する
>　https://console.aws.amazon.com/cloudwatch

>2) ナビゲーションペイン「ログ」
>
![20161222-03.png](https://qiita-image-store.s3.amazonaws.com/0/148868/747a1deb-c5cb-396f-bb42-42d5b5556bf3.png)

>3) 対象のロググループの "次の期間経過後にイベントを失効" の "失効しない" をクリック
>![20161222-04.png](https://qiita-image-store.s3.amazonaws.com/0/148868/23a43895-5786-cc07-db8f-92ae6bdb7118.png)

>4) お好みの保持期間へ変更する

###0.2.2 メトリクスフィルタ設定例

1. [例: ログイベントのカウント](#metricsfilter01)
2. [例: 単語「Error」の出現回数をカウントする](#metricsfilter02)
3. [例: HTTP 404 レスポンスのカウント](#metricsfilter03)
4. [例: 400 レベルを見つけて 4xx メトリクスにカウントする](#metricsfilter04)
5. [例: Apache ログから転送されたバイト数の抽出](#metricsfilter05)

###0.2.3 CloudWatch Logs データを Amazon Elasticsearch Service にストリーミング

1. [CloudTrail ログを Amazon ES へ送る](#cloudtrailamazones)


#**[Amazon CloudWatch Logs ユーザーガイド](http://docs.aws.amazon.com/ja_jp/AmazonCloudWatch/latest/logs/WhatIsCloudWatchLogs.html)**

#1. [Amazon CloudWatch Logs とは?](http://docs.aws.amazon.com/ja_jp/AmazonCloudWatch/latest/logs/WhatIsCloudWatchLogs.html)

*Amazon CloudWatch Logs を使用して、Amazon Elastic Compute Cloud (Amazon EC2) インスタンス、AWS CloudTrail、およびその他のソースのログファイルの監視、保存、アクセスができます。 その後、CloudWatch Logs から、関連するログデータを取得できます。*

<a name="characteristic">**特徴**

* *Amazon EC2 インスタンスのログをリアルタイムでモニタリングする*
 * *CloudWatch Logs で、ログデータを使用してアプリケーションとシステムをモニタリングできます。たとえば、* ***アプリケーションログに存在するエラーの数をトラッキングし、エラー率が指定のしきい値を超えたときに管理者に通知を送ることができます。*** 
 * *お客様のログが CloudWatch Logs によるモニタリングに使用されるので、コードの変更は不要です。たとえば、* ***[アプリケーションログの特定のリテラルターム（例:「NullReferenceException」）をモニタリング](#metricsfilter02)したり、[ログデータの特定の場所でリテラルターム（例: Apache アクセスログの「404」ステータスコード）の発生数をカウント](#metricsfilter03)したりできます。***
 * ***検索した語句が見つかると、CloudWatch Logs は指定された CloudWatch メトリクスにデータをレポートします。***
 * ***ログデータは、転送時や保管時に暗号化されます。***
<br/><br/>
* *AWS CloudTrail のログに記録されたイベントのモニタリング*
 * ***CloudWatch にアラームを作成して、CloudTrail がキャプチャした特定の API アクティビティの通知を受け取り、通知をトラブルシューティングの実行に使用できます。***
<br/><br/>
* *ログデータをアーカイブする*
 * *CloudWatch Logs を使用して耐久性が高いストレージにログデータを保存できます。ログの保持設定は、その設定よりも古いログイベントを自動的に削除するように変更できます。*
 * *CloudWatch Logs エージェントにより、ローテーションするログデータもローテーションしないログデータも、ホストからログサービスに簡単にすばやく送信できます。その後は、必要なときに生のログデータにアクセスできます*。

##1.1 [CloudWatch Logs 用語、概念](http://docs.aws.amazon.com/ja_jp/AmazonCloudWatch/latest/logs/CloudWatchLogsConcepts.html)

* ログイベント
* ログストリーム
* ロググループ
* メトリクスフィルタ
* 保持設定

##1.2 [CloudWatch Logs の制限](http://docs.aws.amazon.com/ja_jp/AmazonCloudWatch/latest/logs/cloudwatch_limits_cwl.html)

#2. [準備作業](http://docs.aws.amazon.com/ja_jp/AmazonCloudWatch/latest/logs/GettingSetup_cwl.html)
##2.1 アマゾン ウェブ サービス（AWS）にサインアップ
##2.2 Amazon CloudWatch コンソールにサインインする
##2.3 コマンドラインインターフェイスをセットアップする

#3. [はじめに](http://docs.aws.amazon.com/ja_jp/AmazonCloudWatch/latest/logs/CWL_GettingStarted.html)

*このセクションでは Amazon Linux、Ubuntu Server、CentOS、Red Hat Enterprise Linux を実行する Amazon EC2 インスタンスに CloudWatch Logs エージェントをインストールするために必要なステップを説明します。*

<a name="agentprerequisite">**CloudWatch Logs エージェントの前提条件**

*CloudWatch Logs エージェントでは、Python バージョン 2.6、2.7、3.0、または 3.3、および次のいずれかのバージョンの Linux が必要です。*

* Amazon Linux バージョン 2014.03.02 以降
* Ubuntu Server バージョン 12.04 または 14.04
* CentOS バージョン 6、6.3、6.4、6.5、または 7.0
* Red Hat Enterprise Linux (RHEL) バージョン 6.5 または 7.0
* Debian 8.0


##3.1 [クイックスタート: 既存の Amazon EC2 インスタンスに CloudWatch Logs エージェントをインストールして設定する](http://docs.aws.amazon.com/ja_jp/AmazonCloudWatch/latest/logs/QuickStartEC2Instance.html)

<a name="IAMRoleNote">**IAMロールの注意点**

* EC2 内で稼働している CloudWatch Logs エージェントから CloudWatch Logs へログを送信するには、それを許可する内容を記述した IAMポリシー が、EC2 の [IAMロール](http://docs.aws.amazon.com/ja_jp/IAM/latest/UserGuide/id_roles.html) に登録してある必要がある。
* EC2 に IAMロール を割り当てることは、EC2 インスタンス作成時にしか出来ない。そのため、既存の EC2 で CloudWatch Logs を利用したいが、その EC2 に IAMロール が何も割り当てられていない場合は、新規に EC2 インスタンスを作成する必要がある。

<a name="31quickstartstep1">**ステップ 1: IAM ロールまたは CloudWatch Logs ユーザーを設定する**

* この ステップ 1 では、既存の起動中 EC2 にすでに IAMロールが割り当てられていて、その IAMロール に 次の IAMポリシーを作成して追加している。

```
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "logs:CreateLogGroup",
        "logs:CreateLogStream",
        "logs:PutLogEvents",
        "logs:DescribeLogStreams"
    ],
      "Resource": [
        "arn:aws:logs:*:*:*"
    ]
  }
 ]
}
```

<a name="31quickstartstep2">**ステップ 2: 既存の Amazon EC2 インスタンスに CloudWatch Logs エージェントをインストールして設定する**

* Amazon Linux AMI 2014.09 から、awslogs パッケージを使用した RPM のインストールに CloudWatch Logs エージェントが使用可能です。

* 手順

>1) パッケージリポジトリの最新の変更を取得
<pre>
$ sudo yum update
</pre>

>2) awslogs パッケージをインストール
<pre>
$ sudo yum install awslogs
</pre>

>3) /etc/awslogs/awscli.conf ファイルを編集し、[default] セクションで、ログデータを表示し認証情報を追加するリージョンを指定
>>・ region は、東京リージョン(ap-northeast-1)を設定する。
>>・ 認証情報(aws_access_key_id, aws_secret_access_key)は不要。
<pre>
[plugins]
cwlogs = cwlogs
[default]
region = ap-northeast-1
</pre>

>4) /etc/awslogs/awslogs.conf ファイルを編集して追跡するログを設定
>>・ デフォルト設定では、/var/log/messages ファイルに出力されたログを CloudWatch Logs の 「/var/log/messages」 というロググループへ送信する。
<pre>
[/var/log/messages]
datetime_format = %b %d %H:%M:%S
file = /var/log/messages
buffer_duration = 5000
log_stream_name = {instance_id}
initial_position = start_of_file
log_group_name = /var/log/messages
</pre>



>5) awslogs サービスを開始
<pre>
$ sudo service awslogs start
</pre>

>6) [エージェントのステータス確認](#35-cloudwatch-logs-%E3%82%A8%E3%83%BC%E3%82%B8%E3%82%A7%E3%83%B3%E3%83%88%E3%81%AE%E3%82%B9%E3%83%86%E3%83%BC%E3%82%BF%E3%82%B9%E3%82%92%E3%83%AC%E3%83%9D%E3%83%BC%E3%83%88%E3%81%97%E3%81%BE%E3%81%99)、動作確認
・ /var/log/awslogs.log ファイルでサービス開始時に記録されたエラーがあるかどうか確認
・ エージェントが実行されてしばらくしたら、CloudWatch コンソールに新しく作成されたロググループとログストリームを確認

<a name="32quickstart">
##3.2 [クイックスタート: 新規 Amazon EC2 インスタンスに CloudWatch Logs エージェントをインストールして設定する](http://docs.aws.amazon.com/ja_jp/AmazonCloudWatch/latest/logs/EC2NewInstanceCWL.html)

この章で行っていること

1. /etc/awslogs/awslogs.conf ファイルを作成して、S3 へ置いている
<br/><br/>
* IAMポリシー、IAMロールを作成している
 * IAMポリシーには、EC2からS3のバケットへのGetObjectを許可する設定を入れている
 * EC2 から S3のバケットにある　/awslogs.conf を取りに行くため
<br/><br/>
* EC2インスタンを作成、起動する
 * このときに、先に作成した　IAMロール を割り当てる
 * ユーザーデータで、CloudWatch Logs エージェントをインストールするコードを入れている
<pre>
#!/bin/bash
curl https://s3.amazonaws.com/aws-cloudwatch/downloads/latest/awslogs-agent-setup.py -O
chmod +x ./awslogs-agent-setup.py
./awslogs-agent-setup.py -n -r us-east-1 -c s3://myawsbucket/my-config-file
</pre>

##3.3 [クイックスタート: AWS OpsWorks および Chef を使用して CloudWatch Logs エージェントをインストールする](http://docs.aws.amazon.com/ja_jp/AmazonCloudWatch/latest/logs/QuickStartChef.html)

##3.4 [クイックスタート: AWS CloudFormation を使用してログデータを CloudWatch Logs に送信する](http://docs.aws.amazon.com/ja_jp/AmazonCloudWatch/latest/logs/QuickStartCloudFormation.html)

##3.5 [CloudWatch Logs エージェントのステータスをレポートします](http://docs.aws.amazon.com/ja_jp/AmazonCloudWatch/latest/logs/ReportCWLAgentStatus.html)

* エージェントのステータスを確認する方法その１ - コマンドで
<pre>
$ sudo service awslogs status
awslogs (pid  8281) is running...
</pre>

* エージェントのステータスを確認する方法その２ - ログから
 * /var/log/awslogs.log ファイルで CloudWatch Logs エージェントのエラー、警告、問題を確認してください。

##3.6 [CloudWatch Logs エージェントの開始](http://docs.aws.amazon.com/ja_jp/AmazonCloudWatch/latest/logs/StartTheCWLAgent.html)

<pre>
$ sudo service awslogs start
</pre>


##3.7 [CloudWatch Logs エージェントの停止](http://docs.aws.amazon.com/ja_jp/AmazonCloudWatch/latest/logs/StopTheCWLAgent.html)

<pre>
$ sudo service awslogs stop
</pre>
<a name="agentreference">
##3.8 [CloudWatch Logs エージェントのリファレンス](http://docs.aws.amazon.com/ja_jp/AmazonCloudWatch/latest/logs/AgentReference.html)

*CloudWatch Logs エージェントは、Amazon Linux または Ubuntu を実行する Amazon EC2 インスタンスでログデータを CloudWatch Logs に自動送信する方法を提供します。*

*エージェントは次のコンポーネントで構成されています。*

* *ログデータを CloudWatch Logs にプッシュする AWS CLI プラグイン。*
* *CloudWatch Logs にデータを送信する CloudWatch Logs aws logs push コマンドを実行するスクリプト (デーモン)。*
* *デーモンが常に実行中であることを確認する cron ジョブ。*

**エージェント設定ファイル**

* *CloudWatch Logs エージェント設定ファイルは、 aws logs push コマンドが必要とする情報を記述します。*

* エージェント設定ファイルのデフォルト設定
/etc/awslogs/awslogs.conf
<pre>
[general]
state_file = /var/lib/awslogs/agent-state
　　　
[/var/log/messages]
datetime_format = %b %d %H:%M:%S
file = /var/log/messages
buffer_duration = 5000
log_stream_name = {instance_id}
initial_position = start_of_file
log_group_name = /var/log/messages
</pre>

* datetime_format
 * *ログからタイムスタンプを入手する方法を指定します。タイムスタンプはログイベントを取得し、メトリクスを生成するために使用されます。*
* file
 * *CloudWatch Logs にプッシュするログファイルを指定します。ファイルは、特定のファイルまたは複数のファイルを指すことができます（/var/log/system.log** *のようにワイルドカードを使用）。*
 * *access_log.2014-06-01-01 と access_log.2014-06-01-02 など同じ形式の一連のファイルを指定するにはワイルドカードの使用をお勧めします。ただし、access_log_80 と access_log_443 のように種類が異なる複数のファイルには使用しないでください。種類が異なる複数のファイルを指定するには、設定ファイルに別のストリームログのエントリを追加して、各種類のログファイルが異なるロググループに行くようにします。*
 * ***圧縮ファイルはサポートされていません。***
 * ***ファイルの変更時間に基づいて、最新のファイルのみが CloudWatch Logs にプッシュされます。***
* buffer_duration
 * ***ログイベントのバッチ期間を指定します。最小値は 5000ms で、デフォルト値は 5000ms です。***
 * 5000ms = 5秒
* log_stream_name
 * *送信先ログストリームを指定します。*
* initial_position
 * *データの読み出しをどこから開始するかを指定します（start_of_file または end_of_file）。*
 * *デフォルトは start_of_file です。*
 * *そのログストリームに保持されている状態がない場合にのみ使用されます。*
* log_group_name
 * *送信先ロググループを指定します。ロググループが存在しない場合には、自動的に作成されます。*
* batch_count
 * バッチのログイベントの最大値を 10000 までの値で指定します。 デフォルト値は 1000 です。
* batch_size
 * バッチのログイベントの最大値を 1048576 バイトまでのバイト値で指定します。 デフォルト値は 32768 バイトです。 このサイズは、UTF-8 のすべてのイベントメッセージの合計に各ログイベントにつき 26 バイトを加算して計算されます。

**CloudWatch Logs エージェントのよくある質問**

<a name="logrotate">*どのようなファイルローテーションがサポートされていますか。*

* *次のファイルローテーション機能がサポートされています。*
 1. *既存のファイルを数字サフィックスをつけた名前に変更し、その後、元の名前の空のログファイルを作成し直します。 たとえば、/var/log/syslog.log が /var/log/syslog.log.1 という名前に変更されます。/var/log/syslog.log.1 が前回のローテーションにより既に存在する場合は、/var/log/syslog.log.2 という名前に変更されます。*
 2. *元のログファイルを、コピーを作成した後切り捨てます。たとえば、/var/log/syslog.log を /var/log/syslog.log.1 にコピーし、/var/log/syslog.log を切り捨てます。この場合、データを損失する恐れがあるため、このファイルローテーション機能の使用にはご注意ください。*
 3. *古いファイルと共通のパターンを持つ新しいファイルを作成します。たとえば /var/log/syslog.log.2014-01-01 をそのまま残し、/var/log/syslog.log.2014-01-02 を作成します。*

*使用しているエージェントのバージョンを確認する方法*

* *yum から CloudWatch Logs エージェントをインストールした場合*
<pre>
$ yum info aws-cli-plugin-cloudwatch-logs
読み込んだプラグイン:priorities, update-motd, upgrade-helper
インストール済みパッケージ
名前                : aws-cli-plugin-cloudwatch-logs
アーキテクチャー    : noarch
バージョン          : 1.3.3
...
</pre>

<a name="batch">*ログイベントはどのようにバッチされていますか*

* 次の条件のいずれかが満たされる場合、バッチがフルになり発行されます。
 1. *最初のログイベントが追加されてから、[buffer_duration] の時間が経過した。*
 2. *累積されたログイベントの [batch_size] 未満ですが、新しいログイベントを追加すると [batch_size] を超過します。*
 3. *ログイベント数は [batch_count] に達しました。*
 4. *バッチのログイベントは 24 時間以上になりませんが、新しいログイベントを追加すると 24 時間の制約を超過します。*


<a name="batchskip">*ログエントリ、ログイベント、またはバッチがスキップまたは切り捨てられるのはどのような原因がありますか。*

* *PutLogEvents オペレーションの制約に従って、次の問題によりログイベントまたはバッチがスキップされる場合があります。*<br/><br/>
 * *ログイベントのサイズが 256 KB を超過した場合、ログイベントは完全にスキップされます。*
 * *ログイベントのタイムスタンプが 2 時間以上未来の場合、ログイベントはスキップされます。*
 * *ログイベントのタイムスタンプが 14 日以上過去の場合、ログイベントはスキップされます。*
 * *ログイベントがロググループの保持期間よりも古い場合、バッチはすべてスキップされます。*
 * *単一の PutLogEvents リクエストでログイベントのバッチが 24 時間実行されている場合、PutLogEvents オペレーションは失敗します。*

<a name="agentstop">*エージェントを停止させた場合、データ損失や重複が発生しますか。*

* *状態ファイルが使用可能であり、最後に実行された時からファイルのローテーションが発生していなければ、発生しません。* ***CloudWatch Logs エージェントは停止した場所から再開してログデータのプッシュを続行できます。***

##3.9 [ログデータの表示](http://docs.aws.amazon.com/ja_jp/AmazonCloudWatch/latest/logs/ViewingLogData.html)
<a name="retentionperiod">
##3.10 [ログの保持期間の変更](http://docs.aws.amazon.com/ja_jp/AmazonCloudWatch/latest/logs/SettingLogRetention.html)

***デフォルトでは、ログデータは永続的に保存されます。*** *ただし、ロググループにログデータを保存する期間を設定できます。現在の保持設定より古いデータはすべて自動的に削除されます。各ロググループのログの保持期間は、いつでも変更できます。*

* 次の期間経過後にイベントを失効
 * デフォルトは「失効しない」・・・永続的に保存


#4. ログデータの検索およびフィルタリング

*CloudWatch Logs エージェントが Amazon CloudWatch へのログデータの発行を開始した後、1 つ以上のメトリクスフィルタを作成して、ログデータの検索およびフィルタリングを開始できます。
メトリクスフィルタは CloudWatch Logs に送信されたログデータを検索するための語句とパターンを定義します。CloudWatch Logs はこれらのメトリクスフィルタを使用して、ログデータをグラフの作成やアラームの設定に利用できる CloudWatch メトリクスに変換します。*

*各メトリクスフィルタは以下のキー要素で構成されています。*

***フィルタパターン***

* *各ログイベントのデータを CloudWatch Logs がどのように解釈するかについての記号による説明です。たとえば、ログエントリにはタイムスタンプ、IP アドレス、文字列などが含まれる可能性があります。パターンを使用して、ログファイルの検索対象を指定します。*

***メトリクス名***

* *モニタリングされたログ情報が発行される CloudWatch メトリクスの名前です。たとえば、ErrorCount というメトリクスに発行できます。*

***メトリクス名前空間***

* *新しい CloudWatch メトリクスの送信先名前空間です。*

***メトリクス値***

* *メトリクスに発行するものです。たとえば、「Error」など特定の語句の発生回数をカウントする場合、その値は発生するごとに「1」になります。転送されたバイト数をカウントする場合は、発行される値はログイベントの値になります。*



##4.1 フィルタとパターンの構文

***メトリクスフィルタで指定されたものに一致する語句や値が、ログイベントの中で検索されます。***
***メトリクスフィルタは、ログイベントで語句、フレーズ、値を 1 つ見つけるたびに CloudWatch メトリクスでカウントします。***
たとえば、ログイベントの中で ERROR という単語を検索して出現回数を数えるメトリクスフィルタを作成します。メトリクスフィルタには、スペースで区切られたログイベントから値を抽出する機能もあります。
たとえば、ウェブリクエストのレイテンシーです。条件演算子やワイルドカードを使用して完全一致を見つけることもできます。メトリクスフィルタを作成する前に、CloudWatch コンソールで検索パターンをテストできます。

##4.2 [メトリクスフィルタの作成](http://docs.aws.amazon.com/ja_jp/AmazonCloudWatch/latest/logs/MonitoringPolicyExamples.html)

<a name="metricsfilter01">**[(1) 例: ログイベントのカウント](http://docs.aws.amazon.com/ja_jp/AmazonCloudWatch/latest/logs/CountingLogEventsExample.html)**

* /var/log/messages のログイベントのカウント設定例

>1) CloudWatch コンソール
>　https://console.aws.amazon.com/cloudwatch/

>2) リージョン確認(今回は東京)

>3) ナビゲーションペイン「ログ」

>4) コンテンツペインでロググループ「/var/log/mesages」を選択して、「メトリクスフィルタの作成」
![20161223-01.png](https://qiita-image-store.s3.amazonaws.com/0/148868/693e59ae-495b-c614-73e6-2b961b7ef48e.png)

>5) ログメトリクスフィルタの定義
>>・フィルタパターン
>>　空のまま
>>・テストするログデータの選択
>>　そのまま
>>
>>メトリクスの割り当て

>6) メトリクスフィルタの作成とメトリクスの割り当て
>>・フィルタの名前
>>　VarLogMessagesCount
>>・メトリクス名前空間
>>　Test1NameSpace
>>・メトリクス名
>>　VarLogMessagesEventCount
>>
>>フィルタの作成
>>
![20161223-02.png](https://qiita-image-store.s3.amazonaws.com/0/148868/150eb067-7e5f-5765-3af4-c745bf176716.png)
>
ロググループ「/var/log/mesages」のメトリクスフィルタが「1フィルタ」となる
![20161223-03.png](https://qiita-image-store.s3.amazonaws.com/0/148868/3bbb7bf5-b563-e9cf-9e18-7218b95cade7.png)


* メトリクスの状態をグラフで確認する

  * 今回のメトリクスフィルタでは、フィルタパターンを空にしたため、/var/log/messages の行にマッチする。
  * メトリクス値が１なので、１行出力したら１インクリメントされる。

>1) CloudWatch コンソール
　https://console.aws.amazon.com/cloudwatch/

>2) リージョン確認(今回は東京)

>3) ナビゲーションペイン「メトリクス」

>4) さきほど作成したメトリクス名前空間(Test1NameSpace)を選択

>5) さきほど作成したメトリクス名(VarLogMessagesEventCount)を選択
![20161223-04.png](https://qiita-image-store.s3.amazonaws.com/0/148868/ca13dba3-4aa2-18f7-579e-5c22941d7d9b.png)

>6) 「グラフ化したメトリクス(1)」タブを選択
![20161223-05.png](https://qiita-image-store.s3.amazonaws.com/0/148868/c6a13187-187d-13c6-4ebc-112059614478.png)
>
>>「統計」を 平均 から 合計 へ変更する
>
>/var/log/messages に出力された行の合計グラフ（期間:５分）
![20161223-06.png](https://qiita-image-store.s3.amazonaws.com/0/148868/0a6d3f42-88c4-92b8-a2ba-45b1440a6bfa.png)
>
> logger コマンドで、/var/log/messages にメッセージを出力してグラフを確認

<a name="metricsfilter02">**[(2) 例: 単語「Error」の出現回数をカウントする](http://docs.aws.amazon.com/ja_jp/AmazonCloudWatch/latest/logs/CountOccurrencesExample.html)**

* /var/log/messages ファイルに出力された、単語「Error」の出現回数をカウントする

>1) CloudWatch コンソール
　https://console.aws.amazon.com/cloudwatch/

>2) リージョン確認(今回は東京)

>3) ナビゲーションペイン「ログ」

>4) コンテンツペインでロググループ「/var/log/mesages」を選択して、「メトリクスフィルタの作成」

>5) ログメトリクスフィルタの定義
>>・フィルタパターン（**パターンは大文字と小文字を区別する**)
　Error
>>
>>フィルターテストを行う場合
>>・テストするログデータの選択
　- カスタムログデータ -
>>・パターンテスト
>>　テキストエリアにテストしたいログメッセージを入力する
>>　※loggerコマンドを使ったりなんかしてそれらしいメッセージを作成したもの
<pre>
Dec 23 04:58:01 ip-10-0-0-144 dhclient[2136]: XMT: Solicit on eth0, interval 117980ms.
Dec 23 04:59:22 ip-10-0-0-144 ec2-user: This is a test error messages.
Dec 23 04:59:53 ip-10-0-0-144 ec2-user: This is a test Error messages.
Dec 23 04:59:59 ip-10-0-0-144 dhclient[2136]: XMT: Solicit on eth0, interval 110540ms.
Dec 23 05:01:50 ip-10-0-0-144 dhclient[2136]: XMT: Solicit on eth0, interval 115710ms.
Dec 23 05:02:01 ip-10-0-0-144 ec2-user: error
Dec 23 05:02:04 ip-10-0-0-144 ec2-user: Error
</pre>
>>
>>パターンのテスト を実施する ⇒ 結果を確認する
>>
![20161223-07.png](https://qiita-image-store.s3.amazonaws.com/0/148868/f06a6dc9-c3d9-ccd1-41d8-4a76a6338253.png)
>>
>>メトリクスの割り当て

>6) メトリクスフィルタの作成とメトリクスの割り当て
>>・フィルタの名前
　VarLogMessagesErrorCount
・メトリクス名前空間
　Test1NameSpace
・メトリクス名
　VarLogMessagesEventErrorCount
>>
>>フィルタの作成
>>
![20161223-08.png](https://qiita-image-store.s3.amazonaws.com/0/148868/b5a09d12-9595-53d4-d94d-c0f99c2e2558.png)
>
>ロググループ「/var/log/mesages」のメトリクスフィルタが「2フィルタ」となる
>
![20161223-09.png](https://qiita-image-store.s3.amazonaws.com/0/148868/2ac3b5ce-d3ad-452f-e606-13ef3304c0bf.png)

* メトリクスの状態をグラフで確認する
  * 今回のメトリクスフィルタでは、/var/log/messages ファイル内に 単語「Error」がある行にマッチする。
  * メトリクス値が１なので、マッチする行があったら１インクリメントされる。

>1) CloudWatch コンソール
　https://console.aws.amazon.com/cloudwatch/

>2) リージョン確認(今回は東京)

>3) ナビゲーションペイン「メトリクス」

>4) さきほど作成したメトリクス名前空間(Test1NameSpace)を選択
>>このとき、/var/log/messages にまだ 単語「Error」のある行がない場合、先ほど作成したメトリクス名「VarLogMessagesEventErrorCount」はない。
>>テストとして、loggerコマンドで /var/log/messages に 単語「Error」を出力させる。
<pre>
$ logger "This is a test error messages."
$ logger "This is a test Error messages."
$ logger error
$ logger Error
</pre>
>>しばらくすると、「VarLogMessagesEventErrorCount」が表示される
>>
![20161223-10.png](https://qiita-image-store.s3.amazonaws.com/0/148868/85bda63b-f146-36de-cd11-26fafa88b97b.png)

>5) さきほど作成したメトリクス名(VarLogMessagesEventErrorCount)を選択

>6) 「グラフ化したメトリクス(1)」タブを選択
>>「統計」を 平均 から 合計 へ変更する

>/var/log/messages ファイル内に 単語「Error」がある行の合計グラフ（期間:５分）
>
![20161223-11.png](https://qiita-image-store.s3.amazonaws.com/0/148868/8cc2f924-8618-33c8-47ed-5eea90bd8b5a.png)


<a name="metricsfilter03">**[(3) 例: HTTP 404 レスポンスのカウント](http://docs.aws.amazon.com/ja_jp/AmazonCloudWatch/latest/logs/Counting404Responses.html)**

<a name="metricsfilter04">**[(4) 例: 400 レベルを見つけて 4xx メトリクスにカウントする](http://docs.aws.amazon.com/ja_jp/AmazonCloudWatch/latest/logs/FindCountMetric.html)**

<a name="metricsfilter04">**[(5) 例: Apache ログから転送されたバイト数の抽出](http://docs.aws.amazon.com/ja_jp/AmazonCloudWatch/latest/logs/ExtractBytesExample.html)**

##4.3 [メトリクスフィルタの一覧表示](http://docs.aws.amazon.com/ja_jp/AmazonCloudWatch/latest/logs/ListingMetricFilters.html)
ロググループ内のメトリクスフィルタを一覧表示

##4.4 [メトリクスフィルタの削除](http://docs.aws.amazon.com/ja_jp/AmazonCloudWatch/latest/logs/DeletingMetricFilter.html)

※[メトリクスの削除について](#metricsdel)

##4.5 [フィルタパターンを使用したログデータ検索](http://docs.aws.amazon.com/ja_jp/AmazonCloudWatch/latest/logs/SearchDataFilterPattern.html)

*Amazon CloudWatch コンソールの フィルタとパターンの構文 を使用してログデータを検索できます。ロググループ内のすべてのログストリームを検索するか、このデータのサブセットを検索できます。*


#5. [サブスクリプションを使用したログデータのリアルタイム処理](http://docs.aws.amazon.com/ja_jp/AmazonCloudWatch/latest/logs/Subscriptions.html)
*サブスクリプションを使用して CloudWatch Logs からのログイベントのリアルタイムフィードにアクセスし、カスタム処理、分析、他のシステムへのロードを行うために、Amazon Kinesis ストリームや AWS Lambda などの他のサービスに配信することができます。*

**CloudWatch ログは、Lambda を使用してログデータを Amazon Elasticsearch Service に配信する。**
⇒[7. Amazon ES への ストリーミング ログ データ](#7-amazon-es-%E3%81%B8%E3%81%AE-%E3%82%B9%E3%83%88%E3%83%AA%E3%83%BC%E3%83%9F%E3%83%B3%E3%82%B0-%E3%83%AD%E3%82%B0-%E3%83%87%E3%83%BC%E3%82%BF)

#6. [ログデータを一括で Amazon S3 にエクスポートする](http://docs.aws.amazon.com/ja_jp/AmazonCloudWatch/latest/logs/S3Export.html)

#7. [Amazon ES への ストリーミング ログ データ](http://docs.aws.amazon.com/ja_jp/AmazonCloudWatch/latest/logs/CWL_ES_Stream.html)
*[CloudWatch Logs サブスクリプション](http://docs.aws.amazon.com/ja_jp/AmazonCloudWatch/latest/logs/Subscriptions.html)を通して、ほぼリアルタイムでAmazon Elasticsearch Service (Amazon ES) クラスターで受け取るCloudWatch Logs ロググループをストリームデータに設定することができます。* ***CloudWatchコンソールによりこの設定を補助するための簡単なウィザードが提供されています*** (Lambdaファンクションも自動生成してくれる)。

*大量の CloudWatch Logs データを Amazon ES にストリーミングすると、AWS 請求書の利用料金が高額になる可能性があります。予想より高い金額にならないように、[AWS 請求書を監視する](http://docs.aws.amazon.com/ja_jp/AmazonCloudWatch/latest/logs/Amazon%20CloudWatch%20%E3%83%A6%E3%83%BC%E3%82%B6%E3%83%BC%E3%82%AC%E3%82%A4%E3%83%89gs_monitor_estimated_charges_with_cloudwatch.html)ことをお勧めします。*

<a name="cloudtrailamazones">**CloudTrail ログを Amazon ES へ送る設定手順**

* 注意
 * [CloudTrail ログを CloudTrailログをCloudWatch Logsへ送信する設定](http://qiita.com/tonishy/items/bb5832c59d309fb1db4d#341-sending-cloudtrail-events-to-cloudwatch-logs)が済んでいること
 * [Amazon ES 料金が発生する](https://aws.amazon.com/jp/elasticsearch-service/pricing/)
 * ログデータのフロー 「CloudTrail → CloudWatch Logs → Amazon Lambda → Amazon ES」

[1] Amazon ES ドメインを作成する

>1) Amazon Elasticsearch Service コンソール
　https://console.aws.amazon.com/es/

>2) リージョン確認(今回は東京)

>3) Get started

>4) Define domain
>>・Elasticsearch domain name
　cloudtrail
>>
>>・Elasticsearch version
　2.3

>5) Configure cluster (今回はテスト用なのでなるべく最小構成)
>>Node configuration
>>>・Instance count
　1
>>>・Instance type
　t2/micro

>>Storage configuration
>>>・Storage type
　EBS

>6) Set up access policy
　今回は、接続元IPアドレス制限
>>・Set the domain access policy to
　Allow access to the domain from specific IP(s)
　↓
　今回は、自宅のインターネット回線のIPアドレスを入力

>7) Review
![20161226-01.png](https://qiita-image-store.s3.amazonaws.com/0/148868/52804be0-1636-28ff-7275-99e9c28acc95.png)

>8) Domain status が Loading → Active になるまで暫く待つ
![スクリーンショット 2016-12-26 16.54.58.png](https://qiita-image-store.s3.amazonaws.com/0/148868/b84c3bbf-4acb-23a3-7e7d-c12e06262ab4.png)
↓
![20161226-03.png](https://qiita-image-store.s3.amazonaws.com/0/148868/ce0b32c7-93ab-b35e-79a4-e6fdb1248559.png)

[2] CloudWatch Logs データを Amazon ES へAmazon ES へストリーミングする

>1) Amazon CloudWatch コンソール
　https://console.aws.amazon.com/cloudwatch/

>2) ナビゲーションペイン「ログ」
>>cloudtrail のロググループを選択 ⇒ アクション ⇒ Amazon Elasticsearch Service へのストリーミングの開始

>3) Amazon Elasticsearch Service への CloudTrail/test-logs のストリーミングを開始する
>>・アカウントの選択
　このアカウント
>>・Amazon ES クラスター
　cloudtrail （[1]で作成したもの)
>>・Lambda IAM 実行ロール
　新しいIAMロールの作成
>>
![20161226-04.png](https://qiita-image-store.s3.amazonaws.com/0/148868/abfb2bf1-0f7e-7246-8af7-992467ad6e09.png)
>>
>>許可

>4) ログ形式とフィルタの設定
>>・ログの形式
　AWS ÇloudTrail

>5) 確認
>>
![20161226-05.png](https://qiita-image-store.s3.amazonaws.com/0/148868/e523c4e8-f987-be95-6ee8-0631ac3c22e5.png)
↓
![20161226-06.png](https://qiita-image-store.s3.amazonaws.com/0/148868/d527d421-2c0a-8b1e-cbbe-6cbf9007af78.png)
>>
>>ストリーミングの開始
>>
>>※Lambdaファンクション(LogsToElasticsearch_cloudtrail)が自動作成される
>>※CloundWatch Logs (/aws/lambda/LogsToElasticsearch_cloudtrail) が自動生成される

[3] Kibana4 で CloudTrail ログを可視化

>1) Amazon Elasticsearch Service コンソール
　https://console.aws.amazon.com/es/

>![20161226-07.png](https://qiita-image-store.s3.amazonaws.com/0/148868/22c1b0fe-6e69-8acf-a119-82f7791a661b.png)

>2) Indices 確認
>>
>>[1] で作成したAmazon ES ドメイン「cloudtrail」をクリック
>>
![20161226-08.png](https://qiita-image-store.s3.amazonaws.com/0/148868/20a19fc9-7771-9b5b-dd92-cb15958fb929.png)
>> Indices タブをクリック
![20161226-09.png](https://qiita-image-store.s3.amazonaws.com/0/148868/2737be4f-cf46-7da0-6635-8304937cf642.png)


>3) Kibana サイトへ

>>Amazon Elasticsearch Service コンソール
　https://console.aws.amazon.com/es/

>>[1] で作成したAmazon ES ドメイン「cloudtrail」をクリック
>>
![20161226-10.png](https://qiita-image-store.s3.amazonaws.com/0/148868/425ec246-52c2-7045-f621-c53a7fcba23c.png)
>>
>>Kibana のURLをクリック

>4) Kibana 初期設定

>>・Configure an index pattern
　Index contains time-based events：チェック
　Index name or pattern： cwl-*
　Time-field name: @timestamp
>>![20161226-11.png](https://qiita-image-store.s3.amazonaws.com/0/148868/0b757671-0a18-d023-d17e-395b53974fae.png)
>>
>>Create
>>↓
![20161226-12.png](https://qiita-image-store.s3.amazonaws.com/0/148868/11285eb6-2d72-f2ba-3928-3170ad3a85b7.png)
>>↓
Discover
![20161226-13.png](https://qiita-image-store.s3.amazonaws.com/0/148868/dd0d4eb3-1e2c-b56a-d412-75f7818eee09.png)




#8. [認証とアクセスコントロール](http://docs.aws.amazon.com/ja_jp/AmazonCloudWatch/latest/logs/auth-and-access-control-cwl.html)


#9. [AWS CloudTrail での Amazon CloudWatch Logs API 呼び出しのログ作成](http://docs.aws.amazon.com/ja_jp/AmazonCloudWatch/latest/logs/logging_cw_api_calls_cwl.html)