netdata_prometheus_thanos_香蕉牛奶蛇皮走位的博客-程序员秘密

netdata_prometheus_thanos
一、需求
指标丰富:包括系统CPU、内存、网络、IO、以及常用组件性能采集

秒级粒度:能做到秒级采集一次信息,以及保留采集更小粒度的能力

数据保留时间长:对于采集的数据保留足够长的时间,以便于对比历史发现问题

查询快:查询指标时需要响应要足够快

占用资源小:采集及查询是占用资源需要尽可能小

具备扩容能力:对于越来越大的业务规模,需要有扩容能力,能够在一定规模增长下通过扩容保证性能数据采集稳定

二、解决方案
1、针对指标丰富及秒级粒度需求,使用netdata满足,关于netdata请移步 netdata ;

     存在的问题:使用netdata同时引出了netdata  数据不能持久化、意外停止数据丢失的问题

2、解决 netdata 问题 可以通过prometheus采集netdata数据解决,关系型数据库无法满足这么长时间的性能要求

      存在的问题:prometheus没有降采样,导致长时间查询存在查询慢甚至无法查询的问题,同时单机prometheus采集能力有限,不具备扩容能力,并且存在单点风险

3、解决prometheus长时间数据查询慢一般通过降采样解决,即将超过一定时间的数据合并、请平均、最大或最小值等保留下来,prometheus不具备降采样能力,需要通过thanos 降采样功能解决。

     对于单机prometheus无扩容能力、单点问题,有两种方案:

        a、使用prometheus联邦集群,总的逻辑为分治,即按业务、网络等划分可用区,每个可用区一个prometheus,一个中心prometheus用于获取每个可用区数据,架构如下图所示,具体可参考:https://prometheus.io/docs/prometheus/latest/federation/

在这里插入图片描述

        b、使用thanos,水平扩展prometheus节点,通过thanos query将多个prometheus节点数据去重,同时将prometheus抓取数据移到对象储存,以实现数据持久化,防止单点故障丢失数据等问题,具体架构如下图,具体可以参考:https://thanos.io/design.md/

在这里插入图片描述

                         ①:prometheus节点 + sidecar,一个prometheus节点对应一个 sidecar,prometheus负责采集数据,sidecar负责将prometheus采集的数据合并,上传到储存桶中,用于数据持久化及降采样,这部分可水平扩展

                         ②:thanos 查询器,负责代理prometheus查询语句执行,从Store或Sidecar查询,并将查询结果去重,查询方法与prometheus一致

                         ③:储存桶:一般是对象储存,也可以使用文件系统,可水平扩展,具体参考:https://thanos.io/storage.md/

                         ④:store:负责实现历史数据查询API,提供给查询器查询,也可以直接通过API接口查询数据,查询方法与prometheus一致





     prometheus联邦模式并没有解决长时间查询慢的问题,同时存在每个可用区prometheus挂掉丢失数据的单点故障风险,所以选择方案2,具体架构如下图:

thanos_arch.jpg

三、实施
1、netdata

     每台机器均需要安装netdata,资源消耗与采集指标与保留时间相关,目前默认为5s一次,1500个指标保留一天,内存消耗约100M,加上其他内存,内存消耗约在100~150M,netdata内存消耗线性,可按比例计算。

     具体请移步至 netdata

2、prometheus

    prometheus运行于216.204:/data/monitor_data/prometheus,设置block大小为2h,保留最近15天数据,每50台机器(每个机器约1500个指标)消耗 2G 内存。

    prometheus配置文件216.204:/data/monitor_data/prometheus/prometheus.yml,数据收集请移步 netdata数据收集

    cbas和rzzx的netdata数据,由于vlan不互通,每台机器开映射过于反锁,故通过nginx代理获取

    启动命令:./prometheus --storage.tsdb.min-block-duration=24h --storage.tsdb.max-block-duration=24h >> prometheus.log  2>&1 &

    storage.tsdb.min-block-duration 和 storage.tsdb.max-block-duration 为 prometheus存储块的大小,在使用thanos时,两者因一致,最小2h最大36h,可根据内存大小设置

