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" } ] },