Datadog數據包分析

    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"
            }
        ]
    },
相關文章
相關標籤/搜索