聊聊 Statsd 和 Collectd 那点事!
StatsD 是由 Etsy 开发并发布的汇总和总结应用指标的一个简单的守护进程,近些年来发展迅速,已经变成了一个用于收集应用性能指标的统一的协议。
关于 Statsd 的使用已经有很多文章介绍过,所以本文也不再赘述,本文主要来聊一聊它的来源原理以及和它类似的一个工具 Collectd 。
Etsy 使用 Statsd 监控系统应用
Etsy 工程师曾写 blog 介绍自己怎样使用 statsd 以及为什么使用它,有时间可以看一看这篇文章 Measure Anything, Measure Everything 。
Statsd 最初是由 Etsy 的 Erik Kastner 编写配合 Graphite/Carbon 使用的前端进程,最初是为了汇总和总结应用指标。开始使用的语言是 Node,后来其他语言也开发了此功能。它收集数据时基于2大功能:Counting & Timing。应用程序的指标通过特定语言的客户端库进行检测,然后这些库用很简单的协议和 Statsd 后台守护进程进行通信,后台进程汇集指标并把他们传递到绘图软件或监控后台。
Statsd 如和工作
首先,你可以通过 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
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 官方技术博客
聊聊 Statsd 和 Collectd 那点事!的更多相关文章
- 聊聊.netcore采坑那一些事之系统时间and文件路径
聊聊.netcore采坑那一些事之系统时间and文件路径 Hi,小伙伴大家好,最近工作比较忙,很久没有和大家分享点东西了.这个周末都加了两天班.公司的新项目都是采用.netcore来开发,在开发过程中 ...
- 聊聊java工程师换工作那些事
最近有个读者在苦恼一件事,那就是有大公司在挖他,他要不要从所在的小公司,跳槽到大公司,前提是两家公司的待遇基本一致.由这个问题结合自己多年的工作经验,来谈谈java工程师要不要跳槽,何时跳槽,怎么跳槽 ...
- 聊聊Java 虚拟机的“那点事”
本文的使用方法: 这篇文章是一个总结性质的文章,是我在看完<深入理解 Java 虚拟机>后写的(里面可能会有些不准确的地方,欢迎大家指出),本文从头读到尾就是一个虚拟机大部分知识点的框架, ...
- 聊聊IOC中依赖注入那些事 (Dependency inject)
What is Dependency injection 依赖注入定义为组件之间依赖关系由容器在运行期决定,形象的说即由容器动态的将某个依赖关系注入到组件之中在面向对象编程中,我们经常处理的问题就是解 ...
- #研发解决方案介绍#基于StatsD+Graphite的智能监控解决方案
郑昀 基于李丹和刘奎的文档 创建于2014/12/5 关键词:监控.dashboard.PHP.graphite.statsd.whisper.carbon.grafana.influxdb.Pyth ...
- 拿到offer过后--大学最后时光最想做的那十件事
昨天--2014.10.26,历史性的一刻,激动的签了欢聚时代(YY)的前端开发offer,工作地点是我喜欢的珠海(仅仅由于那边有我所向往的海还有自行车队,如今想想都乐开怀了,绕着海边骑单车的感觉真妙 ...
- 等不及要告诉你的一件事-console.log可以指定样式
今天看`简书`文章,习惯性的打开了开发者工具,于是发现了意见有意思的事,在console面板,发现了如下的日志: ??? 这 ... 有点意思. 如果上面的图片,不能引起你的兴趣,那么你可以再看看这个 ...
- Linux 小知识翻译 - 「端口限制」
上次说了端口号相关的内容,这次聊聊「端口限制」的事. 经常看到关于安全的书籍上会说「不要开放多余的端口」,那么,如何限制端口才好呢? 实际,端口限制的方法大体上分的话有2种. 其一,「通过应用程序来处 ...
- [Android Pro] 开发一流Android SDK
cp from : https://blog.csdn.net/dd864140130/article/details/53558011 本篇文章已授权微信公众号 guolin_blog (郭霖)独家 ...
随机推荐
- 求关注 wcf bindipendpointdelegate 端口限制的功能
我最近也需要实现一个功能:1)一个客户端(192.168.0.15),10个服务端(提供A接口.B接口)如下: 192.168.0.1-5685 192.168.0.2-5685 ...
- jqgrid项目使用记录/注释版/未整理/
jqgrid项目使用笔记function loadActData(){ $("#actGridTable").clearGridData();//首先清空表格内容 var url ...
- ZooKeeper - 状态信息 Stat 的属性说明
运行%ZK_HOME%/bin目录下的zkCli.sh(zkCli.cmd),使用get命令可以获取指定ZNode的数据内容和属性信息.例如: [zk: localhost:2181(CONNECTE ...
- casperjs 抓取爱奇艺高清视频
CasperJS 是一个开源的导航脚本和测试工具,使用 JavaScript 基于 PhantomJS 编写,用于测试 Web 应用功能,Phantom JS是一个服务器端的 JavaScript A ...
- Windows下 Scala开发环境搭建
1.配置jdk:可看这里 2.下载scala,并安装 3.配置scala环境变量,把scala的安装路径加入path内 ps:验证是否安装正确:cmd->输入scala,如果出现scala环境, ...
- [04] SQL语句优化之索引
1.索引的概念 根据书的目录可以知道内容所在的页码,不用一页一页翻书,可直接通过页码找到内容.数据库的索引类似于书本的目录,索引指向内容存储位置,可直接定位到内容而不必扫描整张表,减少了磁盘的I/O次 ...
- Ext.Net 布局
Ext.Net 布局 Panel布局类有10种:容器布局,自适应布局,折叠布局,卡片式布局,锚点布局,绝对位置布局,表单布局,列布局,表格布局,边框布局 1,Ext.layout.Cont ...
- 数据库E-R模型,数据字典
概述:实体-联系模型(简称E-R模型) 模型结构: E-R模型的构成成分是实体集.属性和联系集,其表示方法如下: (1) 实体集用矩形框表示,矩形框内写上实体名. (2) 实体的属性用椭圆框表示,框内 ...
- 关于css中的align-content属性详解
align-content 作用: 会设置自由盒内部各个项目在垂直方向排列方式. 条件:必须对父元素设置自由盒属性display:flex;,并且设置排列方式为横向排列flex-direction:r ...
- android体系架构
android体系架构总结: android体系架构分为四层 第一层:应用层:applications 第二层:开发层 第三层: