聊聊 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 , TimingSets ,Statsd 客户端库通过发送 UDP 数据包来调用每个 Statsd 服务器,使用 UPD 发送数据到 Stated 服务器的原因很明显,快,UDP是断开连接的协议,数据包不需要确认就发送到收件人,不会像通过 TCP 或提交数据时由于 HTTP 协议而阻断。在调用时,Statsd 客户端库没有任何缓冲的数据,这样两者之间调用就很简单,如果有大数据量的操作时,可以选择在数据发送到 Statsd 时加入样本数据,即发送一定比例的数据。

Statsd 后台守护进程会监听所有应用库的 UDP 流量,通过时间流收集数据并在后台所需时间间隔内更新数据。例如聚合功能调用计时器可以每10秒收集一次数据,分析出这些数据的最大值,最小值,平均值,中间值,90值和95值,Statsd 后台守护进程和后端将根据所用的后端改变协议。监控后端把收集到的指标转化成图表,例如最常用的 Graphite,这个数据处理工具处理收集到的指标,作出突出偏离常态的曲线图,下图为 Graphite 处理前后的图表。

聊聊 Statsd 和 Collectd 那点事!

聊聊 Statsd 和 Collectd 那点事!

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 的相关链接:GraphiteGraphite Project,希望对你有所帮助。

Cloud Insight 集监控、管理、计算、协作、可视化于一身,帮助所有 IT 公司,减少在系统监控上的人力和时间成本投入,让运维工作更加高效、简单。想阅读更多技术文章,请访问 OneAPM 官方技术博客

本文转自 OneAPM 官方技术博客

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,542评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,596评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,021评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,682评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,792评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,985评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,107评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,845评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,299评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,612评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,747评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,441评论 4 333
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,072评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,828评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,069评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,545评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,658评论 2 350

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,637评论 18 139
  • 在互联网业务蒸蒸日上的今时今日,系统架构日渐复杂,随着软件产品和工程团队的变革,许多开源的监控工具应运而生,其中有...
    OneAPM_Official阅读 2,433评论 1 10
  • 从三月份找实习到现在,面了一些公司,挂了不少,但最终还是拿到小米、百度、阿里、京东、新浪、CVTE、乐视家的研发岗...
    时芥蓝阅读 42,218评论 11 349
  • 11.1 引言 UDP是一个简单的面向数据报的运输层协议:进程的每个输出操作都正好产生一个UDP数据报,并组装成一...
    张芳涛阅读 2,799评论 1 6
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,848评论 25 707