Skip to content

Instantly share code, notes, and snippets.

@leapar
Last active October 16, 2017 08:16
Show Gist options
  • Save leapar/7c141046be38d27e6fd78a5f05cc8f29 to your computer and use it in GitHub Desktop.
Save leapar/7c141046be38d27e6fd78a5f05cc8f29 to your computer and use it in GitHub Desktop.

influxdata 技术参数对比

所有预警都分4大块:

  1. 探针采集器
  2. 数据存储
  3. 预警
  4. 展示

influxdata开源4款产品influxdb,chronograf,telegraf,kapactor,经过阅读这四款产品源码,发现对整个行业贡献相当大同时对创业公司也是打击也是非常大。你一个团队,花上几百万,最后基于influxdata系列产品,可能在一个月时间赶超您的产品。 这时候我们需要对比调整产品技术线路以及产品功能方向: 我们的优势:

  1. 多用户平台
  2. 微服务架构、docker化
  3. 集大成,bosun、dd-agent、opentsdb、librenms每一个都是业内佼佼者

我们的劣势:

  1. 部署复杂
  2. 维护复杂
  3. 开发投入时间不足,无法长期保证产品先进性

结论:

  1. 如果继续做平台,我们这套架构体系只需要细节继续完善,功能继续开发,没有其他问题
  2. 如果是做内部部署的工具产品,果断采用influxdata产品线,基于它上面做业务需求开发
@leapar
Copy link
Author

leapar commented Sep 21, 2017

influxdb vs opentsdb

  1. 在单机部署上,InfluxDB 非常简单,一两分钟就可以成功运行,而 OpenTSDB 需要搭建 Hbase,创建 TSD 用到的数据表,配置 JAVA 环境等,部署维护相当复杂。
  2. 资源占用方面,InfluxDB 都要占据优势,cpu 消耗更小,磁盘占用更是小的惊人。
  3. 查询速度,由于测试样本数据量还不够大,速度都非常快,可以看到 InfluxDB 的查询在 10ms 这个数量级,而 OpenTSDB 则慢了接近 10 倍,第二次查询时,由于缓存的原因,OpenTSDB 的查询速度也相当快。
  4. 集群方面, InfluxDB 需要购买企业版本 ,而 OpenTSDB 基于 HBase,这一套集群方案已经被很多大公司采用,稳定运行。
  5. 维护hbase需要专人维护,反正我没学会。
  6. influxdb支持多个filed值,多个tag,opentsdb只支持一个value多个tag。
  7. influxdb跟rrdtool一样支持数据的生命周期。

总之:如果公司内部使用,不需要长时间保存历史指标数据,influxdb是不二选择,部署维护相当方便。opentsdb基于hbase这套使用大型平台,这个无可厚非,比较hbase下面的hdfs已经成熟好多年。

附上我修改的opentsdb源码以及知识点介绍,以证明上述比较不是瞎扯淡:
https://github.com/CretanCivil/opentsdb
https://gist.github.com/leapar/245f4f3440727244c833b8c298c711c0

@leapar
Copy link
Author

leapar commented Sep 21, 2017

预警模块对比

不需要对比,我们差的太远,当然目前bosun我已经接入,可以一较高下

 boltdbweb --db-name=/usr/local/var/kapacitor/kapacitor.db  --port=8389 --static-path=/Users/*****/go/src/github.com/evnix/boltdbweb/

1
2
3

java梁浩开发的预警系统

定时器任务调度=>查询tsdb=>rabbitmq=>推送、elasticsearch

bosun 看了好久,现在核心代码已经可以自由修改

  1. 每个规则编译,因为每个规则都定义了推送方式(mail,post,get),内容模板,数据源(opentsdb,influxdb,elasticsearh)
  2. 每个规则启动一个迁程,前程内部定时器
  3. 从数据源(opentsdb,influxdb,elasticsearh)读取数据,获得一些列序列化值
  4. 根据定义的运算表达式,乘除(+-*/max min mid等)计算出一个值
  5. 根据步骤4的值,跟自定义的阈值对比
  6. 如果是警告或者错误,那么执行用户定义的推送方式推送

kapacitor

这代码相当复杂,看了一整天还没有完全掌握,暂时无法修改核心代码

  1. 分task alert topic
  2. 用户定义的一个alert会归到一个topic下面cpu,system等,同时会归到task下面
  3. chronograf启用禁用删除alert操作的是task对象
  4. alert分stream跟batch
  5. 预警时候halder是推送方式,这个可以自己定义扩展,内置的已经相当丰富
  6. 主代码启动会注册一系列的service alert task 等等
  7. service内部如果需要存储的话都有自己的storage,用的是boltdb。就像java用hsql一样,简单内置。
  8. 每个预警一个迁程go runtime内部逻辑就复杂了,还没看懂,因为读取以后进行channel互相之间传递,达到阈值判断已经handler推送。

通过代码比较,kapacitor在开发时候参考了bosun等,因为是新生代,代码功底确实在bosun之上。
kapacitor这个模块一般公司开发者很难超越,该认怂就认怂。

@leapar
Copy link
Author

leapar commented Sep 23, 2017

结论

内部开发的这套系统

  1. 国际化做完
  2. 文档写全
  3. 部署线上演示的稳定版本
  4. 代码封存

influxdata

  1. 安排1~2个人,改一个精简版本,国际化,日本客户部署这套
  2. 定制api以及auth,方便集成到其他项目中,供管理员查看健康状况

zabbix

给点时间,安排人读zabbix源码,否则根本没有任何理由说服客户不用zabbix

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment