thanos prometheus 的高可用、长期存储二进制部署

1.简介

http://thanos.io/

thanos 是具有长期存储功能的开源、高可用性 Prometheus的集群组件。

  • 全局查询视图
    跨多个 Prometheus 服务器和集群查询指标

  • 无限保留
    使用对象存储扩展系统,不限时间保留指标。

  • Prometheus兼容
    兼容 Prometheus api,用于grafana

  • 降低采样以及块压缩
    在查询大时间范围或配置复杂的保留策略时,对历史数据进行降低采样以提高查询速度。

降低采样如何做:
正常情况下,每分钟一个数据点(指标样本)
为超过40 小时(2d)的块创建 5m 采样
为超过10 天(2w)的块创建 1h 采样

使得我们在大跨度时间内查询时,能够在不获取过多样本的情况下,保持查询的精度。

2. 架构

2.1 以sidecar方式部署

在这里插入图片描述

sidecar将TSDB块上传到对象存储,因为Prometheus每两小时生成一次。

2.2 以Receive方式部署

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-l9GEi5uc-1681254793143)(assets/image-20230411165407-zjvmxta.png)]

使用Remote Write会增加Prometheus的内存占用。大多数情况内存使用量会增加约25%,也取决于指标数据的类型及大小,对于WAL中每个时序,远程 写入代码缓存序列ID到标签值的映射,大量序列将显著增加内存使用量。

2.3 基础组件

  • Query: 实现了 Prometheus API,对外提供与 Prometheus 一致的查询接口
  • Sidecar: 用于连接 Prometheus,提供 Query 查询接口、也可以上报数据
  • Store Gateway:访问放在对象存储的指标数据
  • Compact: 压缩采样、清理对象存储中的数据
  • Receive: 接收 Prometheus Remote Write 的数据,将其上传到云存储
  • Ruler:配置和管理告警规则,以进行展示和上传
  • query frontend:实现prometheus的v1 API代理到它到查询,同时缓存响应和可选的天分割

2. 部署

2.1 二进制部署

2.1.1 prometheus 配置

https://prometheus.io/docs/prometheus/latest/getting_started/

下载 prometheus-2.37.0.linux-amd64.tar.gz
上传解压到
/root/thanos/prometheus-2.37.0.linux-amd64

cd /root/thanos/
mv prometheus-2.37.0.linux-amd64 prometheus
cd /root/thanos/prometheus
cat <<EOF >prometheus.yml
global:
  scrape_interval: 15s
  external_labels:
    monitor: 'prom01'
scrape_configs:
  - job_name: 'node-exporter'
    scrape_interval: 5s
    static_configs:
      - targets:
        - 10.55.1.13:9100
        - 10.55.1.25:9100
EOF
 ./prometheus \
  --storage.tsdb.max-block-duration=2h \
  --storage.tsdb.min-block-duration=2h \
  --web.enable-lifecycle \
  --web.enable-admin-api \
  --config.file=prometheus.yml \
  --web.listen-address="0.0.0.0:9091" &> prometheus.log &
 
  • –web.enable-admin-api标志以支持 sidecar 从 Prometheus 获取元数据,如external_labels 。
  • –web.enable-lifecycle 则启用该标志,prometheus 允许通过 POST /-/reload 重新加载配置,可以使用sidecar配置重新加载功能(–reload.*标志)
  • –storage.tsdb.min-block-duration和–storage.tsdb.max-block-duration值必须设置相等以禁用本地压缩,推荐使用默认值2h。便于 sidecar上传数据到存储桶。

2.1.2 node-exporter

./node_exporter
        --collector.textfile.directory=/tmp/node-exporter/
        --collector.tcpstat
        --collector.processes
        --collector.systemd
        --collector.supervisord

2.1.3 minio

https://docs.min.io/minio/baremetal/quickstart/linux.html#quickstart-for-linux
MinIO 是一种高性能对象存储解决方案,原生支持 Kubernetes 部署。MinIO 提供与 Amazon Web Services S3 兼容的 API,并支持所有核心 S3 功能。
下载当前版本 minio version RELEASE.2022-08-08T18-34-09Z
上传到目录 /root/thanos/minio

