首先说明,这里所说的 Druid 并不是阿里巴巴的数据库连接池项目,而是 Eric Tschetter 创立的一个开源的分布式实时处理系统,希望为烧钱的大数据处理,提供一种更廉价的选择。为了解决查询延迟问题,使用 Hadoop 来实现交互式查询分析很难满足实时分析的需要。而 Druid 提供了以交互方式访问数据的能力,并权衡了查询的灵活性而采取了特殊的存储格式。
作为一个用于大数据实时查询和分析的高容错、高性能开源分布式系统,Druid 能够快速处理大规模的数据,并实现快速查询和分析。即使发生代码部署、机器故障以及其他产品系统遇到宕机等情况时,Druid 仍能够保持 100% 正常运行。
目前 Druid 应用最多场景是广告分析,包括互联网广告系统监控、度量和网络监控。并且 eBay 也已经计划将 Druid 用于生产环境中。
而时刻关注新技术的OneAPM 也试图对 Druid 的指标进行展示。
Cloud Insight 根据StatsD 进行了修改,形成了 Cloud Insight SDK,可以方便用户上传自定义指标至 Cloud Insight,目前支持的数据类型有,Counters 和 Gauges, 语言仅支持 Python。
使用 SDK 前先确保自己安装了 Cloud Insight Agent,并且 Agent 处于运行的状态。
由于被监控的机器处于内网环境下,并不能与外网通讯。所以为了使用 Cloud Insight,需要部署一台主节点来接收其他机器的数据,并将数据发送至 Cloud Insight 后端。简要的配置方法如下:
sudo sh install_agent.sh
/etc/oneapm-ci-agent/oneapm-ci-agent.conf
,添加 proxy 配置 好了,搞定这一切之后,就只需要使用 pip
来安装 SDK 了。
pip install -i http://pypi.oneapm.com/simple --upgrade oneapm-ci-sdk
Cloud Insight SDK 共有 Counters 和 Gauges 两种数据类型,下面结合Druid 脚本来对数据类型做一些说明。
由于用户的代码跟使用的服务比较相关,在此就不提供代码了,可以看下面示例简单了解一下。Druid 监控示例脚本如下:
# coding: utf8 from oneapm_ci_sdk import statsd # 发送标准数据,即数值是float, int类型的数据 # statsd.gauge(metric, value, tags=None, sample_rate=1) statsd.gauge('yaiba.test_gauge', 130.4, tags='yaiba_gauge') # 增加数据的值 # statsd.increment(metric, value=1, tags=None, sample_rate=1) statsd.increment('yaiba.test_inc') # +1 statsd.increment('yaiba.test_inc', 100, 'whatever', 0.7) # 增加100,采样比例是 70% # 减少数据的值 # statsd.decrement(metric, value=1, tags=None, sample_rate=1) # ------------- # 以上数据都是立刻发送给探针 # 批量发送 # statsd.open_buffer(max_buffer_size=50) # statsd.close_buffer() statsd.open_buffer() statsd.gauge('yaiba.test_gauge', 13.4, tags='yaiba_gauge') statsd.gauge('yaiba.test_gauge', 10.4, tags='yaiba_gauge') statsd.gauge('yaiba.test_gauge', 130.4, tags='yaiba_gauge') statsd.close_buffer() # Or with statsd as batch: statsd.gauge('yaiba.test_gauge', 13.4, tags='yaiba_gauge') statsd.gauge('yaiba.test_gauge', 10.4, tags='yaiba_gauge') statsd.gauge('yaiba.test_gauge', 130.4, tags='yaiba_gauge')
Counters 是 StatsD 和 Cloud Insight SDK 最基本的一种数据类型。当调用 increment
和 decrement
时,对参数进行自增或自减。如:
statsd.increment('yaiba.test_inc')
是将 yaiba.test_inc
这个指标的数值自增 1
。 increment
方法可以包含 4 个参数: metric_name
、 stepping
、 metric_tags
、 sample_rate
。如:
statsd.increment('yaiba.test_inc', 100, 'whatever', 0.7)
是将 yaiba.test_inc
这个指标的数值自增 100
,并且标签信息为 whatever
,而采样率为 0.7.
Cloud Insight SDK 通过 sample_rate
参数来设置采样率。假设 sample_rate=0.1
:
在采集周期 30 s 内,只采集 10% 的数据。也就是说,调用了 10 次 increment,只自增了一次 Metric。
在数据量较大的情况下,可以确保采样的高效。
statsd.increment('page.views', sample_rate=0.1)
采样率会传递至 Agent,所以最终发送的数值,为计算采样率后的真实数值。 同样,decrement 和 increment 一样,使用相同的参数。
statsd.decrement('some.other.event') # Decrease the counter by 5, 15% sample. statsd.decrement('some.third.event', 5, rate=0.15)
Gauges 是连续型的数据类型,也就是说,当我们第一次赋值后,该 Metric 表现在图表上,会是一条于 X 轴平行的直线;直到再次为该 Metric 赋了一个不同的值。
Gauges 可以用来度量一些已经计算过的数值,如 WebSockets 的有效链接数;而系统目前登录的用户数,则在每次用户登录时,调用 Counters 中的 increment 比较适合。
Gauges 支持 4 个参数,分别是 metric_name
、 metric_value
、 metric_tags
和 sample_rate
,如:
statsd.gauge('yaiba.test_gauge', 13.4, tags='yaiba_gauge')
是将 13.4
赋值给 yaiba.test_gauge
这个指标,并添加了 yaiba_gauge
这个标签信息。
最后上两张 Druid 的监控效果截图。首先在平台页面,您可以直接查询自定义的一些指标,和它的数值。
然后,使用自定义仪表盘,根据自己的业务来自建展现形式。
总体来说,Cloud Insight Agent 的可配置项目很多。所以就算是在内网环境下使用,也没有问题。而 Cloud Insight SDK 也存在大量的注释,使用起来也不会有什么麻烦。数据类型也比较简单。
Cloud Insight 集监控、管理、计算、协作、可视化于一身,帮助所有 IT 公司,减少在系统监控上的人力和时间成本投入,让运维工作更加高效、简单。本文由OneAPM 工程师翻译整理,想阅读更多技术文章,请访问 OneAPM官方技术博客。