想实时采集约 2000 台服务器的系统运行时快照,当中间件或应用出问题的时候能翻采集记录排查,大家有啥思路吗?

2021-02-09 11:23:32 +08:00
 zhoudaiyu

抓取的信息有 CPU 、内存、IO 、进(线)程、网络连接情况,还可能有一些中间件的特有的指标,大概 1s 抓取一次。我的思路是部署 agent 到每台机器做采集工作(目前试过用 go 调用 shell 去抓取,然后再把 shell 的 stdout 做解析和整合),将整个后结果推到 Kafka,再用 kafka-xx-connetor 或者类似的东西把 kafka 的数据同步到 ES 、mongo 或者 mysql 里。请问大家觉得我这个思路怎么样?还有就是有啥更好想法吗?包括抓取指标的维度、抓取方式、数据转移链路,存储后端等等方面。

2933 次点击
所在节点    程序员
24 条回复
Aumujun
2021-02-09 11:27:39 +08:00
你需要的应该是“ZABBIX”这种东西
cslive
2021-02-09 11:29:40 +08:00
日志都单独挂载在一个一盘里,然后将日志扔到 hadoop 里吧
Qetesh
2021-02-09 11:30:19 +08:00
同意楼上,感觉楼主要的是监控吧
主机监控和 apm 监控
zhoudaiyu
2021-02-09 11:38:07 +08:00
@Aumujun
@Qetesh Zabbix 我了解,我们用的 Falcon-Agent,这个 falcon 都是以分钟为单位上报数据的,有时候 cpu 尖峰就是几秒的事情,感觉 falcon 时间尺度不够使
zhoudaiyu
2021-02-09 11:38:28 +08:00
@cslive 也是要有这个 agent 吧
eason1874
2021-02-09 11:41:08 +08:00
我搞新东西,自己没经验就会找大厂产品研究下。

看看腾讯云、阿里云那些 agent 脚本,看看网站的控制台面板,看看云监控自定义上报功能,就能猜到他们怎么设计的吧。
ElmerZhang
2021-02-09 11:50:40 +08:00
本机打日志然后 fluentd 之类的收集一下就好了。
通用指标可以试试 dstat
zhoudaiyu
2021-02-09 11:57:52 +08:00
@eason1874 好主意老哥,我这就去看看
@ElmerZhang dstat 这个很不错啊,多谢多谢
defunct9
2021-02-09 15:29:47 +08:00
prometheus
DoctorCat
2021-02-09 15:32:17 +08:00
prometheus
jlwrp
2021-02-09 15:35:42 +08:00
ELk
wzwwzw
2021-02-09 18:10:57 +08:00
prometheus
pc10201
2021-02-09 20:41:20 +08:00
有一个软件叫 atop,不过推荐一分钟采集一次
xuzhzzz
2021-02-09 21:27:35 +08:00
别乱想方案,找开源的行吗
CallMeReznov
2021-02-09 21:38:17 +08:00
zabbix 自己调整下取值的间隔,你想 1 秒取一次都可以!
Lemeng
2021-02-09 21:48:08 +08:00
看看也想了解了解
AnyISalIn
2021-02-09 22:19:13 +08:00
Prometheus, Zabbix 之类的方案都行,就是抓取周期为 1s 频率太高,这里的难点在于你的数据要存储多久。

Zabbix 的问题在于后端 数据通过 MySQL 存储,数据库是一个很大的瓶颈,横向扩展只能通过类似 Sharding 的方案来做。
Prometheus 支持的插件比较多,大部分中间件都能覆盖,而且 TSDB 的性能很强劲,性能应该不是问题,但集群方案得借助第三方方案类似 Thanos, Cortex 来解决,并且对内存的要求很高 (默认 2 小时内的数据都放在内存里,如果 1s 一次采集,数据量太大了),如果要做的话,你这种需求可能要用 hasmod + thanos 才能搞定。

ELK (MetricBit) 的方案也是可以的,扩展性很强,但是你这种时间粒度和规模的要求,索引会很大,并且 Elasticsearch 本身的维护成本也很高。

主要的难点不是 2000 台机器,同样是 2000 台机器,15/30 秒抓取一次 1s 的抓取频率,会让数据规模翻几十倍。
akira
2021-02-09 23:09:38 +08:00
1s 一次,这个有点夸张了啊。。
1 分钟一次外面现成的方案挺多的
victor97
2021-02-10 08:04:32 +08:00
本地一秒钟抓一次,传可以一分钟传一次。另外也可以只传一分钟内的最大值,最小值和平均值。
sampeng
2021-02-10 09:42:03 +08:00
没有任何监控有需要 1 秒监控一次的……头一次做监控的时候总是这么想,我需要 2 秒监控一次。本质上监控是统计问题,没有真正的所谓这个时间点性能怎么样。都是通过多个采样点计算出大致的。只要采样点足够多就是可信的。1 秒和一分钟的区别仅仅是精读差别,甚至可以说汇出图出来没有任何指导价值…因为抖动可能大得吓人。而抖动又没有价值

比如说流量,一秒飙到 100Mb 很正常,持续一分钟也很正常,只有持续 10 分钟可能不正常。所以一秒间隔采样点没价值。浪费性能

再比如抖动最多的内存,java 虚拟机内部先把内存分走了,下一秒就回收掉了。

监控只有看持续才会有有问题。瞬间点没任何指导价值

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/752561

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX