2021-02-10

07.CAT-消息结构

CAT的消息结构 Message 整体类的结构图

client 与 server 的数据交互,支撑的数据结构就是 消息体 Message 

7.01 Message

消息的结构定义

消息类型

  • Event 用来记录一件事发生的次数,比如记录系统异常
  • Heartbeat 表示程序内定期产生的统计信息, 如CPU%, MEM%, 连接池状态, 系统负载等
  • Metric 用于记录业务指标、指标可能包含对一个指标记录次数、记录平均值、记录总和,业务指标最低统计粒度为1分钟
  • Trace 用于记录基本的trace信息,类似于log4j的info信息
  • Transaction 适合记录跨越系统边界的程序访问行为

7.02 MessageTree

CAT监控系统将每次URL、Service的请求内部执行情况都封装为一个完整的消息树、消息树可能包括Transaction、Event、Heartbeat、Metric等信息。

完整的消息树

可视化消息树

MessageTree的数据结构

public interface MessageTree extends Cloneable { public MessageTree copy(); public String getDomain(); public String getHostName(); public String getIpAddress(); public Message getMessage(); public String getMessageId(); public String getParentMessageId(); public String getRootMessageId(); public String getSessionToken(); public String getThreadGroupName(); public String getThreadId(); public String getThreadName(); public boolean isSample(); public void setDomain(String domain); public void setHostName(String hostName); public void setIpAddress(String ipAddress); public void setMessage(Message message); public void setMessageId(String messageId); public void setParentMessageId(String parentMessageId); public void setRootMessageId(String rootMessageId); public void setSessionToken(String sessionToken); public void setThreadGroupName(String name); public void setThreadId(String threadId); public void setThreadName(String id); public void setSample(boolean sample);}

DefaultMessageTree

public class DefaultMessageTree implements MessageTree { private ByteBuf m_buf; private String m_domain; private String m_hostName; private String m_ipAddress; private Message m_message; private String m_messageId; private String m_parentMessageId; private String m_rootMessageId; private String m_sessionToken; private String m_threadGroupName; private String m_threadId; private String m_threadName; private boolean m_sample = true; @Override public MessageTree copy() {  MessageTree tree = new DefaultMessageTree();  tree.setDomain(m_domain);  tree.setHostName(m_hostName);  tree.setIpAddress(m_ipAddress);  tree.setMessageId(m_messageId);  tree.setParentMessageId(m_parentMessageId);  tree.setRootMessageId(m_rootMessageId);  tree.setSessionToken(m_sessionToken);  tree.setThreadGroupName(m_threadGroupName);  tree.setThreadId(m_threadId);  tree.setThreadName(m_threadName);  tree.setMessage(m_message);  tree.setSample(m_sample);  return tree; } public ByteBuf getBuffer() {  return m_buf; } @Override public String getDomain() {  return m_domain; } @Override public String getHostName() {  return m_hostName; } @Override public String getIpAddress() {  return m_ipAddress; } @Override public Message getMessage() {  return m_message; } @Override public String getMessageId() {  return m_messageId; } @Override public String getParentMessageId() {  return m_parentMessageId; } @Override public String getRootMessageId() {  return m_rootMessageId; } @Override public String getSessionToken() {  return m_sessionToken; } @Override public String getThreadGroupName() {  return m_threadGroupName; } @Override public String getThreadId() {  return m_threadId; } @Override public String getThreadName() {  return m_threadName; } @Override public boolean isSample() {  return m_sample; } public void setBuffer(ByteBuf buf) {  m_buf = buf; } @Override public void setDomain(String domain) {  m_domain = domain; } @Override public void setHostName(String hostName) {  m_hostName = hostName; } @Override public void setIpAddress(String ipAddress) {  m_ipAddress = ipAddress; } @Override public void setMessage(Message message) {  m_message = message; } @Override public void setMessageId(String messageId) {  if (messageId != null && messageId.length() > 0) {   m_messageId = messageId;  } } @Override public void setParentMessageId(String parentMessageId) {  if (parentMessageId != null && parentMessageId.length() > 0) {   m_parentMessageId = parentMessageId;  } } @Override public void setRootMessageId(String rootMessageId) {  if (rootMessageId != null && rootMessageId.length() > 0) {   m_rootMessageId = rootMessageId;  } } @Override public void setSample(boolean sample) {  m_sample = sample; } @Override public void setSessionToken(String sessionToken) {  m_sessionToken = sessionToken; } @Override public void setThreadGroupName(String threadGroupName) {  m_threadGroupName = threadGroupName; } @Override public void setThreadId(String threadId) {  m_threadId = threadId; } @Override public void setThreadName(String threadName) {  m_threadName = threadName; } @Override public String toString() {  PlainTextMessageCodec codec = new PlainTextMessageCodec();  ByteBuf buf = ByteBufAllocator.DEFAULT.buffer();  codec.encode(this, buf);  buf.readInt(); // get rid of length  codec.reset();  return buf.toString(Charset.forName("utf-8")); }

小结

  • 消息的结构主要取决于报表展示的。
  • 关注消息树








原文转载:http://www.shaoqun.com/a/544574.html

跨境电商:https://www.ikjzd.com/

zen-cart:https://www.ikjzd.com/w/1282

patpat:https://www.ikjzd.com/w/1079


CAT的消息结构Message整体类的结构图client与server的数据交互,支撑的数据结构就是消息体Message7.01Message消息的结构定义消息类型Event用来记录一件事发生的次数,比如记录系统异常Heartbeat表示程序内定期产生的统计信息,如CPU%,MEM%,连接池状态,系统负载等Metric用于记录业务指标、指标可能包含对一个指标记录次数、记录平均值、记录总和,业务指标
折扣网:折扣网
汇通天下物流:汇通天下物流
如何利用Facebook免费工具,选择目标市场? :如何利用Facebook免费工具,选择目标市场?
口述:老公出轨后 每次房事都得我求他婚姻出轨爱爱:口述:老公出轨后 每次房事都得我求他婚姻出轨爱爱
PPC广告的三重境界,你在哪一重?:PPC广告的三重境界,你在哪一重?

No comments:

Post a Comment