chmod +x minio
cd /root/thanos/minio
MINIO_ROOT_USER=minio MINIO_ROOT_PASSWORD=12345678 ./minio server ./data --address :9095 --console-address :9096 &

2.1.4 sidecar

https://thanos.io/tip/components/sidecar.md/
需要与 prometheus 部署到同一台主机上共享数据目录。

下载 当前版本 thanos, version 0.27.0
https://github.com/thanos-io/thanos/tags

cd /root/thanos
tar xf thanos-0.27.0.linux-amd64.tar.gz
mv thanos-0.27.0.linux-amd64 thanos

2.1.5 对象存储配置

https://thanos.io/tip/thanos/storage.md/

cd /root/thanos/thanos
cat <<EOF > bucket.yml
type: S3
config:
  bucket: "thanos"
  endpoint: "192.168.171.129:9095"
  region: ""
  aws_sdk_auth: false
  access_key: "thanos"
  insecure: true
  signature_version2: false
  secret_key: "12345678"
  put_user_metadata: {}
EOF

cd /root/thanos/thanos
./thanos sidecar --grpc-address=0.0.0.0:10901 --http-address=0.0.0.0:10902 --tsdb.path=/root/thanos/prometheus/data/ --objstore.config-file=bucket.yml --prometheus.url=http://localhost:9091/

2.1.6 Store Gateway 存储网关

–data-dir 用于指定本地的缓存目录,缓存索引数据。

cd /root/thanos/thanos
./thanos store \
    --data-dir  ./store \
    --objstore.config-file bucket.yml \
    --grpc-address 0.0.0.0:19093 \
    --http-address 0.0.0.0:19094

2.1.7 Querier/Query 查询器

cd /root/thanos/thanos
./thanos query \
    --http-address 0.0.0.0:19095 \
    --grpc-address 0.0.0.0:19096 \
    --store       127.0.0.1:10901 \
    --store       127.0.0.1:19093

2.1.8 query-frontend 查询前端

运行查询前端的示例命令:

https://thanos.io/tip/components/query-frontend.md/#query-frontend
该thanos query-frontend命令实现了一个可以放在 Thanos Queriers 前面的服务,以改进读取路径。它基于Cortex 查询前端组件,因此您可以找到一些常见的功能,例如Splitting和Results Caching。

查询前端是完全无状态和水平可扩展的。

thanos query-frontend \
    --http-address     "0.0.0.0:9090" \
    --query-frontend.downstream-url="<thanos-querier>:<querier-http-port>"

注意:目前只有范围查询(/api/v1/query_range API 调用)实际上是通过查询前端处理的。所有其他 API 调用只是直接转到下游查询器,这意味着只有范围查询被拆分和缓存。但我们也计划支持即时查询。

2.1.9 Compactor 压缩器

compactor 是一个不参与 Thanos 集群的单实例进程。它只指向一个对象存储桶,并不断地将多个较小的块合并为较大的块。显着减少了存储桶中的总存储大小、存储节点上的负载以及从存储桶中获取查询数据所需的请求数。

压缩器还进行额外的批处理,例如降低采样和应用保留策略。

./thanos compact \
    --data-dir ./compact \
    --objstore.config-file bucket.yml \
    --http-address 0.0.0.0:19097 \
    --wait

数据保留时间设置

  • –retention.resolution-raw=0d
  • –retention.resolution-5m=0d
  • –retention.resolution-1h=0d

compactor 不在查询或数据备份的关键路径上。它可以作为定期批处理作业运行,也可以保持运行以始终尽快压缩数据。建议提供 100-300GB 的本地磁盘空间用于数据处理。

访问:
http://192.168.171.129:19095

2.1.10 grafana

tar xf grafana-enterprise-8.5.6.linux-amd64.tar.gz  -C /data/
cd /data/
mv grafana-8.5.6/ grafana
cd /data/grafana
./bin/grafana-server web &> grafana.log &

https://starsl.cn/article/8919.html

