35.1 thanos项目介绍和二进制部署

news2024/12/13 0:45:31

本节重点介绍 :

  • 核心优点
    • 无需维护存储,存储高可用: 利用廉价的公有云对象存储,高可用
    • 长时间存储,数据降采样:利用Compactor降采样
    • 完全适配原生prometheus查询接口:Query实现
    • 多级数据缓存配置
  • 二进制部署

thanos简介

  • 项目地址
  • 文档地址

组件简介

  • Sidecar:连接到 Prometheus,读取其数据进行查询和/或将其上传到云存储。
  • Store Gateway:在云存储桶内提供指标
  • Compactor:对存储在云存储桶中的数据进行压缩、下采样和 清理过期数据
  • Receiver: 从 Prometheus 的WAL接收远程写入数据,将其公开和/或将其上传到云存储
  • Ruler/Rule: 针对Thanos 中的数据 进行告警或预聚合工作,进行展示和/或上传
  • Querier/Query: 实现 Prometheus 的 v1 API 来聚合来自底层组件的数据
  • Query Frontend:实现 Prometheus 的 v1 API,将其代理到 Query,同时缓存响应并按查询日进行可选拆分

架构图

  • sidecar形式部署
    在这里插入图片描述

  • receiver形式部署
    在这里插入图片描述

核心优点

  • 无需维护存储,存储高可用: 利用廉价的公有云对象存储,高可用
  • 长时间存储,数据降采样:利用Compactor降采样
  • 完全适配原生prometheus查询接口:Query实现
  • 多级数据缓存配置

部署thanos

  • 下载 thanos
wget https://github.com/thanos-io/thanos/releases/download/v0.22.0/thanos-0.22.0.linux-amd64.tar.gz

步骤1 部署prometheus

关闭Prometheus采集器的本地数据压实

  • 使用sidecar模式时,需要关闭Prometheus采集器的本地数据压实
  • 对应参数为
    • –storage.tsdb.min-block-duration=2h
    • –storage.tsdb.max-block-duration=2h

sidecar启动的时候也会check

  • 对应请求的是 prometheus的 /api/v1/status/flags接口获取其启动的命令行参数
  • 检查 storage.tsdb.min-block-duration是否设置是2h
  • 如果参数配置错误sidecar启动失败

准备prometheus 数据目录等

prometheus需要设置external_label

  • 原因如下:https://thanos.io/tip/thanos/storage.md/#external-labels
global:
  external_labels:
    role: p_for_thanos

准备prometheus service 文件

cat <<EOF >/etc/systemd/system/prometheus_for_thanos.service
[Unit]
Description="prometheus"
Documentation=https://prometheus.io/
After=network.target

[Service]
Type=simple
ExecStart=/opt/app/prometheus_for_thanos/prometheus  --config.file=/opt/app/prometheus_for_thanos/prometheus.yml --storage.tsdb.path=/opt/app/prometheus_for_thanos/data --web.enable-lifecycle --storage.tsdb.min-block-duration=2h  --storage.tsdb.max-block-duration=2h   --web.listen-address=0.0.0.0:7090

Restart=on-failure
RestartSecs=5s
SuccessExitStatus=0
LimitNOFILE=655360
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=prometheus_for_thanos


[Install]
WantedBy=multi-user.target
EOF

systemctl daemon-reload
systemctl restart prometheus_for_thanos

步骤2 部署thanos-sidecar

使用本地存储测试充当对象存储

  • 准备目录和bucket配置文件
mkdir -pv /opt/app/thanos/data
cat <<EOF > /opt/app/thanos/local_filesystem_bucket.yml
type: FILESYSTEM
config:
  directory: /opt/app/thanos/data
EOF
  • 将thanos二进制拷贝到/opt/app/thanos/下

准service文件

  • –tsdb.path 代表prometheus的data存储目录
  • –prometheus.url 代表prometheus的 地址
  • –objstore.config-file 指定使用哪个对象存储配置文件
  • –grpc-address 指定grpc listen 的地址 默认 10901
  • –http-address 指定http listen 的地址 默认 10902
cat <<EOF> /etc/systemd/system/thanos_sidecar.service
[Unit]
Description="thanos_sidecar"
Documentation=https://prometheus.io/
After=network.target

[Service]
Type=simple
ExecStart=/opt/app/thanos/thanos sidecar --tsdb.path=/opt/app/prometheus_for_thanos/data/ --prometheus.url=http://localhost:7090   --objstore.config-file=/opt/app/thanos/local_filesystem_bucket.yml


