开发者社区> 问答> 正文

消息服务的日志如何管理?


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


推送日志到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

各个操作的字段列表

不同操作的日志包含的字段信息各不相同,具体每个操作包含的字段请参考表格。
操作TimeQueueNameAccountIdMessageIdRemoteAddressNextVisibleTimeReceiptHandleInResponseReceiptHandleInRequest
SendMessage/BatchSendMessage--
PeekMessage/BatchPeekMessage---
ReceiveMessage/BatchReceiveMessage-
ChangeMessageVisibility
DeleteMessage/BatchDeleteMessage-


主题消息操作日志


主题消息操作日志是指操作主题消息产生的日志,主要有两类:发布消息和推送消息。接下来,将介绍主题消息操作日志各个字段的含义,以及不同的操作所包含的字段信息。

日志字段解析

一条消息操作日志中包含多个字段,各个字段的含义如表格所示。
字段含义
Time本次操作的发生时间
MessageId消息的 MessageId,标识本次操作处理的消息
TopicName本次操作对应的主题名称
SubscriptionName本次操作对应的订阅名称
AccountId本次操作对应主题的账号
RemoteAddress发起该操作的客户端地址
NotifyStatusMNS 将消息推送给用户时,用户返回的状态码或者相应的出错信息

各个操作的字段列表

不同操作的日志包含的字段信息各不相同,具体每个操作包含的字段请参考表格。
操作TimeMessageIdTopicNameSubscriptionNameAccountIdRemoteAddressNotifyStatusSubscriptionName
PublishMessage---
Notify-

NotifyStatus

NotifyStatus 是推送消息日志特有的字段,该可以协助您调查MNS 推送消息到 Endpoint失败的原因。根据不同的 NotifyStatus,您可以按照下表建议的处理方法进行处理。
错误码描述建议处理方法
2xx消息推送成功
其它Http状态码消息推送给用户,Endpoint 返回了非2xx的状态码检查 Endpoint 端处理逻辑
InvalidHost订阅指定的 Endpoint 不合法确认订阅中 Endpiont 是否真实有效,可使用curl/telnet进行确认
ConnectTimeout连接订阅指定的 Endpoint 超时确认订阅中 Endpoint 当前是否可访问,可使用curl/telnet进行确认
ConnectFailure连接订阅指定的 Endpoint 失败确认订阅中 Endpoint 当前是否可访问,可使用curl/telnet进行确认
UnknownError未知错误请联系 MNS 技术人员支持


日志管理功能可以做什么?

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

[backcolor=transparent]MNS 的日志管理功能通通满足你!!
  • 将日志推送到LogService,控制台查看完整消息轨迹:查看日志——LogService
  • 使用官网提供查询工具,指定相应参数即可查看消息的处理日志;日志查询命令行工具
  • 登陆OSS控制台,配置LoggingBucket的LifeCycle属性,查看一年前的日志也不是问题:oss控制台
  • 除了官方工具,还可以写写代码,通过 OSS 的 GetObject 接口下载日志文件,做你想做的任何事情;

展开
收起
轩墨 2017-10-24 11:35:58 2145 0
0 条回答
写回答
取消 提交回答
问答排行榜
最热
最新

相关电子书

更多
PostgresChina2018_赖思超_PostgreSQL10_hash索引的WAL日志修改版final 立即下载
Kubernetes下日志实时采集、存储与计算实践 立即下载
日志数据采集与分析对接 立即下载