datadog后台一个会产生5种数据包,其中,collectd产生一个url为intake的包,包含指标,事件和服务检查以及一系列全局key-value。statsd会接受一种udp数据包,会发出三种http包,这三种http的url分别为series,intake和check_run.其中series为metric包,intake为事件检查包,check_run为服务检查包,这三种包内容来自对udp的重新解析,与collectd内容一致。
1,首先分析udp包,udp包的形式如下:
<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:
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的数量不一样。
{
"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,数据包部分数据如下:
"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, UNKNOWN
4,第四种包是event数据包,数据类型如下:
"events":{
"System":[
{
"timestamp":1478067233.806147,
"host":"wdm-ThinkPad-E450",
"api_key":"e7afaf986f5cc822406cbd5831328462",
"msg_text":"Version 5.9.1",
"event_type":"Agent Startup"
}
]
},