Restart=on-failure
RestartSecs=5s
SuccessExitStatus=0
LimitNOFILE=65536
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=thanos_sidecar


[Install]
WantedBy=multi-user.target
EOF

systemctl daemon-reload
systemctl restart thanos_sidecar

检查 本地对象存储目录

[root@k8s-master01 data]# du -sh /opt/app/prometheus/data 
289M	/opt/app/prometheus/data
[root@k8s-master01 data]# du -sh /opt/app/thanos/data
263M	/opt/app/thanos/data
[root@k8s-master01 data]# 

上传旧指标 --shipper.upload-compacted

  • 当 sidecar 使用该–shipper.upload-compacted标志运行时
  • 它将在启动时同步来自 Prometheus 本地存储的所有旧的现有块
  • 注意:这假设您从未针对此存储桶运行带有块上传的 sidecar
  • 否则需要手动步骤从存储桶中删除重叠的块。这些将由 sidecar 验证过程建议。
  • 第一次开启后可以看看到sidercar本地数据量和prometheus本地数据量差不多

步骤3 部署thanos-store

准备service文件

  • –data-dir=/var/thanos/store 代表缓存对象存储中的block元信息和索引的目录,不需要设置很大
  • –objstore.config-file=/opt/app/thanos/local_filesystem_bucket.yml 代表使用哪个对象存储配置
  • –grpc-address=0.0.0.0:10903 因为跟sidecar部署在一台机器上所以 在10901上地址即可
  • –http-address=0.0.0.0:10904
cat  <<EOF > /etc/systemd/system/thanos_store.service
[Unit]
Description="thanos_store"
Documentation=https://prometheus.io/
After=network.target

[Service]
Type=simple
ExecStart=/opt/app/thanos/thanos store --data-dir=/var/thanos/store --objstore.config-file=/opt/app/thanos/local_filesystem_bucket.yml  --grpc-address=0.0.0.0:10903    --http-address=0.0.0.0:10904 

Restart=on-failure
RestartSecs=5s
SuccessExitStatus=0
LimitNOFILE=65536
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=thanos_store


[Install]
WantedBy=multi-user.target
EOF

systemctl daemon-reload
systemctl restart thanos_store

步骤4 部署thanos-compactor

准备service文件

cat  <<EOF > /etc/systemd/system/thanos_compact.service
[Unit]
Description="thanos_compact"
Documentation=https://prometheus.io/
After=network.target

[Service]
Type=simple
ExecStart=/opt/app/thanos/thanos compact --data-dir=/var/thanos/compact --objstore.config-file=/opt/app/thanos/local_filesystem_bucket.yml  --http-address=0.0.0.0:10905      --wait
Restart=on-failure
RestartSecs=5s
SuccessExitStatus=0
LimitNOFILE=65536
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=thanos_compact


[Install]
WantedBy=multi-user.target
EOF

systemctl daemon-reload
systemctl restart thanos_compact

步骤5 部署thanos-query

准备service文件

  • –grpc-address=0.0.0.0:10907
  • –http-address=0.0.0.0:10908
  • –store=localhost:10901 代表将sidecar 的grpc加入进来
  • –store=localhost:10903 代表将store 的grpc加入进来
cat  <<EOF > /etc/systemd/system/thanos_query.service
[Unit]
Description="thanos_query"
Documentation=https://thanos.io/
After=network.target

[Service]
Type=simple
ExecStart=/opt/app/thanos/thanos  query  --grpc-address=0.0.0.0:10907  --http-address=0.0.0.0:10908 --store=localhost:10901 --store=localhost:10903

Restart=on-failure
RestartSecs=5s
SuccessExitStatus=0
LimitNOFILE=65536
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=thanos_query


[Install]
WantedBy=multi-user.target
EOF

systemctl daemon-reload
systemctl restart thanos_query

  • 访问页面 http://localhost:10908/
  • 可以使用promql进行查询

配置grafana 数据源 查看图

步骤6 部署thanos-rule

准备service文件

  • –data-dir=/opt/app/thanos/rule/data 代表预聚合的结果写入的tsdb目录
  • –eval-interval 代表全局执行周期
  • –rule-file=/opt/app/thanos/rule/rule*.yaml 代表预聚合和告警配置文件
  • –alert.query-url=http://172.20.70.215:10908 代表external-url
  • –alertmanagers.url 代表alertmanager的地址
  • –query 代表查询接口,可以配置多个
  • –objstore.config-file=/opt/app/thanos/local_filesystem_bucket.yml代表 预聚合后上传到这个对象存储
cat  <<EOF > /etc/systemd/system/thanos_rule.service
[Unit]
Description="thanos_rule"
Documentation=https://thanos.io/
After=network.target

