日志管理

重要

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

轻量消息队列(原 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是否真实有效,可使用curltelnet进行确认。

    ConnectTimeout

    连接订阅指定的Endpoint超时。

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

    ConnectFailure

    连接订阅指定的Endpoint失败。

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

    UnknownError

    未知错误。

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

日志管理操作

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

  • 已创建日志服务ProjectLogstore。具体操作,请参见管理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名称,然后单击启用

    日志管理页面,显示已配置的ProjectLogstore。

查看日志

操作步骤

  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)

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

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

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

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

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