日志管理

重要

本文中含有需要您注意的重要提示信息,忽略该信息可能对您的业务造成影响,请务必仔细阅读。

轻量消息队列(原 MNS)的日志管理功能将消息请求日志推送到日志服务 SLS(Simple Log Service),然后可以使用SLS的能力查询和分析请求日志功能来定位线上问题。

应用场景

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

  • 消息成功发送到队列,但消费端收不到消息,消息去哪儿了?

  • 消息被谁消费了?消费了几次?

  • 消费端宕机了,消费失败的消息什么时候可以再次被消费?

  • 消息发布到主题,Endpoint却迟迟收不到消息?

这些问题可以通过轻量消息队列(原 MNS)的日志管理功能解决,方法如下:

  • 将日志推送到SLS,在控制台查看完整消息轨迹。

  • 使用官网提供查询工具,指定相应参数即可查看消息的处理日志。

费用说明

  • 轻量消息队列(原 MNS)不针对日志管理功能收取额外费用。

  • 轻量消息队列(原 MNS)将日志推送到SLS,对应服务会根据存储空间、流量、请求数等进行收费,详情请参见计费概述

队列日志格式说明

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

  • 日志字段解析

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

    字段

    含义

    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不合法。

    确认订阅中Endpoint是否真实有效,可使用curl或telnet进行确认。

    ConnectTimeout

    连接订阅指定的Endpoint超时。

    确认订阅中Endpoint当前是否可访问,可使用curl或telnet进行确认。

    ConnectFailure

    连接订阅指定的Endpoint失败。

    确认订阅中Endpoint当前是否可访问,可使用curl或telnet进行确认。

    UnknownError

    未知错误。

    请联系轻量消息队列(原 MNS)技术人员支持。

日志管理操作

如需使用日志功能,请先完成以下操作:

  • 已创建日志服务Project和Logstore。具体操作,请参见创建项目Project创建Logstore

    您的消息服务操作日志只能被推送到相同地域下的日志服务Project中。

  • 已授权消息服务使用AliyunMNSLoggingRole角色导出日志。

    单击云资源访问授权,根据提示完成授权。

    警告

    请勿取消授权或删除RAM角色,否则将导致轻量消息队列(原 MNS)日志无法正常推送到日志服务。

开启日志功能

开启队列的日志功能

  1. 登录轻量消息队列(原 MNS)控制台

  2. 在左侧导航栏,单击队列列表

  3. 在顶部菜单栏,选择地域。

  4. 队列列表页面,找到目标队列,在其右侧操作列选择更多>编辑

  5. 编辑队列参数面板中,启用日志功能选择

    队列列表页面,目标队列的日志功能列显示为已启用

开启主题的日志功能

  1. 登录轻量消息队列(原 MNS)控制台

  2. 在左侧导航栏,单击主题列表

  3. 在顶部菜单栏,选择地域。

  4. 主题列表页面,找到目标主题,在其右侧操作列单击编辑

  5. 编辑主题参数面板中,启用日志功能选择

    主题列表页面,目标主题的日志功能列显示为已启用

推送日志到日志服务

操作步骤

  1. 登录轻量消息队列(原 MNS)控制台

  2. 在左侧导航栏,单击日志管理

  3. 在顶部菜单栏,选择地域。

  4. 日志管理页面,在选择目标配置向导页面选择日志服务(SLS)

  5. 配置目标配置向导页面,选择Project名称Logstore名称,然后单击启用

    日志管理页面,显示已配置的Project和Logstore。

查看日志

操作步骤

  1. 登录日志服务控制台

  2. 在Project列表区域,单击目标Project。

    image

  3. 在控制台左侧,单击日志存储,在日志库列表中单击目标Logstore。

    image

  4. 输入查询语句,然后单击最近15分钟,设置查询的时间范围。更多信息,请参见查询和分析日志

日志分析示例

查询队列消息的轨迹

本示例要查询队列消息的消息轨迹,即输入队列名称和消息ID,格式为$QueueName and $MessageId,例如log and EED287A265726135146E6A9CADC8XXXX

查询结果如下所示,记录了某条消息从发送到接收的过程。

image

查询主题消息的消息轨迹

本示例要查询主题消息的消息轨迹,即输入主题名称和MessageId,查询语句格式为$TopicName and $MessageId,例如logtest and 8798453B65727FC6433E6AB4F746XXXX

查询结果如下图所示,记录了某条消息从发送到通知的过程。

image

查询队列消息发送量

本示例要查询队列消息发送量,即输入队列名称和发送操作,查询语句格式为$QueueName and (SendMessage or BatchSendMessage),例如log and (SendMessage or BatchSendMessage)

查询结果如下所示,当前查询时段内,生产者向log队列发送了3条队列消息。查看队列消息写入量

查询主题消息发送量

本示例要查询主题消息发送量,即输入主题名称和发布操作,查询语句格式为$TopicName and PublishMessage,例如logtest and PublishMessage

查询结果如下图所示,当前查询时段内,生产者向logtest主题发送了3条消息。查看主题消息发布量

查询队列消息消费量

本示例要查询队列消息消费量,即输入队列名称和消费操作,查询语句格式为$QueueName and (ReceiveMessage or BatchReceiveMessage),例如log and (ReceiveMessage or BatchReceiveMessage)。

查询结果如下所示,当前查询时段内,log队列中有12条消息被消费。查看队列消息消费量

查询队列消息删除量

本示例要查询队列消息删除量,即输入队列名称和删除操作,查询语句格式为$QueueName and (DeleteMessage or BatchDeleteMessage),例如log and (DeleteMessage or BatchDeleteMessage)

查询结果如下所示,当前查询时段内,61条log队列消息被删除。查看队列消息删除量

查询某个客户端消息处理量

本示例要查询某个客户端消息处理量,即输入客户端IP地址,查询语句格式为$ClientIP,例如10.10.10.0

如果您要查询某个客户端的某类操作日志,可使用多个关键字组合方式,例如$ClientIP and (SendMessage or BatchSendMessage)

查询结果如下图所示,当前查询时段内,该客户端处理了66条消息。查看某个客户端消息处理量