2.1.11 多个prometheus 进行聚合

cd /root/thanos/
mv prometheus-2.37.0.linux-amd64 prometheus02
cd /root/thanos/prometheus02
cat <<EOF >prometheus.yml
global:
  scrape_interval: 15s
  external_labels:
    monitor: 'prom02'
scrape_configs:
  - job_name: 'node-exporter'
    scrape_interval: 5s
    static_configs:
      - targets:
        - 10.55.1.31:9100
        - 10.55.1.4:9100
EOF

运行(后台运行,修改了端口)

cd /root/thanos/prometheus02
./prometheus \
  --storage.tsdb.max-block-duration=2h \
  --storage.tsdb.min-block-duration=2h \
  --web.enable-lifecycle \
  --web.enable-admin-api \
  --config.file=prometheus.yml \
  --web.listen-address="0.0.0.0:9092"  &> prometheus.log  &

再启动一个对应的 sidecar,使用相同的bucket.yml

mkdir /root/thanos/sidecar02
cd /root/thanos/sidecar02
cp ../thanos/thanos .
cp ../thanos/bucket.yml  .
./thanos sidecar \
--grpc-address=0.0.0.0:10908 \
--http-address=0.0.0.0:10909 \
--tsdb.path=/root/thanos/prometheus02/data/ \
--objstore.config-file=bucket.yml \
--prometheus.url=http://localhost:9092/ &

把新启动的 sidecar 加入 query

cd /root/thanos/thanos
./thanos query \
    --http-address 0.0.0.0:19095 \
    --grpc-address 0.0.0.0:19096 \
    --store       127.0.0.1:10901 \
    --store       127.0.0.1:19093 \
    --store       127.0.0.1:10908

访问:
http://192.168.171.129:19095

2.1.12 sidecar 高阶配置

  • –shipper.upload-compacted 在启动时同步 Prometheus 本地存储中的所有较旧的现有块。

  • –reloader.rule-dir=DIR_NAME 自动触发prometheus重新加载配置 (需要prometheus启用–web.enable-lifecycle)

cd /root/thanos/sidecar02
./thanos sidecar \
--grpc-address=0.0.0.0:10908 \
--http-address=0.0.0.0:10909 \
--tsdb.path=/root/thanos/prometheus02/data/ \
--objstore.config-file=bucket.yml \
--reloader.rule-dir=/root/thanos/prometheus02/rules \
--reloader.rule-dir=/root/thanos/prometheus02/prometheus.yml \
--reloader.watch-interval=1m \
--prometheus.url=http://localhost:9092/ &>./sidecar.log &

–reloader.config-file=CONFIG_FILE ,以 $(VARIABLE) 格式替换其中的环境变量,并在 --reloader.config-envsubst-file=OUT_CONFIG_FILE 文件中输出生成的配置。

生成配置文件
cd /root/thanos/prometheus02/
cp prometheus.yml prometheus_env.yml
修改 prometheus_env.yml 中 monitor: ‘$(ENV)’

cd /root/thanos/sidecar02
ENV=prom02 ./thanos sidecar \
--grpc-address=0.0.0.0:10908 \
--http-address=0.0.0.0:10909 \
--tsdb.path=/root/thanos/prometheus02/data/ \
--objstore.config-file=bucket.yml \
--reloader.rule-dir=/root/thanos/prometheus02/rules \
--reloader.rule-dir=/root/thanos/prometheus02/prometheus.yml \
--reloader.watch-interval=1m \
--reloader.config-file=/root/thanos/prometheus02/prometheus_env.yml \
--reloader.config-envsubst-file=/root/thanos/prometheus02/prometheus.yml \
--prometheus.url=http://localhost:9092/ &>./sidecar.log &

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-IUNLdcS7-1681254793144)(assets/image-20230411181539-woz5whd.png)]

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/9243.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

