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的一个关键点,特地用循环遍历,不使用并发!性能