datadog是个典型的类zabbix的agent,其主要数据流转如下:
数据类型有三种,一个是metric,一个是server_check,一个是event,分别存到指标数据库,做服务状态标记和事件报警用,但这里面有些坑。
collectd的数据来源有两个,一个是是checksd,一个是system指标。这里的system指标采集格式很恶心,并不是metrci格式,直接给个键值对,导致后端解析一次再丢到数据库,给后端带来压力,这里其实可以将格式封装一样的。
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。
不得不提,datadog对资源占用很小,cpu占用不到1%,内存不到150m。为了不占用系统性能,collectd的一个关键点,特意用循环遍历,不使用并发!