FPGA时序知识点(基本方法总结就两点:1.降低时钟频率2.减小组合逻辑延迟(针对Setup Slack公式来的)

1.我们说的所有时序分析都是建立在同步电路的基础上的&#xff0c;异步电路不能做时序分析&#xff08;或者说只能做伪路径约束&#xff08;在设伪路径之前单bit就打拍&#xff0c;多bit就异步fifo拉到目的时钟域来&#xff09;&#xff09;。——FPGA 设计中寄存器全部使用一个…

Spring的事务

(1) 事务的定义 事务就是用户定义的一系列数据库操作&#xff0c;这些操作可以视为一个完成的逻辑处理工作单元&#xff0c;要么全部执行&#xff0c;要么全部不执行&#xff0c;是不可分割的工作单元。 (2)事务的使用&#xff1a; begin transaction commit rollback. begin …

谈谈软件系统重构

「头条关注【Java思享汇】&#xff0c;面试、各种技术栈、架构设计持续更新中&#xff5e;」 分享初衷&#xff1a;工作几年之后基本都会经历过大大小小的系统重构&#xff0c;笔者经历过单体应用拆分微服务的系统重构&#xff0c;数据异构&#xff0c;业务系统重构。借助此次…

总结819

学习目标&#xff1a; 4月&#xff08;复习完高数18讲内容&#xff0c;背诵21篇短文&#xff0c;熟词僻义300词基础词&#xff09; 第二周&#xff1a; 学习内容&#xff1a; 暴力英语&#xff1a;早上背诵《think different》记150词&#xff0c;默写了两篇文章&#xff0c…

Java中的Iterator底层原理实现

两个抽象方法 Iterator主要有两个抽象方法&#xff0c;让子类实现。 hasNext()用来判断还有没有数据可供访问。next()方法用于访问集合的下一个数据。 这两个方法不像List的get()那样依赖索引获取数据&#xff0c;也不像Queue的poll方法那样依赖特定规则获取数据。 迭代器的…

3月更新 | Visual Studio Code Python

我们很高兴地宣布&#xff0c;2023年3月版 Visual Studio Code Python 和 Jupyter 扩展现已推出&#xff01; 此版本包括以下改进&#xff1a; 后退按钮和取消功能添加到创建环境命令默认情况下&#xff0c;Python 扩展不再附带 isortJupyter 笔记本中内核选择的改进Python P…

代码随想录Day49

今天继续学习动规解决完全背包问题。 322.零钱兑换 给你一个整数数组 coins &#xff0c;表示不同面额的硬币&#xff1b;以及一个整数 amount &#xff0c;表示总金额。 计算并返回可以凑成总金额所需的最少的硬币个数 。如果没有任何一种硬币组合能组成总金额&#xff0c;…

java 线段树

线段树是一种二叉搜索树&#xff0c;什么叫做二叉搜索树&#xff0c;首先满足二叉树&#xff0c;每个结点度小于等于二&#xff0c;即每个结点最多有两颗子树&#xff0c;何为搜索&#xff0c;我们要知道&#xff0c;线段树的每个结点都存储了一个区间&#xff0c;也可以理解成…

【JavaWeb】8—过滤器

⭐⭐⭐⭐⭐⭐ Github主页&#x1f449;https://github.com/A-BigTree 笔记链接&#x1f449;https://github.com/A-BigTree/Code_Learning ⭐⭐⭐⭐⭐⭐ 如果可以&#xff0c;麻烦各位看官顺手点个star~&#x1f60a; 如果文章对你有所帮助&#xff0c;可以点赞&#x1f44d;…

C语言中宏的一些高级用法举例

C语言中宏的一些高级用法 文章目录C语言中宏的一些高级用法1.字符串化2.标记的拼接3.宏的嵌套替换多条语句防止头文件被重复包含宏的可变参数应用方式1方式2方式34.常用宏宏和函数的区别1.字符串化 #include <stdio.h> #include <stdbool.h> #include <string.…

测试开发常问面试题

Postman Postman实现接口关联 步骤 通过正则表达式或则JSON提取器取值的方式&#xff0c;提取需要的参数。将参数设置为全局变量或则环境变量。在之后接口中&#xff0c;通过{{全局变量/环境变量}}代替要替换的参数值。 - JSON提取器方式 var jsonData JSON.parse(respons…

【Spring6】数据校验:Validation

10、数据校验&#xff1a;Validation 10.1、Spring Validation概述 在开发中&#xff0c;我们经常遇到参数校验的需求&#xff0c;比如用户注册的时候&#xff0c;要校验用户名不能为空、用户名长度不超过20个字符、手机号是合法的手机号格式等等。如果使用普通方式&#xff0c…

TenserRT(三)PYTORCH 转 ONNX 详解

第三章&#xff1a;PyTorch 转 ONNX 详解 — mmdeploy 0.12.0 文档 torch.onnx — PyTorch 2.0 documentation torch.onnx.export 细解 计算图导出方法 TorchScript是一种序列化和优化PyTorch模型的格式&#xff0c;将torch.nn.Module模型转换为TorchScript的torch.jit.Scr…

unicloud 模糊查询解决方案

序 1、where和aggregate的模糊搜索 2、第一种是“你好”去匹配“你好啊大家” 3、第二种是“家啊”去匹配“啊&#xff01;你家呢” 只要有1个字匹配就匹配 4、第三种是“家啊”去匹配“啊&#xff01;你家呢” 必须有“家”又有“啊”才匹配” 想看效果&#xff0c;大家可以自…

ROBOGUIDE教程:FANUC机器人摆焊焊接功能介绍与虚拟仿真操作方法

目录 摆焊功能简介 摆焊指令介绍 摆焊功能设置 摆焊条件设置 机器人摆焊示教编程 仿真运行 摆焊功能简介 使用FANCU机器人进行弧焊焊接时&#xff0c;也可以实现摆动焊接&#xff08;简称摆焊&#xff09;。 摆焊功能是在机器人弧焊焊接时&#xff0c;焊枪面对焊接方向…

面试字节,三面HR天坑,想不到自己也会阴沟里翻船....

阎王易见&#xff0c;小鬼难缠。我一直相信这个世界上好人居多&#xff0c;但是也没想到自己也会在阴沟里翻船。我感觉自己被字节跳动的HR坑了。 在这里&#xff0c;我只想告诫大家&#xff0c;offer一定要拿到自己的手里才是真的&#xff0c;口头offer都是不牢靠的&#xff0…

【CE】Mac下的CE教程Tutorial:进阶篇(第8关:多级指针)

▒ 目录 ▒&#x1f6eb; 导读开发环境1️⃣ 第8关&#xff1a;多级指针翻译操作验证其它方案&#x1f6ec; 文章小结&#x1f4d6; 参考资料&#x1f6eb; 导读 开发环境 版本号描述文章日期2023-03-操作系统MacOS Big Sur 11.5Cheat Engine7.4.3 1️⃣ 第8关&#xff1a;多…

MySQL数据库中的函数怎样使用?

函数 是指一段可以直接被另一段程序调用的程序或代码。 也就意味着&#xff0c;这一段程序或代码在MySQL中已经给我们提供了&#xff0c;我们要做的就是在合适的业务场景调用对应的函数完成对应的业务需求即可。 那么&#xff0c;函数到底在哪儿使用呢? 我们先来看两个场景&a…

【FPGA-Spirit_V2】基于FPGA的循迹小车-小精灵V2开发板

&#x1f389;欢迎来到FPGA专栏~基于FPGA的循迹小车 ☆* o(≧▽≦)o *☆嗨~我是小夏与酒&#x1f379; ✨博客主页&#xff1a;小夏与酒的博客 &#x1f388;该系列文章专栏&#xff1a;FPGA学习之旅 文章作者技术和水平有限&#xff0c;如果文中出现错误&#xff0c;希望大家能…

Android下载apk并安装apk(用于软件版本升级用途)

软件版本更新是每个应用必不可少的功能&#xff0c;基本实现方案是请求服务器最新的版本号与本地的版本号对比&#xff0c;有新版本则下载apk并执行安装。请求服务器版本号与本地对比很容易&#xff0c;本文就不过多讲解&#xff0c;主要讲解下载apk到安装apk的内容。 一、所需…