3、thanos https://thanos.io/

    thanos运行于216.204:/data/monitor_data/thanos,主要分为三个部分:

    a、sidecar 主要提供prometheus查询代理,查询方法与prometheus一致,并负责把prometheus block合并并传到 Bucket中,以实现数据持久化及提供给降采样和store

        启动命令:./thanos sidecar --tsdb.path /data/monitor_data/prometheus/data --prometheus.url "http://localhost:9090" --http-address 0.0.0.0:19191 --grpc-address 0.0.0.0:19090 --objstore.config-file bucket_config.yaml --log.level=debug >> thanos_sidcar.log 2>&1 &

    b、store 主要提供存在Bucket中的数据查询,并提供查询接口,查询方法与prometheus一致

        启动命令:./thanos store --data-dir  /data/monitor_data/thanos/thanos-store --objstore.config-file bucket_config.yaml --http-address 0.0.0.0:19193 --grpc-address 0.0.0.0:19092 --log.level=debug >> thanos_store.log 2>&1 &

    c、query 主要提供从sidecar和store查询、去重

        启动命令:./thanos query --http-address 0.0.0.0:19192 --store 127.0.0.1:19090 --store 127.0.0.1:19092 --log.level=debug >> thanos_query.log 2>&1 &

    d、compact 主要对在Bucket中大于40h的数据进行5m降采样,和对大于14d的数据进行1h降采样

        启动命令:./thanos compact -w --data-dir /data/monitor_data/thanos/thanos-compact --retention.resolution-raw=16d --retention.resolution-5m=30d --retention.resolution-1h=366d --objstore.config-file bucket_config.yaml  --log.level=debug >> thanos_compact.log 2>&1 &

    e、tools bucket web

        启动命令:./thanos tools bucket web --objstore.config-file bucket_config.yaml

        在web中查看存储桶,无需常驻,默认端口10902,http://192.168.216.204:10902/

        清理脚本216.204:/root/shell/thanos_bucket_clean.py

        python thanos_bucket_clean.py -b 参数即为要删除最旧的block个数

        因wal回滚需要,建议剩余存储空间不小于100G,至少不少于5倍block大小

4、资源消耗

        存储空间:30s 粒度,压缩level3,500台机器 平均1.5k指标每台,20G;5m 粒度,压缩level3,500台机器 平均1.5k指标每台,8G;1h 粒度,压缩level4,500台机器 平均1.5k指标每台,预估2G

架构.jpg

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_38326500/article/details/109465417

智能推荐

JSON.toJSONString的jar包问题_weixin_33885253的博客-程序员秘密

toJSONString()方法的jar包不在json-lib中,简单点阿里巴巴给我们封装好的json包,也是开源的alibaba.fastjson.JSON,网上搜fastjson应该就有了。转载于:https://www.cnblogs.com/liuyun-10/p/6037591.html...

Tableau Server 测试环境安装配置_tableau配置_周粥粥ph的博客-程序员秘密

1、运维配置服务器2、安装tableau3、配置防火墙4、配置驱动5、验收测试

Java 数据库编程2---ResultSet接口,PreparedStatement接口,获取PreparedStatement中编译好的SQL语句_resultset 限制查询数量_蓝蓝223的博客-程序员秘密

使用SQL中的select语句可以查询出数据库的全部结果,在JDBC的操作中数据库的所有查询记录将使用ResultSet进行接收,并使用ResultSet显示内容。 注意:开发中要限制查询数量 在JDBC的查询操作中,因为是将数据库表中的全部查询结果保存在了ResultSet对象中,实际上也就是保存在了内存中,所以如果查询出来的数据总量太大,占满了内存,系统将会出现问题。 上一篇中的全部数据...

Win10系统更新(10586 -> 16299 or higer)_win10 16299 升级包_llhswwha的博客-程序员秘密

