新监控系统技术选型

原有系统及问题

我们原有的监控体系出于稳定和可靠性考虑,采用 mysql 存储,再加 python 开发分析与报警逻辑。好处是技术成熟,灵活可控,少坑。随着业务发展,这套方案逐渐难以应付更加复杂、多样化的监控需求。
监控数据往往都带有时间戳,其实就是一种典型时间序列数据,而这方面已经有很多专门的存储系统,如 opentsdb,influxdb。相比 mysql 这样的传统数据库,这类系统在存储、查询上针对时间序列数据都做了特别的优化。当然对于需要复杂查询的报表类数据,mysql 也有它的优势。为了支持丰富的监控指标,我们希望找到更加合理的存储方案。
此外,监控系统存在失效问题,而且在保持监控系统足够简单的前提下,很难同时保证低误报(假阳性)与不漏报(假阴性)告警。结合业务特点,比较稳妥的方式是人工与自动化监控相结合。告警与展示数据同源,所有的告警指标都能在监控页面上反映出来,这样一方面人工能做交叉验证,另外一方面收到告警信息之后也能方便地查看相关数据。

需求

在系统选型前,有必要先梳理我们的需求:

  • 业务指标类数据,需要表格展示,一般只关心最新状态
  • 时间序列数据,按时间轴展开分析,如各种系统延时
  • 开源,易扩展,方便二次开发
  • 能够直观展示告警数据

技术框架选型

主流方案比较

Graphite

前几年开始流行的监控架构,由于其架构的开放性,软件生态相当丰富,每个主功能都能找到不同的替代品,其数据协议甚至已成为事实上的监控数据协议标准。但由于其低效的存储格式(见下文存储部分)及简陋的展示页面,给我们带来的潜在工作量可能更大。

TICK

TICK 是 influxdata 公司搞的一套开源监控软件栈 Telegraf, InfluxDB, Chronograf, Kapacitor 的缩写,分别与 Graphite 架构中的数据采集、存储、展示和告警模块对应,且与主流 Graphite 生态兼容。TICK 的核心在于 InfluxDB,一个高效且功能丰富的时间序列数据库;而 Chronnograf 与 Kapacitor 则相对没有那么惊艳;如果不考虑对 InfluxDB 的原生支持,Telegraf 也没有太突出的特点。

Prometheus

一套开箱即用型系统,但生态链并不如 Graphite 系完备,在存储、展示、二次开发等各方面也没有明显优势。

ELK

ELK 是Elasticsearch, LogStash, Kiban 这一套日志分析软件栈的缩写。可对任意数据字段索引,适合多维度的数据查询,因此在存储时间序列数据方面与 InfluxDB 相比会有额外的性能和存储开销。强大的功能都是有代价的,我们暂时无此类需求。

open-falcon

小米的开源监控系统,使用者较少,且采用微服务架构,理解及部署都略显复杂,不过文档中提到的一些运维经验还是值得借鉴的。

分模块选型

为了避免绑死在一条船上,我们希望监控系统能采用开放性的架构,各个部件可以根据业务需要、开源社区发展程度进行调整。一般来说监控系统都有如下五个功能模块,我们将分别讨论。

  • 收集
  • 存储
  • 展示
  • 告警
  • 分析

存储

首先最核心的是存储模块,数据的存储基本决定了展示和分析的形态。根据之前的运维经验,mysql 不是很适合大量的时间序列类数据的频繁写入存储,所以为了监控系统的方方面面,存储必须足够高效。其次,由于我们人手有限,不可能在一开始就大量投入开发时间,所以要求存储系统简单易用,且表达能力足够满足基本查询、分析需要。
influxdb 采用简洁而高效的 TSM 文件结构,查询语言基本与 sql 一致,而且用 go 语言实现的程序效率和易用性都挺有保障:)
<a name="graphite-cons"></a>另外一个选择是 graphite,但由于其存储格式是固定时间间隔都要占坑,对于稀疏数据非常浪费空间;且每个 metric 都对应于一个独立的文件,同时写入多个 metric 会产生很多零碎的文件 IO 操作,已经有不少关于这方面性能问题的吐槽。
所以我们最后选择了 influxdb 作为存储系统。

采集

采集这方面已经有很多成熟的项目,如 collectd/stats/diamond,大同小异。然而,telegraf 是 influxdata 的亲儿子,它支持 influxdb 特有的 key 与 field 格式。毫无悬念的,既然上了 influxdb 的船,那就用 telegraf 呗。当然对于业务系统数据,可能会考虑直接往 influxdb 发送数据;telegraf 只负责采集系统级别的监控数据。

展示

TICK 架构里的 Chronogra 作为展示模块,功能过于简单,无法满足需求。而另外一个成熟的 Grafana 项目,从 Graphite 时代就发展起来,拥有丰富的展示功能,强大而方便的可配置界面和插件系统,且可以批量创建管理展示配置,最关键的是与 influxdb 适配也非常成熟稳定(influxdata 的支持),让我们别无选择。

告警

监控系统的成败就在于能否恰当地告警了。Grafana 自带报警功能,报警内容能在图标上直观地展示,这样出报警时可以方便查看报警情况,同时也方便运营同学平时有事没事 double check,避免因报警渠道阻塞而造成故障不能及时处理。不过 Grafana 的报警功能比较简单,只支持简单的阈值检查,所以这里还需要我们实现一些辅助分析,把复杂的报警需求转化成可以做简单阈值检查的指标书数据。
虽然 TICK 架构包含了 Kapacitor 这一告警子系统,但它并不能直接支持展示,且使用的是自己的 dsl,虽然足够强大但表达能力毕竟还是受限,学习成本过高却没有解决我们的问题。

分析

暂无复杂需求,沿用现有系统。

最终架构

Telegraf + Influxdb + Grafana + 二次开发,如图所示。

+--------+    +--------+   +-------+
|Telegraf+-+-->Influxdb+--->Grafana|
+--------+ |  +-+---+--+   +---+---+
           |    |   ^  |       v
+--------+ |    |   |  |   +---+---+
|Services+-+    +---+  +-->+ Alarm |
+--------+     Analyze     +-------+

监控内容

  • 基础设施:硬件及操作系统
  • 基础软件
    • 服务存活:如 consul / airflow
    • 服务健康度:如 apahce / mysql
  • 业务系统
    • 服务存活及资源使用情况
    • 业务指标

坑(持续补充中)

influxdb

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

推荐阅读更多精彩内容