[Service]
Type=simple
ExecStart=/opt/app/thanos/thanos  rule  --grpc-address=0.0.0.0:10909  --http-address=0.0.0.0:10910 --data-dir=/opt/app/thanos/rule/data --rule-file=/opt/app/thanos/rule/rule*.yaml  --alertmanagers.url=localhost:9093 --query=localhost:10908 --objstore.config-file=/opt/app/thanos/local_filesystem_bucket.yml --alert.query-url=http://172.20.70.215:10908

Restart=on-failure
RestartSecs=5s
SuccessExitStatus=0
LimitNOFILE=65536
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=thanos_rule


[Install]
WantedBy=multi-user.target
EOF

systemctl daemon-reload
systemctl restart thanos_rule

  • 访问页面 http://localhost:10910/
  • 查看rule

配置grafana 数据源 查看图

本节重点总结 :

  • 核心优点
    • 无需维护存储,存储高可用: 利用廉价的公有云对象存储,高可用
    • 长时间存储,数据降采样:利用Compactor降采样
    • 完全适配原生prometheus查询接口:Query实现
    • 多级数据缓存配置
  • 二进制部署

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【PlantUML系列】状态图(六)

一、状态图的组成部分 状态&#xff1a;对象在其生命周期内可能处于的条件或情形&#xff0c;使用 state "State Name" as Statename 表示。初始状态&#xff1a;表示对象生命周期的开始&#xff0c;使用 [*] 表示。最终状态&#xff1a;表示对象生命周期的结束&…

Android 15(V)新功能适配,雕琢移动细节之美

Android 15&#xff0c;内部代号为Vanilla Ice Cream&#xff0c;是Android移动操作系统的最新主要版本&#xff0c;于2024年2月16日在开发者预览版1中发布。Android 15源代码于 2024年9月4日发布。Android 15稳定版于2024年10月15日发布。 以下是针对 Android 15&#xff08;…

【零成本抽象】基本概念与在C++中的实现

零成本抽象概念是由 Bjarne Stroustrup 提出的,他在 1994 年的著作中就有相关设想,2016 年其在 C++ 大会登台演讲时,明确阐述了 C++ 中的 “零成本抽象” 这一理念。 一、零成本抽象概念 Bjarne Stroustrup提出的零成本抽象概念,是指在编程中使用高级抽象机制时,不会产生…

android编译assets集成某文件太大更新导致git仓库变大

不知道大家有没有类似的困扰&#xff0c;你的工程assets文件过大&#xff0c;我曾经在某度车机地图团队工作过一段时间时候&#xff0c;每次发包会集成一个上百MB的文件。工作一段时间你的git仓库将会增加特别多。最后&#xff0c;你会发现你如果重新git clone这个仓库会非常大…

F5-TTS文本语音合成模型的使用和接口封装

F5-TTS文本语音生成模型 1. F5-TTS的简介 2024年10月8日&#xff0c;上海交通大学团队发布&#xff0c;F5-TTS (A Fairytaler that Fakes Fluent and Faithful Speech with Flow Matching) 是一款基于扩散Transformer和ConvNeXt V2的文本转语音 (TTS) 模型。F5-TTS旨在生成流…

克隆选择算法复现

克隆选择算法复现 基于克隆选择算法求解0 - 1背包问题的代码复现文档一、背景和意义&#xff08;一&#xff09;背景&#xff08;二&#xff09;意义 二、算法原理&#xff08;一&#xff09;克隆选择算法基础&#xff08;二&#xff09;受体编辑机制 三、算法流程&#xff08;…

Scala的隐式对象

Scala中&#xff0c;隐式对象&#xff08;implicit object&#xff09;是一种特殊的对象&#xff0c;它可以使得其成员&#xff08;如方法和值&#xff09;在特定的上下文中自动可用&#xff0c;而无需显式地传递它们。隐式对象通常与隐式参数和隐式转换一起使用&#xff0c;以…

观察者模式的理解和实践

引言 在软件开发中&#xff0c;设计模式是开发者们为了解决常见的设计问题而总结出来的一系列最佳实践。观察者模式&#xff08;Observer Pattern&#xff09;是其中一种非常经典且使用率极高的设计模式。它主要用于定义对象之间的一对多关系&#xff0c;使得当一个对象的状态发…

windows下Qt5自动编译配置QtMqtt环境(11)

