在资本市场不那么喜人的 2015 年融资 9450 万美元的 Datadog,在运维圈刮起了一阵小旋风。作为国外很值得学习的一款平台监控产品,公司人数不足 100 的 Datadog 为什么吸引了投资人的目光?我们先来了解一下他们的 Agent。

本文系国内 ITOM 行业领军企业 OneAPM 工程师翻译整理自文章 What is the Datadog Agent, What Resources does it Consume?,原作者 Dustin Lawler。

简介

Data dog Agent 是运行在你主机上的一款轻量级软件。它的作用就是忠心耿耿地为你收集事件和性能指标,传到 Datadog 中,以便你利用这些监控和运行数据来做点什么。

点击此处获得 Datadog Agent 的源代码。

Datadog Agent的架构

Data dog Agent 主要由四个用 Python 编写的组件构成,每个组件都是单独运行的进程。

  • Collector(agent.py)-- Collector 会检查当前运行机器的集成环境,抓取系统性能指标,如内存和 CPU 数据。
  • Dogstatsd(dogstatsd.py)-- 这是 StatsD 的后台服务器,它致力于收集从你代码中发送出去的本地性能指标。
  • Forwarder(ddagent.py)-- Forwarder 负责把 Dogstatsd 和 Collector 收集到的数据推到一个队列中,这些数据将会被发往 Datadog。
  • SupervisorD -- 由一个单独的管理进程控制。我们把它与其他组件分隔开来,因此如果你担心资源消耗而不想运行所有组件的话(虽然我们建议你这么做),可以单独运行它。

学习如何在现有基础上,扩展 agent 的检查内容,或者编写自己的一套版本,请点击此处

Datadog Agent消耗的资源

Datadog Agent的资源消耗大致如下:

  • 常驻内存:50MB
  • CPU时间:平均小于1%
  • 硬盘空间:
    Linux:120MB
    Windows:60MB
  • 带宽占用:每分钟 10-50 KB

上述数据是基于一个运行了十多天的 EC2 m1.large 实例。

监控、权限和网络端口

Supervisors 作为一个主控根进程运行,可以 fork 所有的子进程为user dd-agent,其配置文件在/etc/dd-agent/datadog.conf/etc/dd-agent/conf.d下可以找到。所有的配置对 dd-agent 来说都必须可读。推荐使用权限 0600,因为配置文件中包含你的 API key,以及其它访问性能指标(如 mysql,postgresql metrics)所需的证书。

以下端口对一般操作开放:

  • 为一般操作提供的 forwarder tcp/17123 端口和启用了 graphite 服务时的 tcp/17124端口
  • dogstatsd udp/8125

在 3.4.1 或以上版本中,所有监听进程都默认绑定 127.0.0.1 和 / 或者 ::1。而早期版本中,他们则绑定至 0.0.0.0 (例如所有的接口)。

关于如何通过代理运行agent,请戳这里;关于允许的范围,请看这里

Collector

这是收集所有标准性能指标的地方,每十五秒收集一次。
Collector 也支持运行基于 python 的用户定义的检查内容。这些内容应存储于/etc/dd-agent/checks.d下。用户定义的检查内容必须从抽象类 AgentCheck 继承,这个类定义在 checks/init.py中。

Forwarder

Forwarder 监听并缓存传入的HTTP请求,接着通过 HTTPS 转发到 Datadog 中心。缓存请求使得网络可以一分为二,不影响性能指标的上报。性能指标将被缓存在内存中,直到达到必须发送的大小或数目才会被发送。接着,最老的性能数据包就会被丢弃,以确保 forwarder 有足够的存储空间。

DogStatsD

DogStatsD 是用 python 实现的 esty statsD 性能指标整合进程,用于通过UDP协议接收和积累任意的性能指标,这样我们就可以度量自定义代码,而不会增加延迟。

关于dgostatsd的更多信息请看这里

Agent的优点

想要了解使用 Datadog agent 究竟有什么好处,可以参考下面的两篇文章:

再说几句

Dustin Lawler 关于 Datadog Agent 的原理的讲解思路清晰。Datadog 本身在国外拥有 Facebook、Airbnb 等重量级客户,被业界极力看好。而国内一些大公司的运维人员往往只知道 Zabbix 等开源产品,对 StatsD 系监控产品的了解比较少。而 StatsD 作为新世代的系统监控的核心,目前还处于技术累计过程。越来越多的开源项目加入到它的怀抱中,也有越来越多的公司,在此基础之上加入了研发的资源,或者在与之相关的其他领域中投入成本。

国内也有一款像 Datadog 一样基于 StatsD,提供一体化监控解决方案的产品 Cloud Insight,能够监控大规模集群、云主机、Docker 容器,支持多种操作系统、数据库、中间件等,在数据采集、计算和展现的基础上,还拥有跨部门事件流展现、报警等功能,是一款 DevOps+ChatOps 理念的产品。

有关 StatsD 和 Cloud Insight 的更多内容,可以参考以下文章:

本文转自 OneAPM 官方博客

