使用 AWS IoT Greengrass 日誌進行監控 - AWS IoT Greengrass

若我們提供該指南英語版本的翻譯,在有任何牴觸的狀況下請以英文版本的指南為主。其透過機器翻譯提供翻譯。

使用 AWS IoT Greengrass 日誌進行監控

AWS IoT Greengrass 由雲端服務和 AWS IoT Greengrass Core 軟體組成。AWS IoT Greengrass 核心軟體可以將日誌寫入 Amazon CloudWatch 及您核心裝置的本機檔案系統。在核心上執行的 Lambda 函數和連接器也可以將日誌寫入 CloudWatch Logs 和本機檔案系統。您可以使用日誌來監控事件和排解疑難問題。所有 AWS IoT Greengrass 日誌項目皆含有時間戳記、日誌等級和事件資料。對記錄設定所做的變更會在部署群組後生效。

於群組層級中設定日誌記錄。如需顯示如何設定 Greengrass 群組記錄日誌的步驟,請參閱設定 AWS IoT Greengrass 的日誌記錄

存取 CloudWatch Logs

如果您設定 CloudWatch 日誌記錄,則可以在 Amazon CloudWatch 主控台的日誌頁面檢視日誌。AWS IoT Greengrass 日誌的日誌群組使用以下的命名慣例:

/aws/greengrass/GreengrassSystem/greengrass-system-component-name /aws/greengrass/Lambda/aws-region/account-id/lambda-function-name

每個日誌群組都包含使用以下命名慣例的日誌串流:

date/account-id/greengrass-group-id/name-of-core-that-generated-log

使用 CloudWatch Logs 時有下列考量:

  • 日誌會傳送限量的項目到 CloudWatch Logs,以防萬一處於沒有網際網路連線的狀態。用完重試次數之後,會刪除事件。

  • 交易、記憶體及其他限制應用。如需更多詳細資訊,請參閱 記錄限制

  • Greengrass 群組角色必須允許 AWS IoT Greengrass 寫入 CloudWatch Logs。若要授與許可,請以您的群組角色內嵌以下內嵌政策

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

    您可以授與您的日誌資源的更精細存取權。如需詳細資訊,請參閱《Amazon CloudWatch 使用者指南》中的針對 CloudWatch Logs 使用以身分為基礎的政策 (IAM 政策)

    群組角色是您建立並連接至 Greengrass 群組的 IAM 角色。您可以使用主控台或 AWS IoT Greengrass API 來管理群組角色。

     

    使用主控台
    1. 在 AWS IoT 主控台中,選擇 Greengrass,然後選擇 Groups (群組)

    2. 選擇目標群組。

    3. 選擇 Settings (設定)。在 Group Role (群組角色) 底下,您可以檢視、連接或移除群組角色。

      如需說明如何連接群組角色的步驟,請參閱群組角色.

     

    使用 CLI

     

    若要了解如何取得群組 ID 以與這些指令搭配使用,請參閱 取得群組 ID

存取檔案系統日誌

如果設定檔案系統記錄,則日誌檔會存放於核心裝置的 greengrass-root/ggc/var/log 之下。以下是高階目錄結構:

greengrass-root/ggc/var/log - crash.log - system - log files for each Greengrass system component - user - region - account-id - log files generated by each user-defined Lambda function - aws - log files generated by each connector
注意

在預設情況下,greengrass-root 即為 /greengrass 目錄。如果已設定好寫入目錄,那麼日誌就會位在該目錄中。

使用檔案系統日誌時有下列考量:

  • 在檔案系統中讀取 AWS IoT Greengrass 日誌需要根許可。

  • 當日誌資料數量接近設定限制時,AWS IoT Greengrass 會根據大小支援旋轉,以及支援自動清除。

  • crash.log 檔案僅於檔案系統日誌中提供。此日誌不寫入 CloudWatch Logs。

  • 磁碟使用量限制應用。如需詳細資訊,請參閱 記錄限制

注意

AWS IoT Greengrass Core 軟體 1.0 版的日誌存放於 greengrass-root/var/log 目錄下。

預設日誌記錄組態

如果日誌記錄設定不明確,則在第一個群組部署後 AWS IoT Greengrass 會使用以下預設記錄組態。

AWS IoT Greengrass 系統元件
  • 類型 - FileSystem

  • 元件 - GreengrassSystem

  • 等級 - INFO

  • 空格 - 128 KB

使用者定義的 Lambda 函數
  • 類型 - FileSystem

  • 元件 - Lambda

  • 等級 - INFO

  • 空格 - 128 KB

注意

在執行第一個部署前,只有系統元件寫入日誌到檔案系統裡,因為尚未部署使用者定義的 Lambda 函數。

設定 AWS IoT Greengrass 的日誌記錄

您可以使用 AWS IoT 主控台 或 AWS IoT Greengrass APIs 設定 AWS IoT Greengrass 記錄。

注意

若要讓 AWS IoT Greengrass 可以將日誌寫入到 CloudWatch Logs 中,您的群組角色必須允許必要的 CloudWatch Logs 動作

設定日誌記錄 (主控台)

