使用 Amazon IoT 规则上载设备端日志 - Amazon IoT Core
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

使用 Amazon IoT 规则上载设备端日志

您可以使用 Amazon IoT 规则引擎将现有设备端日志文件(系统、应用程序和设备客户端日志)中的日志记录上载到 Amazon CloudWatch。当设备端日志发布到 MQTT 主题时,CloudWatch Logs 规则操作会将消息传输到 CloudWatch Logs。此过程概述了如何使用开启(设置为 true)的规则操作 batchMode 参数批量上载设备日志。

要开始将设备端日志上载到 CloudWatch,请先完成以下先决条件。

先决条件

开始之前,请执行以下操作:

有关这些先决条件的更多信息,请参阅将设备端日志上载到 CloudWatch

创建 CloudWatch 日志组

要创建 CloudWatch 日志组,请完成以下步骤。根据您更喜欢通过 Amazon Web Services 管理控制台 还是 Amazon Command Line Interface (Amazon CLI) 执行以下步骤,选择相应的选项卡。

Amazon Web Services 管理控制台
使用 Amazon Web Services 管理控制台 创建 CloudWatch 日志组
  1. 打开 Amazon Web Services 管理控制台 并导航到 CloudWatch

  2. 在导航栏上,选择 Logs(日志),然后选择 Log groups(日志组)。

  3. 选择创建日志组

  4. 更新 Log group name(日志组名称),并可选择更新 Retention setting(保留设置)字段。

  5. 选择创建

Amazon CLI
使用 Amazon CLI 创建 CloudWatch 日志组
  1. 要创建日志组,请运行以下命令。有关更多信息,请参阅《Amazon CLI v2 命令参考》中的 create-log-group

    将示例中的日志组名称 (uploadLogsGroup) 替换为您首选的名称。

    aws logs create-log-group --log-group-name uploadLogsGroup
  2. 要确认已正确创建日志组,请运行以下命令。

    aws logs describe-log-groups --log-group-name-prefix uploadLogsGroup

    示例输出:

    { "logGroups": [ { "logGroupName": "uploadLogsGroup", "creationTime": 1674521804657, "metricFilterCount": 0, "arn": "arn:aws:logs:us-east-1:111122223333:log-group:uploadLogsGroup:*", "storedBytes": 0 } ] }

创建主题规则

要创建 Amazon IoT 规则,请完成以下步骤。根据您更喜欢通过 Amazon Web Services 管理控制台 还是 Amazon Command Line Interface (Amazon CLI) 执行以下步骤,选择相应的选项卡。

Amazon Web Services 管理控制台
使用 Amazon Web Services 管理控制台 创建主题规则
  1. 打开规则中心。

    1. 打开 Amazon Web Services 管理控制台 并导航到 Amazon IoT

    2. 在导航栏上,选择 Message routing(消息路由),然后选择 Rules(规则)。

    3. 选择创建规则

  2. 输入规则属性。

    1. 输入由字母数字组成的 Rule name(规则名称)。

    2. (可选)输入 Rule description(规则描述)和 Tags(标签)。

    3. 选择下一步

  3. 输入 SQL 语句。

    1. 使用您为摄取定义的 MQTT 主题输入 SQL 语句。

      例如,SELECT * FROM '$aws/rules/things/thing_name/logs'

    2. 选择下一步

  4. 输入规则操作。

    1. Action 1(操作 1)菜单中,选择 CloudWatch logs(CloudWatch 日志)。

    2. 选择 Log group name(日志组名称),然后选择您创建的日志组。

    3. 选择 Use batch mode(使用批量模式)。

    4. 为规则指定 IAM 角色。

      如果规则具有 IAM 角色,请执行以下操作。

      1. IAM role(IAM 角色)菜单上,选择您的 IAM 角色。

      如果规则没有 IAM 角色,请执行以下操作。

      1. 选择 Create new role(创建新角色)。

      2. 对于 Role name(角色名称),输入唯一名称并选择 Create(创建)。

      3. 确认 IAM role(IAM 角色)字段中的 IAM 角色名称是否正确。

    5. 选择下一步

  5. 查看模板配置。

    1. 查看任务模板的设置以验证它们正确无误。

    2. 完成后,选择创建

