[AWS IoT Greengrass V2] ログマネージャでコンポーネントのログをCloudWatch Logsに送ってみました

2021.08.29

1 はじめに

IoT事業部の平内(SIN)です。

AWS IoT Greengrass V2では、AWSから提供されるいくつかの事前構築済みコンポーネントがありますが、その中のログマネージャは、コンポーネントのログ収集を扱っており、設定により、出力先、サイズ、プレフィックス、CloudWatch Logsへの送信などが可能です。

今回は、ログマネージャを設定し、コンポーネント(Greengrassコア及び、作成したカスタムコンポーネント)のログをCloudWatch Logsに送信してみました。

2 デプロイ

パブリックコンポーネントからaws.greengrass.LogManagerを選択し、デプロイします。

特に何も設定しないでデプロイすると、デフォルトの設定は以下のようになっています。

logsUploaderConfigurationは、空で、periodicUploadIntervalSecだけが設定されている状態です。この場合、特に動作が変わることはありません。

$ sudo /greengrass/v2/bin/greengrass-cli component list

・・・略・・・

Component Name: aws.greengrass.LogManager
    Version: 2.1.3
    State: RUNNING
    Configuration: {"logsUploaderConfiguration":{},"periodicUploadIntervalSec":300.0}

・・・略・・・

3 Greengrassコアのログ

Greengrassコアのログは、デフォルトで /greengrass/v2/logs/greengrass.log に出力されています。

$ sudo tail -f /greengrass/v2/logs/greengrass.log
2021-08-28T23:21:25.939Z [INFO] (pool-2-thread-19) com.aws.greengrass.deployment.ShadowDeploymentListener: Updated reported state for deployment. {CONFIGURATION_ARN=arn:aws:greengrass:ap-northeast-1:439028474478:configuration:thing/gg-device-001:97, status=SUCCEEDED}
・・・略・・・

このログをCloudWatch Logsに送信するためには、logsUploaderConfigurationsystemLogsConfigurationを追加します。uploadToCloudWatchが、CloudWatch Logsに送信するかどうかのフラグです。

パラメータについては、下記にドキュメントがあります。
参考:https://docs.aws.amazon.com/greengrass/v2/developerguide/log-manager-component.html

Greengrassコアのログは、/aws/greengrass/GreengrassSystemComponent/region/Systemの下に、日付/thing/デバイス名の型で出力されます。

4 カスタムコンポーネントのログ

最初にログを出力するだけの簡単なコンポーネントを作成しました。

com.example.LogSample

import time

counter = 0
while(True):
    print("😍 {}".format(counter))
    counter += 1
    time.sleep(5)

カスタムコンポーネントのログは、デフォルトで /greengrass/v2/logs/コンポーネント名.logに出力されます。

$ sudo tail -f /greengrass/v2/logs/com.example.LogSample.log
2021-08-28T23:41:29.001Z [INFO] (Copier) com.example.LogSample: stdout. 😍 1. {scriptName=services.com.example.LogSample.lifecycle.Run, serviceName=com.example.LogSample, currentState=RUNNING}
2021-08-28T23:41:34.006Z [INFO] (Copier) com.example.LogSample: stdout. 😍 2. {scriptName=services.com.example.LogSample.lifecycle.Run, serviceName=com.example.LogSample, currentState=RUNNING}
2021-08-28T23:41:39.008Z [INFO] (Copier) com.example.LogSample: stdout. 😍 3. {scriptName=services.com.example.LogSample.lifecycle.Run, serviceName=com.example.LogSample, currentState=RUNNING}
2021-08-28T23:41:44.013Z [INFO] (Copier) com.example.LogSample: stdout. 😍 4. {scriptName=services.com.example.LogSample.lifecycle.Run, serviceName=com.example.LogSample, currentState=RUNNING}

このログをCloudWatch Logに送るためには、aws.greengrass.LogManagerの設定でcomponentLogsConfigurationを追加します。

下記の例では、com.example.LogSample.logを追加しています。

componentLogsConfigurationでは、uploadToCloudWatchというパラメータは存在せず、ここに設定されたコンポネントは、全てCloudWatch Logsへの送信対象となります。

カスタムコンポーネントのログは、/aws/greengrass/UserComponent/region/コンポーネント名 の下に、日付/thing/デバイス名として出力されます。

5 最後に

今回は、カスタムコンポーネントであるログマネージャ(aws.greengrass.LogManager)を使用して、ログをCloudWatch Logsに送信してみました。

periodicUploadIntervalSec(ログマネージャコンポーネントがアップロードする新しいログファイルをチェックする期間(秒単位)で、300(5分)と指定していますが、アップロードのタイミングは、ちょっと違うようで、もっと時間がかかっているように感じました。

もう少し、確認を進めたいと思います。

6 参考リンク


[AWS IoT Greengrass V2] RaspberryPIにインストールしてみました
[AWS IoT Greengrass V2] RaspberryPIでコンポーネントを作成してみました
[AWS IoT Greengrass V2] クラウド側から複数のコアデバイスにコンポーネントをデプロイしてみました
[AWS IoT Greengrass V2] クラウド側からコンポーネントを削除してみました
[AWS IoT Greengrass V2] ローカルデバッグコンソール(aws.greengrass.LocalDebugConsole)を使用してみました
[AWS IoT Greengrass V2] Lambda関数(コンポーネント)をデプロイしてみました
[AWS IoT Greengrass V2] コンポーネントからIoT CoreのメッセージブローカーにPublish/Subscribeしてみました
[AWS IoT Greengrass V2] コンポーネントからシークレットマネージャにアクセスしてみました
[AWS IoT Greengrass V2] コンポーネントでコアデバイス間のPublish/Subscribeを試してみました