为了从uwp直接连接SQLServer,或者是使用EF core访问SQLite,都需要16299以上的版本,不然无法打开查看例子项目的xaml界面,无法部署程序。通过系统更新,一开始还能更新一些东西,后来卡住了。几次都不不行,找到一个能够跳过某些更新的官方插件,https://www.ithome.com/html/win10/174065.htm,将这个跳过了,结果说我

2个硬盘对拷操作图解步骤_硬盘对拷全部步骤_zhenzhen723的博客-程序员秘密

2个硬盘对拷操作图解步骤当我们的电脑使用太久,你会发现你的硬盘可存储空间已经不够了,并且运行速度也正在遭受着影响。为了保留原来的数据,进行2个硬盘对拷的尤为重要。如进行旧硬盘对拷新硬盘呢?2个硬盘对拷应该怎样来操作呢?下面我们就来根据简单的图解步骤学习一下2个硬盘对拷的方法。 下载免费的轻松备份专业版,安装并运行。这里以克隆磁盘0到磁盘1为例。第一步:在

利用TortoiseSVN建立本地SVN库_tortoisesvn 本地仓库_没有开花的树的博客-程序员秘密

Svn有很多常用功能,比如代码比较,回退,还原,归档等等,很多时候我们想使用到这些svn功能,但又不想大费周章建立服务端SVN库。其中,建立svn库主要有两种办法,一种就是装服务端版svn软件,另一种就是文章所讲的,利用TortoiseSVN建立本地SVN库。

随便推点

输入一个数,输出它的相反数_weixin_30834019的博客-程序员秘密

输入一个带符号的整数,得到它的相反数:例1:输入: 123 输出: 321例2:输入: -123 输出: -321例3:输入: 120 输出: 21public int reserve(int x){  int result = 0;  while(x!=0){    int tail = x % 10;    int newRes...

好程序员Java培训Java容器类List和Set分析_好程序员IT的博客-程序员秘密

好程序员Java培训Java容器类List和Set分析,容器类可以大大提高编程效率和编程能力,在Java2中,所有的容器都由SUN公司的Joshua Bloch进行了重新设计,丰富了容器类库的功能。Java2容器类类库的用途是“保存对象”,它分为两类,这两类如下:  Collection----一组独立的元素,通常这些元素都服从某种规则。List必须保持元素特定的顺序,而Set不能有重复元素。  Map----一组成对的“键值对”对象,即其元素是成对的对象,最典型的应用就是数据字典,并且还有其它广泛的应

Facebook页面受欢迎程度分析_clover_daisy的博客-程序员秘密

使用jupyder,sklearn,pandas,numpy,matplotlib等工具分析Facebook帖子的受欢迎程度与xxx特征的关系。

pycharm+selenium+chromedriver运行报错_杉木人的博客-程序员秘密

报错语句:driver = webdriver.Chrome()报错如下:'chromedriver' executable needs to be in PATH.'解决方案:方法一:直接将驱动exe文件放到python的scripts目录下方法二:1、代码中指定调用路径driver = webdriver.Chrome(executable...

linux下查看端口占用情况、查看所有tcp端口情况_linux tcp使用情况_liangshitian的博客-程序员秘密

1、linux下查看所有占用端口情况netstat -ntlp2、查看所有某个端口使用情况,如80端口。netstat -ntulp |grep 803、查看一台服务器上面哪些服务及端口。netstat -lanp4、查看一个服务有几个端口,比如要查看mysqld。ps -ef |grep mysqldnetstat命令各个参数说明如下:-a...

win10无限重启服务器,Win10 1909系统解决电脑无限重启的方法_小扁不扁的博客-程序员秘密

Win10 1909系统解决电脑无限重启的方法,最近有不少用户反映,自己的Win10系统电脑开机后突然提示将在一分钟后自动重启,该如何解决这个问题呢?其实我们可以进入Win10系统安全模式进行重置相关服务来解决,下面给大家详细介绍Win10系统电脑开机提示将在一分钟后自动重启的解决方法。原因解析:这种情况一般是因为系统文件损坏或者系统服务出错导致无法正常启动导致的,我们可以通过以下方法修复。首先因...

推荐文章

热门文章

相关标签