datadog后台一个会产生5种数据包,其中,collectd产生一个url为intake的包,包含指标,事件和服务检查以及一系列全局key-value。statsd会接受一种udp数据包,会发出三种http包,这三种http的url分别为series,intake和check_run.其中series为metric包,intake为事件检查包,check_run为服务检查包,这三种包内容来自对udp的从新解析,与collectd内容一致。java
1,首先分析udp包,udp包的形式以下:api
<name>:<value>|<metric_type>|@<sample_rate>|#<tag1_name>:<tag1_value>,<tag2_name>:<tag2_value>:<value>|<metric_type>...
其中,name有三种类型,分别以_sc/_e和其余开头,分别表明这一行数据是service_check,events和intake类型,metric_type表示指标类型,sample_rate是采样方式,后其余的数据都是tags。udp一个抓包数据显示以下,其中,g表示guage:tomcat
jvm.heap_memory_max:1908932608|g|#type:Memory,jmx_domain:java.lang,instance:solr_instance jvm.heap_memory:19460696|g|#type:Memory,jmx_domain:java.lang,instance:solr_instance jvm.non_heap_memory_init:2555904|g|#type:Memory,jmx_domain:java.lang,instance:solr_instance jvm.non_heap_memory_committed:32702464|g|#type:Memory,jmx_domain:java.lang,instance:solr_instance jvm.non_heap_memory_max:-1|g|#type:Memory,jmx_domain:java.lang,instance:solr_instance jvm.non_heap_memory:30390320|g|#type:Memory,jmx_domain:java.lang,instance:solr_instance _sc|solr.can_connect|0|#jmx_server:127.0.0.1,instance:solr_instance
2,分析series包,series包数据来源于udp包,数据格式以下,series key对应的list中,points中的值是时间戳和value,时间间隔来源于statsd,其他数据都是拼接。注意的是tags是jmx直接传送的,不一样server对应的tags的数量不同。bash
{ "series": [ { "tags": [ "J2EEApplication:none", "J2EEServer:none", "WebModule://localhost/examples", "instance:tomcat-127.0.0.1-7199", "j2eeType:Servlet", "jmx_domain:Catalina", "name:RequestParamExample" ], "metric": "tomcat.servlet.error_count", "interval": 10, "device_name": null, "host": "xuxideMacBook-Pro.local", "points": [ [ 1478159460, 0 ] ], "type": "gauge" },
3,分析check_run数据包。check_run数据包的形式对应的是collectd的service_check,数据包部分数据以下:dom
"service_checks":[ { "status":2, "tags":[ "host:localhost", "port:8125" ], "timestamp":1478067233.459331, "check":"statsd.can_connect", "host_name":"wdm-ThinkPad-E450", "message":null, "id":1 }, { "status":2, "tags":[ "check:statsd" ], "timestamp":1478067233.460122, "check":"datadog.agent.check_status", "host_name":"wdm-ThinkPad-E450", "message":null, "id":2 },
这个数据包的两条记录中有个明显的不一样,一个是check,一个是tags,凡是checksd文件夹下服务都会产生一条记录,这条记录的check对应的值必定是"datadog.agent.check_status",tags中的value会指出检查的服务类型,只有一条记录。而一些有链接状态的服务会产生check的第二种的类型,例如这里的'statsd.can_connect',此时的tags数量不定,此处对于后台解析比较重要,要筛选出check是"datadog.agent.check_status"的记录。这里status(0,1,2,3)分别表示OK, WARNING, CRITICAL, UNKNOWNjvm
4,第四种包是event数据包,数据类型以下:ide
"events":{ "System":[ { "timestamp":1478067233.806147, "host":"wdm-ThinkPad-E450", "api_key":"e7afaf986f5cc822406cbd5831328462", "msg_text":"Version 5.9.1", "event_type":"Agent Startup" } ] },