消息服务MNS的日志管理功能将您的消息操作日志推送到指定LoggingBucket中。 您在控制台上配置将日志推送到OSS或者LogService,然后开启该地域队列或主题的日志管理功能,消息服务MNS将自动推送该队列或主题消息的操作日志到指定的LoggingBucket中。
应用场景
您在收发消息的过程中,是否遇到过以下问题:
- 消息成功发送到队列,但消费端收不到消息,消息去哪儿了?
- 消息被谁消费了、消费了几次?
- 消费端宕机了,消费失败的消息什么时候可以再次被消费?
- 消息发布到主题,Endpoint却迟迟收不到消息?
- 想看一个月前的消息操作日志?
这些问题可以通过消息服务MNS的日志管理功能解决,方法如下:
- 将日志推送到LogService,控制台查看完整消息轨迹。
- 使用官网提供查询工具,指定相应参数即可查看消息的处理日志。
- 登录OSS控制台,配置LoggingBucket的LifeCycle属性,可查看一年前的日志。
- 除了官方工具,还可以通过OSS的GetObject接口下载日志文件。
推送日志到LogService
- 配置方法:推送日志到Log Service。
- 日志查看:查看日志Log Service。
- 在为LogStore创建索引时,请选择合理的数据保存时间,该属性后续只支持缩短,不支持延长。
- 如果您将LoggingBucket对应的LogService的Project、LogStore删除,或者将授予消息服务MNS的权限取消,日志将无法正常推送。
- 日志延迟时间约5分钟。
推送日志到OSS
细节分析
- 每个地域配置一个LoggingBucket,该地域所有开通日志管理功能的队列或主题的消息操作日志均推送到该LoggingBucket中。
- 每个队列或主题可以独立设置是否开启日志管理功能,默认不开启。
费用解析
- 消息服务MNS不针对日志管理功能收取额外费用。
- 消息服务MNS将日志推送到OSS或者LogService中,对应服务会根据存储空间、流量、请求数等进行收费,详情请参见LogService价格总览、OSS价格总览。
- 日志量的大小与客户端操作消息服务MNS的QPS和操作类型有关系,此处以SendMessage操作、QPS 1000为例,计算每分钟的日志量:
178 Byte*1000*60/1024/1024约为10 MB
,其中178
为单条SendMessag操作的日志大小。
队列消息操作日志
队列消息操作日志是指操作队列消息所产生的日志,例如发送消息、消费消息、删除消息等操作。一条消息操作日志中包含多个字段,每个字段都有自己的含义。根据操作的不同,消息操作日志所包含的字段也不相同。以下分别介绍各个字段的含义和不同操作所包含的字段信息。
- 日志字段解析
一条消息操作日志中包含多个字段,各个字段的含义如下:
字段 含义 Time 本次操作的发生时间。 MessageId 消息的MessageId,标识本次操作处理的消息。 QueueName 本次操作对应的队列名称。 AccountId 本次操作对应队列的账号。 RemoteAddress 发起该操作的客户端地址。 NextVisibleTime 该操作执行完成后,这条消息的下次可见时间。 ReceiptHandleInRequest 客户端执行该操作时传入的ReceiptHandle参数。 ReceiptHandleInResponse 该操作执行完成后,返回客户端的ReceiptHandle。 ProcessTime 本次操作的处理时间。 RequestId 本次执行的任务ID。 Action 表示动作,例如:删除、发送等。 - 各个操作的字段列表
不同操作的日志包含的字段信息各不相同,具体每个操作包含的字段如下:
操作 Time QueueName AccountId MessageId RemoteAddress NextVisibleTime ReceiptHandleInResponse ReceiptHandleInRequest SendMessage/BatchSendMessage 有 有 有 有 有 有 无 无 PeekMessage/BatchPeekMessage 有 有 有 有 有 无 无 无 ReceiveMessage/BatchReceiveMessage 有 有 有 有 有 有 有 无 ChangeMessageVisibility 有 有 有 有 有 有 有 有 DeleteMessage/BatchDeleteMessage 有 有 有 有 有 有 无 有
主题消息操作日志
主题消息操作日志是指操作主题消息产生的日志,主要有两类:发布消息和推送消息。以下分别介绍主题消息操作日志各个字段的含义,以及不同的操作所包含的字段信息。
- 日志字段解析
一条消息操作日志中包含多个字段,各个字段的含义如下:
字段 含义 Time 本次操作的发生时间。 MessageId 消息的MessageId,标识本次操作处理的消息。 TopicName 本次操作对应的主题名称。 SubscriptionName 本次操作对应的订阅名称。 AccountId 本次操作对应主题的账号。 RemoteAddress 发起该操作的客户端地址。 NotifyStatus 消息服务MNS将消息推送给用户时,用户返回的状态码或者相应的出错信息。 ProcessTime 本次操作的处理时间。 MessageTag 设置的消息标签。 RequestId 本次执行的任务ID。 Action 表示动作,例如:删除、发送等。 - 各个操作的字段列表
不同操作的日志包含的字段信息各不相同,具体每个操作包含的字段如下:
操作 Time MessageId TopicName SubscriptionName AccountId RemoteAddress NotifyStatus SubscriptionName PublishMessage 有 有 有 无 有 有 无 无 Notify 有 有 有 有 有 无 有 有 - NotifyStatus
NotifyStatus是推送消息日志特有的字段,该可以协助您调查消息服务MNS推送消息到Endpoint失败的原因。 根据不同的NotifyStatus,您可以按照下表建议的处理方法进行处理。
错误码 描述 建议处理方法 2xx 消息推送成功。 无。 其它HTTP状态码 消息推送给用户,Endpoint返回了非2xx的状态码。 检查Endpoint端处理逻辑。 InvalidHost 订阅指定的Endpoint不合法。 确认订阅中Endpiont是否真实有效,可使用curl或telnet进行确认。 ConnectTimeout 连接订阅指定的Endpoint超时。 确认订阅中Endpoint当前是否可访问,可使用curl或telnet进行确认。 ConnectFailure 连接订阅指定的Endpoint失败。 确认订阅中Endpoin当前是否可访问,可使用curl或telnet进行确认。 UnknownError 未知错误。 请联系消息服务MNS技术人员支持。