MNS的日志管理功能将用户的消息操作日志推送到指定LoggingBucket中。 用户在控制台上配置将日志推送到OSS或者LogService,然后开启该地域队列/主题的日志管理功能,MNS将自动推送该队列/主题消息的操作日志到指定的LoggingBucket中。

应用场景

您在收发消息的过程中,是否遇到过以下问题:

  • 消息成功发送到队列,但消费端收不到消息,消息去哪儿了?
  • 消息被谁消费了、消费了几次?
  • 消费端宕机了,消费失败的消息什么时候可以再次被消费?
  • 消息发布到主题,Endpoint 却迟迟收不到消息?
  • 想看一个月前的消息操作日志?

这些问题都可以通过使用MNS的日志管理功能解决。

  • 将日志推送到LogService,控制台查看完整消息轨迹。
  • 使用官网提供查询工具,指定相应参数即可查看消息的处理日志。
  • 登录OSS控制台,配置LoggingBucket的LifeCycle属性,查看一年前的日志也不是问题:OSS控制台
  • 除了官方工具,还可以写写代码,通过OSS的GetObject接口下载日志文件,做您想做的任何事情。

推送日志到LogService

  • 配置方法:推送日志到LogService
  • 日志查看:查看日志LogService
  • 在为LogStore创建索引时,请选择合理的数据保存时间,该属性后续只支持缩短,不支持延长。
  • 如果用户将LoggingBucket对应的LogService 的Project、LogStore删除,或者将授予MNS的权限取消,日志将无法正常推送给用户。
  • 日志延迟时间约5分钟。

推送日志到OSS

  • 配置方法:推送日志到OSS
  • 日志查看:查看日志--OSS
  • 如果用户将LoggingBucket对应的OSS Bucket删除,或者将授予MNS的权限取消,日志将无法正常推送给用户。
  • 日志延迟时间约15分钟。

细节分析

  • 每个地域配置一个LoggingBucket,该地域所有开通日志管理功能的队列/主题的消息操作日志均推送到该LoggingBucket中。
  • 每个队列/主题可以独立设置是否开启日志管理功能,默认不开启。

费用解析

  • MNS不针对日志管理功能收取额外费用。
  • MNS将日志推送到OSS或者LogService中,对应服务会根据存储空间、流量、请求数等进行收费,具体细则请参见LogService价格总览OSS价格总览
  • 日志量的大小与用户操作MNS的QPS和操作类型有关系,此处以SendMessage操作、QPS 1000为例,计算每分钟的日志量:178Byte*1000*60/1024/1024 约为 10MB,其中178为单条SendMessag操作的日志大小。

队列消息操作日志

队列消息操作日志是指操作队列消息所产生的日志,例如发送消息、消费消息、删除消息等操作。一条消息操作日志中包含多个字段,每个字段都有自己的含义。根据操作的不同,消息操作日志所包含的字段也不相同。接下来,将分别介绍各个字段的含义和不同操作所包含的字段信息。

  • 日志字段解析

    一条消息操作日志中包含多个字段,各个字段的含义如下表所示。

    字段 含义
    Time 本次操作的发生时间
    MessageId 消息的 MessageId,标识本次操作处理的消息
    QueueName 本次操作对应的队列名称
    AccountId 本次操作对应队列的账号
    RemoteAddress 发起该操作的客户端地址
    NextVisibleTime 该操作执行完成后,这条消息的下次可见时间
    ReceiptHandleInRequest 用户执行该操作时传入的 ReceiptHandle 参数
    ReceiptHandleInResponse 该操作执行完成后,返回给用户的 ReceiptHandle
  • 各个操作的字段列表

    不同操作的日志包含的字段信息各不相同,具体每个操作包含的字段如下表所示。

    操作 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 将消息推送给用户时,用户返回的状态码或者相应的出错信息
  • 各个操作的字段列表

    不同操作的日志包含的字段信息各不相同,具体每个操作包含的字段请见下表。

    操作 Time MessageId TopicName SubscriptionName AccountId RemoteAddress NotifyStatus SubscriptionName
    PublishMessage
    Notify ntry
  • 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技术人员支持