StatsD 是由 Etsy 开发并发布的汇总和总结应用指标的一个简单的守护进程,近些年来发展迅速,已经变成了一个用于收集应用性能指标的统一的协议。html
关于 Statsd 的使用已经有不少文章介绍过,因此本文也再也不赘述,本文主要来聊一聊它的来源原理以及和它相似的一个工具 Collectd 。前端
Etsy 工程师曾写 blog 介绍本身怎样使用 statsd 以及为何使用它,有时间能够看一看这篇文章 Measure Anything, Measure Everything 。python
Statsd 最初是由 Etsy 的 Erik Kastner 编写配合 Graphite/Carbon 使用的前端进程,最初是为了汇总和总结应用指标。开始使用的语言是 Node,后来其余语言也开发了此功能。它收集数据时基于2大功能:Counting & Timing。应用程序的指标经过特定语言的客户端库进行检测,而后这些库用很简单的协议和 Statsd 后台守护进程进行通讯,后台进程聚集指标并把他们传递到绘图软件或监控后台。git
Statsd 如和工做github
首先,你能够经过 Statsd 收集任何你想要的数据,例如 Gauges , Counters , Timing 和 Sets ,Statsd 客户端库经过发送 UDP 数据包来调用每一个 Statsd 服务器,使用 UPD 发送数据到 Stated 服务器的缘由很明显,快,UDP是断开链接的协议,数据包不须要确认就发送到收件人,不会像经过 TCP 或提交数据时因为 HTTP 协议而阻断。在调用时,Statsd 客户端库没有任何缓冲的数据,这样二者之间调用就很简单,若是有大数据量的操做时,能够选择在数据发送到 Statsd 时加入样本数据,即发送必定比例的数据。后端
Statsd 后台守护进程会监听全部应用库的 UDP 流量,经过时间流收集数据并在后台所需时间间隔内更新数据。例如聚合功能调用计时器能够每10秒收集一次数据,分析出这些数据的最大值,最小值,平均值,中间值,90值和95值,Statsd 后台守护进程和后端将根据所用的后端改变协议。监控后端把收集到的指标转化成图表,例如最经常使用的 Graphite,这个数据处理工具处理收集到的指标,做出突出偏离常态的曲线图,下图为 Graphite 处理先后的图表。服务器
Etsy 已开源 Statsd ,如下是基于基本线路协议发送的指标格式:并发
<metricname>:<value>|<type>
若是你在本地运行 StatsD 和默认的 UDP 服务器,可在命令行发送最简单的指标格式:运维
echo "foo:1|c" | nc -u -w0 127.0.0.1 8125
如今 Statsd 已经发展的很壮大,总结有如下几个缘由:工具
简单:很是容易获取应用程序,StatsD 协议是基于文本的,能够直接写入和读取
低耦合性:基于后台程序运行的应用程序,采起 UDP 这种发送后完了的协议,收集指标和应用程序自己之间没有依赖
占用空间小:StatsD 客户端很是轻便的,不带任何状态,不须要的线程,且添加能够忽略不计
广泛及支持多种语言: 有基于 Ruby,Python,Java,erlang,Node,Scala,Go,haskell 等几乎全部语言的客户端
开源且商用
Collectd 实际上是 C 语言开发的一个守护(daemon)进程,像 Statsd 同样它也作周期性收集统计数据,此外它还管数据存储,给各类存储方式提供不一样的存储机制,具体能够参考 Collectd 的官网 。
Collectd 不只仅是收集性能数据,还根据这些数据会周期性统计系统的相关信息,以这些统计信息为依准,检查当前服务器性能(如做为性能分析 performance analysis)和预测系统将来的 load(如能力部署 capacity planning),不过它自己并不能生成图形,虽然它能写 RRD 文件,可是它不能从这些文件生成图形,因此通常须要结合一个数据绘图工具 Graphite/Cacti 。像 VPSee 就是选用 Collectd 收集机器的各个性能参数。
相较于其余收集系统相关指标的工具,Collectd 有必定的优势,好比嵌入式系统,C 语言开发(高效)、无需系统 cron 支持(独立)、简单易用,此外他还包含有超过70多种插件以及文档支持。
Collectd 除了解析 configfile 其余一切都是在插件下完成,这意味着主守护进程没有任何外部依赖,如今已知的能够应用在 Linux,Solaris,Mac OS X上,AIX,FreeBSD,NetBSD 和 OpenBSD 等系统中。
Collectd 配置简单:除了那些须要加载的模块,你不须要配置其余任何东西。
Collectd 不是脚本,而是运行在内存里面的进程,不须要每次记录都启动繁重的解释器,有 nice 级别的 10 秒钟的默认解析。
Collectd 可以处理任意数量的主机,从一个到几千个,并且能够经过利用该资源尽量高效。
Collectd 支持 SNMP,该 SNMP 插件提供了一个通用接口 SNM 协议,能够用它来查询值,并基于 Collectd 机制处理他们,例如发送他们作其余地方的服务器实例。
Collectd 支持各类自定义扩展,C-plugins,Perl-plugins,Java-plugins,Python-plugins,UNIX 域套接字,Java 的 MBean 的支持等。
接下来简单介绍一下安装方法,安装配置 Colloectd,首先要建立一个 collectd.d
目录便于存放稍后会遇到的插件配置文件 graphite.conf
,并在 collectd.conf
包含这个目录 ;
$ sudo apt-get install collectd $ sudo mkdir /etc/collectd/collectd.d $ sudo vi /etc/collectd/collectd.conf ... Include "/etc/collectd/collectd.d"
安装 git 并下载 collectd-carbon 插件:
$ sudo apt-get install git $ sudo git clone https://github.com/indygreg/collectd-carbon.git /opt/collectd-plugins
修改插件的配置文件的 ModulePath 部分,指向 carbon_writer.py
文件所在目录,而且修改 LineReceiverHost 部分:
$ sudo vi /etc/collectd/collectd.d/graphite.conf <LoadPlugin "python"> Globals true </LoadPlugin> <Plugin "python"> # carbon_writer.py is at path /opt/collectd-plugins/carbon_writer.py ModulePath "/opt/collectd-plugins/" Import "carbon_writer" <Module "carbon_writer"> LineReceiverHost "monitor.vpsee.com" LineReceiverPort 2003 DifferentiateCountersOverTime true LowercaseMetricNames true TypesDB "/usr/share/collectd/types.db" </Module> </Plugin>
修改好配置文件后重启服务:
$ sudo /etc/init.d/collectd restart
好了,被监控的服务器已经安装好了 Collectd ,要想真正使用此外还须要安装绘图工具,具体怎么安装我也不详细介绍了,毕竟重点不是那个,如下是 Graphite 的相关连接:Graphite 和 Graphite Project,但愿对你有所帮助。
Cloud Insight 集监控、管理、计算、协做、可视化于一身,帮助全部 IT 公司,减小在系统监控上的人力和时间成本投入,让运维工做更加高效、简单。想阅读更多技术文章,请访问 OneAPM 官方技术博客。
本文转自 OneAPM 官方技术博客