Amazon CLI
使用 Amazon CLI 创建 IAM 角色和主题规则
  1. 创建一个 IAM 角色,该角色授予对 Amazon IoT 规则的权限。

    1. 创建一个 IAM 策略。

      要创建 IAM 策略,请运行以下命令。确保更新 policy-name 参数值。有关更多信息,请参阅《Amazon CLI v2 命令参考》中的 create-policy

      注意

      如果您使用的是 Microsoft Windows 操作系统,则可能需要将行尾标记 (\) 替换为勾号 (`) 或其他字符。

      aws iam create-policy \ --policy-name uploadLogsPolicy \ --policy-document \ '{ "Version": "2012-10-17", "Statement": { "Effect": "Allow", "Action": [ "iot:CreateTopicRule", "iot:Publish", "logs:CreateLogGroup", "logs:CreateLogStream", "logs:PutLogEvents", "logs:GetLogEvents" ], "Resource": "*" } }'
    2. 将输出中的策略 ARN 复制到文本编辑器中。

      示例输出:

      { "Policy": { "PolicyName": "uploadLogsPolicy", "PermissionsBoundaryUsageCount": 0, "CreateDate": "2023-01-23T18:30:10Z", "AttachmentCount": 0, "IsAttachable": true, "PolicyId": "AAABBBCCCDDDEEEFFFGGG", "DefaultVersionId": "v1", "Path": "/", "Arn": "arn:aws:iam::111122223333:policy/uploadLogsPolicy", "UpdateDate": "2023-01-23T18:30:10Z" } }
    3. 创建 IAM 角色和信任策略。

      要创建 IAM 策略,请运行以下命令。确保更新 role-name 参数值。有关更多信息,请参阅《Amazon CLI v2 命令参考》中的 create-role

      aws iam create-role \ --role-name uploadLogsRole \ --assume-role-policy-document \ '{ "Version": "2012-10-17", "Statement": [ { "Sid": "", "Effect": "Allow", "Principal": { "Service": "iot.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }'
    4. 向角色附加 IAM 策略。

      要创建 IAM 策略,请运行以下命令。确保更新 role-namepolicy-arn 参数值。有关更多信息,请参阅《Amazon CLI v2 命令参考》中的 attach-role-policy

      aws iam attach-role-policy \ --role-name uploadLogsRole \ --policy-arn arn:aws:iam::111122223333:policy/uploadLogsPolicy
    5. 查看角色。

      要确认已正确创建 IAM 角色,请运行以下命令。确保更新 role-name 参数值。有关更多信息,请参阅《Amazon CLI v2 命令参考》中的 get-role

      aws iam get-role --role-name uploadLogsRole

      示例输出:

      { "Role": { "Path": "/", "RoleName": "uploadLogsRole", "RoleId": "AAABBBCCCDDDEEEFFFGGG", "Arn": "arn:aws:iam::111122223333:role/uploadLogsRole", "CreateDate": "2023-01-23T19:17:15+00:00", "AssumeRolePolicyDocument": { "Version": "2012-10-17", "Statement": [ { "Sid": "Statement1", "Effect": "Allow", "Principal": { "Service": "iot.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }, "Description": "", "MaxSessionDuration": 3600, "RoleLastUsed": {} } }
  2. 在 Amazon CLI 中创建 Amazon IoT 主题规则。

    1. 要创建 Amazon IoT 主题规则,请运行以下命令。确保更新 --rule-namesql 语句、descriptionroleARN logGroupName 参数值。有关更多信息,请参阅《Amazon CLI v2 命令参考》中的 create-topic-rule

      aws iot create-topic-rule \ --rule-name uploadLogsRule \ --topic-rule-payload \ '{ "sql":"SELECT * FROM 'rules/things/thing_name/logs'", "description":"Upload logs test rule", "ruleDisabled":false, "awsIotSqlVersion":"2016-03-23", "actions":[ {"cloudwatchLogs": {"roleArn":"arn:aws:iam::111122223333:role/uploadLogsRole", "logGroupName":"uploadLogsGroup", "batchMode":true} } ] }'
    2. 要确认已正确创建规则,请运行以下命令。确保更新 role-name 参数值。有关更多信息,请参阅《Amazon CLI v2 命令参考》中的 get-topic-rule

      aws iot get-topic-rule --rule-name uploadLogsRule

      示例输出:

      { "ruleArn": "arn:aws:iot:us-east-1:111122223333:rule/uploadLogsRule", "rule": { "ruleName": "uploadLogsRule", "sql": "SELECT * FROM rules/things/thing_name/logs", "description": "Upload logs test rule", "createdAt": "2023-01-24T16:28:15+00:00", "actions": [ { "cloudwatchLogs": { "roleArn": "arn:aws:iam::111122223333:role/uploadLogsRole", "logGroupName": "uploadLogsGroup", "batchMode": true } } ], "ruleDisabled": false, "awsIotSqlVersion": "2016-03-23" } }

将设备端日志发送到 Amazon IoT

将设备端日志发送到 Amazon IoT
  1. 要将历史日志发送到 Amazon IoT,请与您的设备通信,以确保满足以下条件。

    • 日志信息将发送到在本过程的先决条件部分中指定的正确主题命名空间。

      例如,$aws/rules/things/thing_name/logs

    • MQTT 消息有效载荷的格式正确无误。有关 MQTT 主题和建议的命名规则的更多信息,请参阅 将设备端日志上载到 Amazon CloudWatch 中的 MQTT 主题 部分。

  2. 确认已在 Amazon IoT MQTT 客户端中接收 MQTT 消息。

    1. 打开 Amazon Web Services 管理控制台 并导航到 Amazon IoT

    2. 要查看 MQTT test client(MQTT 测试客户端),请在导航栏上选择 Test(测试)、MQTT test client(MQTT 测试客户端)。

    3. 对于 Subscribe to a topic(订阅主题)、Topic filter(主题筛选器),输入 topic namespace(主题命名空间)。

    4. 选择订阅

      MQTT 消息显示在 Subscriptions(订阅)和 Topic(主题)表中,如下所示。这些消息可能需要长达五分钟才会显示。

      MQTT 消息显示在订阅和主题表中。

查看日志数据

在 CloudWatch Logs 中查看您的日志记录
  1. 打开 Amazon Web Services 管理控制台 并导航到 CloudWatch

  2. 在导航栏上,依次选择 Logs(日志)和 Logs Insights(日志见解)。

  3. Select log group(s)(选择日志组)菜单上,选择您在 Amazon IoT 规则中指定的日志组。

  4. Logs insights(日志见解)页面上,选择 Run query(运行查询)。