こんにちは。運用開発グループの木村です。今回はAWS IoT Greengrassを使ってエッジデバイスで動作しているコンテナのログ収集をやってみました。
AWS IoT Greengrassとは
AWS IoT Greengrass とは、IoTのオープンソースエッジランタイムおよびクラウドサービスであり、デバイスソフトウェアの構築、デプロイ、および管理を支援するエッジコンピューティングサービスです。
各デバイスに対してコンポーネントという単位で開発したアプリケーションを配布したり、クラウド側からジョブを実行したり、デバイスのデータを収集するなど様々なことが可能です。
全体構成
ログ収集の方法としては、Dockerを使用して動作させているコンテナのログをGreengrass コンポーネントを使ってCloudWatchに転送します。簡単な図ですが構成としては以下のようになります。
エッジデバイスでDockerのlogging driverを設定する
※エッジデバイスのOSはUbuntu18.04を使用しています。
1. Dockerのlogging driverをsyslogに設定するために /etc/docker/daemon.json を以下のように修正
{
"log-driver": "syslog",
"log-opts": {
"syslog-facility": "daemon",
"tag": "docker_logs/{{.Name}}/{{.ID}}"
}
}
2. 1.の変更を反映
$ sudo systemctl daemon-reload
$ sudo systemctl restart docker
3. ログファイル出力先ディレクトリ(/home/container_logs)を作成
$ sudo mkdir /home/container_logs
$ sudo chown -R syslog /home/container_logs/
4. dockerのログを出力するための設定として、/etc/rsyslog.d/10-docker.confを以下のように作成
$umask 0000
$DirCreateMode 0750
$FileCreateMode 0666
$template DockerLogs, "/home/container_logs/%programname%_%$year%%$month%%$day%.log"
if $syslogfacility-text == 'daemon' and $programname contains 'docker_logs' then -?DockerLogs
& stop
5. 4.の変更を反映
$ sudo systemctl restart rsyslog
以上でエッジデバイスでDockerのlogging driverを設定する手順は完了です。
パブリックコンポーネントでログ収集する
ログ収集にはパブリックコンポーネントの一つであるLogManagerを使います。パブリックコンポーネントとはAWSによって提供されるコンポーネントで、少し設定するだけでエッジデバイスにコンポーネントをデプロイすることができます。
LogManagerはエッジデバイスからCloudWatch Logsにログをアップロードするためのコンポーネントです。詳しくは公式ドキュメントをご覧ください。
LogManagerデプロイ手順
1. AWSマネジメントコンソールから「AWS IoT」→「デプロイ」を選択し、デプロイの作成を押下
2. デプロイの名前とデプロイターゲットを入力して「次へ」を押下
3. パブリックコンポーネントのaws.greengrass.LogManagerを選択して「次へ」を押下
4. aws.greengrass.LogManagerを選択して「コンポーネントの設定」を押下
5. マージする設定に以下の設定を入力し、「確認」を押下
{
"logsUploaderConfiguration": {
"componentLogsConfigurationMap": {
"docker_logs": {
"logFileDirectoryPath": "/home/container_logs/",
"diskSpaceLimit": "1",
"diskSpaceLimitUnit": "MB",
"deleteLogFileAfterCloudUpload": "true"
}
}
}
}
6. 最後のレビュー画面まで「次へ」を押下し、レビュー画面で「デプロイ」を押下
以上でGreengrassを使ってエッジデバイスで動作しているコンテナのログを収集する手順は完了です。
CloudWatchでログを確認
/aws/greengrass/UserComponent/ap-northeast-1/docker_logs というロググループが作成され、エッジデバイスで動作しているコンテナのログを確認することができます。
まとめ
今回はAWS IoT Greengrassを使ってエッジデバイスで動作しているコンテナのログ収集をやってみました。今回利用したLogManager以外にも様々なパブリックコンポーネントがあったり、自分で作成するカスタムコンポーネントというものもありますので、機会があれば皆さんもGreengrassを使ってみてください。