datadog是個典型的類zabbix的agent,其主要數據流轉以下:java
數據類型有三種,一個是metric,一個是server_check,一個是event,分別存到指標數據庫,作服務狀態標記和事件報警用,但這裏面有些坑。數據庫
collectd的數據來源有兩個,一個是是checksd,一個是system指標。這裏的system指標採集格式很噁心,並非metrci格式,直接給個鍵值對,致使後端解析一次再丟到數據庫,給後端帶來壓力,這裏其實能夠將格式封裝同樣的。json
stastd是個udp server,jmxfetch用java封裝了個stasd的client,專門去抓jmx的數據。後端
jmxfetch被打成了個jar包,沒什麼好說的,這裏有個坑,安裝後權限被修改,或者localhost的域名被篡改了,這裏就沒數據了。datadog運行的時候會降權運行併發
forward是個tornado的轉發器,異步的方式,使得foraward自己能作內網代理,這個也是dataog支持內網代理的方式之一,forward最大特色一個是異步,一個是事務,每一個包啓動個事務,性能強悍。 異步
上圖缺個gohai,全部系統靜態指標,好比cpu核,ip等靜態信息都是gohai去獲取的,用go寫的個agent,被subprocess調用,返回個json,目前13版本的mac已經將這個移除,緣由是,,,吃cpu。tornado
不得不提,datadog對資源佔用很小,cpu佔用不到1%,內存不到150m。爲了避免佔用系統性能,collectd的一個關鍵點,特地用循環遍歷,不使用併發!性能