CloudWatchにログを転送しよう
近年のサーバーシステムは、オンプレでサーバー構築をする事はほとんど無くなりました。
そして、クラウドシステムとしてはAWSかGCPの二択になると思います。
今回はcloudwatch-logback-appenderを利用して、AWSのCloudWatchにシステムログを転送する方法をご紹介します。
CloudWatchを利用する事で、ログ解析が格段に行いやすくなるのでオススメです♪
手順
前提
まずはAWSでCloudWatchへの権限があるIAMを用意しておいてください。
そのユーザーのアクセスキーとシークレットキーを利用します。
依存関係の追加
まずはgradleの依存関係を追加しましょう。
ext {
...
accountService.awsSdkVersion = '1.11.483'
accountService.cloudWatchLogbackAppenderVersion = '1.11'
...
}
buildscript {
....
compile "com.amazonaws:aws-java-sdk:${accountService.awsSdkVersion}"
compile "com.j256.cloudwatchlogbackappender:cloudwatchlogbackappender:${accountService.cloudWatchLogbackAppenderVersion}"
...
}
logbackの設定を修正
次にlogback-spring.xmlにCloudWatch用の設定を追加します。
<?xml version="1.0" encoding="UTF-8"?>
...
<appender name="CLOUDWATCH" class="com.j256.cloudwatchlogbackappender.CloudWatchAppender">
<region>ap-northeast-1</region>
<accessKeyId>XXX</accessKeyId>
<secretKey>YYY</secretKey>
<logGroup>blogenist-loggroup</logGroup>
<logStream>blogenist-logstream</logStream>
<layout>
<pattern>${FORMAT}</pattern>
</layout>
<maxBatchSize>32</maxBatchSize>
</appender>
<root level="DEBUG">
<appender-ref ref="STDOUT" />
<appender-ref ref="FILE" />
<appender-ref ref="CLOUDWATCH" /><!-- 追加 -->
</root>
</configuration>
確認
設定はこれだけです。
では実際に、サーバーを起動してリクエストを投げてみましょう。
# レスポンスヘッダー
< HTTP/1.1 200
< x-request-id: 0523847d-68dc-4db8-8de0-00f65592f43a
< Content-Type: application/json;charset=UTF-8
< Transfer-Encoding: chunked
< Date: Sat, 04 May 2019 04:23:23 GMT

正常にCloudWatchに転送されていますね。
また、以前埋め込んだX-Request-Idも正常に出力されているので、レスポンスヘッダーに含まれているx-request-idで絞り込む事で対象のログを絞り込めるのでとても調査がしやすいです!
終わりに
以上のように、ライブラリを追加してちょっとした設定を追加するだけでとても簡単にCloudWatchにログを転送する事が出来ました。
AWS環境でシステムを運用する場合は運用がとても便利になるので、是非試してみてください♪