文章目录 [toc]1、概述2、准备1.1 下载源码1.2 配置环境1.3 解释原理 3、编译4、验证5、参考6、视频 更多精彩内容&#x1f449;内容导航 &#x1f448;&#x1f449;Qt网络编程 &#x1f448; 1、概述 Qt默认是不包含mqtt库的&#xff0c;如果需要使用到mqtt库就只能自己编译配…

【6】数据分析检测(DataFrame 1)

学习目标3 昨天&#xff0c;我们学习了Series。 而Pandas的另一种数据类型&#xff1a;DataFrame&#xff0c;在许多特性上和Series有相似之处。 今天&#xff0c;我们将学习DataFrame的相关知识&#xff1a; 1. DataFrame的概念 2. 构造一个DataFrame 3. DataFrame的常用…

如何选择安全、可验证的技术?

澳大利亚信号局的澳大利亚网络安全中心 (ASD 的 ACSC) 发布了一份指导文件&#xff0c;题为《选择安全和可验证的技术》&#xff0c;旨在帮助组织在采购软件&#xff08;专有或开源&#xff09;、硬件&#xff08;例如物联网设备&#xff09;和云服务&#xff08;SaaS、MSP 服务…

趣味编程:猜拳小游戏

1.简介 这个系列的第一篇以猜拳小游戏开始&#xff0c;这是源于我们生活的灵感&#xff0c;在忙碌的时代中&#xff0c;我们每个人都在为自己的生活各自忙碌着&#xff0c;奔赴着自己所走向的那条路上&#xff0c;即使遍体鳞伤。 但是&#xff0c;生活虽然很苦&#xff0c;也不…

轮转数组

轮转数组 1、题目描述2、解答思路2.1、辅助数组2.2、原地反转 1、题目描述 给定一个整数数组 nums&#xff0c;将数组中的元素向右轮转 k 个位置&#xff0c;其中 k 是非负数。 2、解答思路 2.1、辅助数组 如果我们在原数组上通过覆盖元素会导致部分元素的丢失&#xff0c…

如何编译安装系统settings设置应用(5.0.0-Release)

本文介绍如何在OpenHarmony 5.0.0 r版本中修改系统设置应用&#xff0c;并且编译安装到开发板上 开发环境 1.dayu200开发板 2.OpenHarmony 5.0.0r 固件 3.API12 full sdk &#xff08;如果安装full sdk过程中出现报错hvigor ERROR: Cannot find module typescript,请参考 h…

学习记录,隐式对象,隐式类

隐式对象 格式&#xff1a;就是在对象前面加一个 implicit 作用&#xff1a;就是给函数当默认值&#xff01; 隐式类 隐式类 一个类 一个隐式转换函数 格式&#xff1a;在class 的前面&#xff0c;添加implicit 要点&#xff1a;要有一个参数&#xff0c;就要待被转换的类型…

第三部分:进阶概念 9.错误处理 --[JavaScript 新手村:开启编程之旅的第一步]

在JavaScript中&#xff0c;错误处理是确保应用程序稳定性和用户体验的重要部分。JavaScript提供了几种机制来捕获和处理运行时错误&#xff08;异常&#xff09;。以下是几种常见的错误处理方式&#xff1a; 1. try...catch 语句 try...catch 语句是JavaScript中处理错误和异…

Java面试之多线程状态(三)

此篇接上一篇Java面试之实现多线程(二) Java线程可以拥有自己的操作数栈、程序计数器、局部变量表等资源&#xff0c;它与同一进程内的其他线程共享该进程的所有资源。Java线程在生命周期内存在多种状态&#xff0c;可以通过Thread.State枚举类获取线程状态。如图所示有NEW(新建…

数据仓库:智控数据中枢

数据仓库 一. 什么是数据仓库&#xff1f;二. 传统数据库与数据仓库的区别&#xff1f;三. 数据仓库详解&#xff08;一&#xff09;. 数据分析&#xff08;二&#xff09;. 特点1. 面向主题2. 集成的3. 反应历史变化 四. 如何搭建数据仓库&#xff08;一&#xff09;. 数据平台…

【全连接神经网络】核心步骤及其缺陷

前向传播 计算公式&#xff08;其中一种&#xff09; x1/x2&#xff1a;输入值&#xff0c;一般是神经网络上一层的输出或者输入数据本身&#xff0c;上图中表示两个节点w11 w13&#xff1a;权重&#xff0c;在神经网络中&#xff0c;权重是学习的参数&#xff0c;表示每个输入…

微服务的问题

1.创建maven项目 然后配置对应的maven地址 2.创建父工程 删掉其中的src文件 在父pom中进行版本依赖和管理 如下图所示 3.在子文件中进行添加依赖 然后刷新maven进行下载