您可以在群組的設定頁面設定日誌記錄。

  1. 請在 AWS IoT 主控台 選擇 Greengrass,然後再選擇群組

  2. 選擇您要設定日誌記錄的群組。

  3. 請在群組組態頁面選擇設定

  4. 選擇記錄的位置,如下所示:

    • 若要設定 CloudWatch 日誌組態 的 CloudWatch 日誌記錄,請選擇編輯

    • 若要設定本機日誌組態的檔案系統記錄,請選擇編輯

    您可以同時設定兩個記錄的位置或單選。

  5. 請在設定群組記錄頁面上選擇新增另一個日誌類型

  6. 請選擇事件來源,如下所示:

    • 若要從使用者定義的 Lambda 函數記錄事件日誌,請選擇使用者 Lambdas

    • 若要從 AWS IoT Greengrass 系統元件記錄事件日誌,請選擇 Greengrass 系統

    您可以同時選取兩個元件或單選。

  7. 選擇 Update (更新)。

  8. 選擇您想要記錄事件日誌的最低等級。將會過濾低於此閾值的事件且不將其儲存。

  9. 針對檔案系統日誌,請指定磁碟空間的限制大小。

  10. 選擇 Save (儲存)。變更會在部署群組之後生效。

設定日誌記錄 (API)

您可以使用 AWS IoT Greengrass 記錄器 API,以編寫程式的方式設定日誌記錄。例如,使用 CreateLoggerDefinition 動作根據 LoggerDefinitionVersion承載建立記錄器定義,其會使用以下語法:

{ "Loggers": [ { "Id": "string", "Type": "FileSystem|AWSCloudWatch", "Component": "GreengrassSystem|Lambda", "Level": "DEBUG|INFO|WARN|ERROR|FATAL", "Space": "integer" }, { "Id": "string", ... } ] }

LoggerDefinitionVersion 是一個陣列,其中一個或多個 Logger 物件具有下列屬性:

Id

記錄器的識別符。

Type

日誌事件的儲存機制。使用 AWSCloudWatch 時,會傳送日誌事件到 CloudWatch Logs。使用 FileSystem 時,會儲存日誌事件於本機檔案系統中。

有效值:AWSCloudWatchFileSystem

Component

日誌事件的來源。使用 GreengrassSystem 時,會記錄來自 Greengrass 系統元件的事件。使用 Lambda 時,會記錄來自使用者定義的 Lambda 函數之事件。

有效值:GreengrassSystemLambda

Level

日誌等級閾值。將會過濾低於此閾值的日誌事件,且不將其儲存。

有效值:DEBUGINFO (建議)、WARNERRORFATAL

Space

用來存放日誌的最大本機儲存容量 (KB)。僅當 Type 設為 FileSystem 時才會套用此範圍設定。

組態範例

以下 LoggerDefinitionVersion 範例指定記錄組態:

  • 開啟 AWS IoT Greengrass 系統元件的檔案系統 ERROR (及以上) 記錄。

  • 開啟使用者定義的 Lambda 函數之檔案系統 INFO (及以上) 記錄。

  • 開啟使用者定義的 Lambda 函數之 CloudWatch INFO (及以上) 記錄。

{ "Name": "LoggingExample", "InitialVersion": { "Loggers": [ { "Id": "1", "Component": "GreengrassSystem", "Level": "ERROR", "Space": 10240, "Type": "FileSystem" }, { "Id": "2", "Component": "Lambda", "Level": "INFO", "Space": 10240, "Type": "FileSystem" }, { "Id": "3", "Component": "Lambda", "Level": "INFO", "Type": "AWSCloudWatch" } ] } }

在您建立記錄器定義版本後,您可以使用其版本 ARN 在部署群組前建立群組。

記錄限制

AWS IoT Greengrass 具有下列記錄限制。

每秒交易數

當 CloudWatch 啟用記錄功能,再將它們傳送到本機批次記錄元件日誌事件 CloudWatch,,所以您可以日誌以每秒高於 5 個請求每個日誌串流。

記憶體

如果設定 AWS IoT Greengrass 傳送日誌給 CloudWatch 和 Lambda 函數日誌的速度在延長的時間內大於 5 MB/秒,則內部的處理管道最終將滿。最糟的理論值為 6 MB/Lambda 函數。

時鐘誤差

啟用日誌記錄到 CloudWatch 時,記錄元件使用的是一般簽章的第四版之簽名程序向 CloudWatch 簽署請求。如果 AWS IoT Greengrass 核心 裝置上的系統時間不同步,一旦差距超過 15 分鐘則會拒絕請求。

硬碟使用量

使用下列公式計算磁碟要記錄的最大使用總量。

greengrass-system-component-space * 8 // 7 if automatic IP detection is disabled + 128KB // the internal log for the local logging component + lambda-space * lambda-count // different versions of a Lambda function are treated as one

其中:

greengrass-system-component-space

用來存放 AWS IoT Greengrass 系統元件日誌的最大本機儲存容量。

lambda-space

用來存放 Lambda 函數日誌的最大本機儲存容量。

lambda-count

部署 Lambda 函數的數目。

日誌受損

如果您的 AWS IoT Greengrass 核心 裝置設定為僅記錄日誌到 CloudWatch,一旦沒有網際網路連線,您將無法擷取記憶體中當前的日誌。

當 Lambda 函數終止時 (例如,在部署期間),會有幾秒鐘的時間沒有將日誌寫入到 CloudWatch。

CloudTrail 日誌

AWS IoT Greengrass 已與 AWS CloudTrail 整合,該服務提供由使用者、角色或 AWS 服務在 AWS IoT Greengrass 中所採取之動作的記錄。如需詳細資訊,請參閱 使用 AWS CloudTrail 記錄 AWS IoT Greengrass API 呼叫