Datadog Agent是啥?它消耗什么资源?的更多相关文章

  1. List接口的实现类(Vector)(与ArrayList相似,区别是Vector是重量级的组件,使用使消耗的资源比较多。)

      LinkedList提供以下方法:(ArrayList无此类方法) addFirst();    removeFirst();   addLast();   removeLast(); 在堆栈中, ...

  2. List接口的实现类与ArrayList相似,区别是Vector是重量级的组件,使用使消耗的资源比较多

    List接口的实现类(Vector)(与ArrayList相似,区别是Vector是重量级的组件,使用使消耗的资源比较多.) 结论:在考虑并发的情况下用Vector(保证线程的安全). 在不考虑并发的 ...

  3. sql server 性能调优之 CPU消耗最大资源分析1 (自sqlserver服务启动以后)

    一. 概述 上次在介绍性能调优中讲到了I/O的开销查看及维护,这次介绍CPU的开销及维护, 在调优方面是可以从多个维度去发现问题如I/O,CPU,  内存,锁等,不管从哪个维度去解决,都能达到调优的效 ...

  4. 连接postgres特别消耗cpu资源而引发的PostgreSQL性能优化考虑

    由于是开发阶段,所以并没有配置postgres的参数,都是使用安装时的默认配置,以前运行也不见得有什么不正常,可是前几天我的cpu资源占用突然升高.查看进程,发现有一个postgres的进程占用CPU ...

  5. oracle查询消耗服务器资源SQL语句

    1.查找最近一天内,最消耗CPU的SQL语句 SELECT ASH.INST_ID, ASH.SQL_ID, (SELECT VS.SQL_TEXT FROM GV$SQLAREA VS WHERE ...

  6. exec sp_executesql 比直接执行SQL慢,而且消耗大量资源问题

    今天SqlServer数据库出现了访问不通的情况,抓紧重启了下服务,让大家先恢复使用,然后我开了 SQL Server Profiler 看看是不是存在性能问题SQL,然后就发现一批这样的SQL,看r ...

  7. php GD库快速消耗CPU资源漏洞 CVE-2018-5711测试

    漏洞说明: 用一张GIF图片就可导致服务器发生崩溃直至宕机,在现实中非常容易利用. 影响版本: PHP 5 < 5.6.33 PHP 7.0 < 7.0.27 PHP 7.1 < 7 ...

  8. sql server 性能调优之 逻辑内存消耗最大资源分析1 (自sqlserver服务启动以后)

    一.概述 IO 内存是sql server最重要的资源,数据从磁盘加载到内存,再从内存中缓存,输出到应用端,在sql server 内存初探中有介绍.在明白了sqlserver内存原理后,就能更好的分 ...

  9. linux ps 按进程消耗内存资源大小排序

    linux ps 关于sort的解释 --sort spec specify sorting order. Sorting syntax is [+|-]key[,[+|-]key[,...]] Ch ...

随机推荐

  1. hihocoder 1186

    1186 : Coordinates 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 Give you two integers P and Q. Let all div ...

  2. 【MINA】OrderedThreadPoolExecutor和UnorderedThreadPoolExecutor的事件监听线程池的选择

    mina中有两个线程池概念 1.处理监听建立连接的线程池  2.处理读写事件的线程池 本文中主要探讨读写事件的线程池的选择 这两种都经过实际项目的使用和检测,说说优缺点 早期的项目是用Unordere ...

  3. oracle中的exists 和not exists 用法 in与exists语句的效率问题

    博文来源(oracle中的exists 和not exists 用法):http://chenshuai365-163-com.iteye.com/blog/1003247 博文来源(  in与exi ...

  4. C#中常用修饰符

    1.存取修饰符 public:(公有的)存取不受限制 protected:(受保护的)只有包含该成员的类以及派生类可以存取  private:(私有的)只有包含该成员的类可以使用 2.类修饰符 abs ...

  5. 2) LINQ编程技术内幕--yield return

    yield return 使用.NET的状态机生成器 yield return关键词组自动实现IDisposable,使用这个可枚举的地方, 还存在一个隐含的try finally块. 示例代码: c ...

  6. JavaScript学习笔记(2)——JavaScript和DOM的关系

    文档对象模型(Document Object Model,简称DOM),是W3C组织推荐的处理可扩展标志语言的标准编程接口.DOM实际上是以面向对象方式描述的文档模型.DOM定义了表示和修改文档所需的 ...

  7. Android笔记之adb命令解析1

    要在cmd命令中直接使用adb,需要配置环境变量:目录XXX\sdk\platform-tools 查看adb -help 帮助命令打印出以下内容: Android Debug Bridge vers ...

  8. Mysql 的函数

    函数 MySQL函数分为系统函数与自定义函数 系统函数: pow(m,n)        求m的n次方 rand()            随机获取0至1之间的小数 floor();          ...

  9. 2.2_线性表的顺序存储结构_参考集合ArrayList

    [线性表的顺序存储从结构] 指的是用一段连续的存储单元一次储存线性表的数据元素. [线性表的顺序存储的结构代码 C语言版] #define MAXSIZE 20 /*存储空间初始分配量*/ typed ...

  10. Codevs 1684 垃圾陷阱

    1684 垃圾陷阱 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题目描述 Description 卡门--农夫约翰极其珍视的一条Holsteins奶牛--已经落了 ...