【笔记】macos上部署thanos_receiver + thanos_query
- 为了方便起见,在mac笔记本上进行了测试
1.写一个发送数据的客户端
package main
import (
"fmt"
"io/ioutil"
"log"
"math/rand"
"net/http"
"os"
"strconv"
"strings"
"time"
"github.com/golang/protobuf/proto"
"github.com/prometheus/prometheus/prompb"
"github.com/golang/snappy"
)
var client = &http.Client{
Transport: &http.Transport{
Proxy: nil,
DialContext: nil,
Dial: nil,
DialTLSContext: nil,
DialTLS: nil,
TLSClientConfig: nil,
TLSHandshakeTimeout: 0,
DisableKeepAlives: false,
DisableCompression: false,
MaxIdleConns: 100,
MaxIdleConnsPerHost: 0,
MaxConnsPerHost: 0,
IdleConnTimeout: 0,
ResponseHeaderTimeout: 0,
ExpectContinueTimeout: 0,
TLSNextProto: nil,
ProxyConnectHeader: nil,
MaxResponseHeaderBytes: 0,
WriteBufferSize: 0,
ReadBufferSize: 0,
ForceAttemptHTTP2: false,
},
CheckRedirect: nil,
Jar: nil,
Timeout: time.Duration(1000) * time.Millisecond,
}
//Post POST数据
func Post(c *http.Client, url string, postData string, timeoutMs int, headers map[string]string) (int, []byte, error) {
req, err := http.NewRequest("POST", url, strings.NewReader(postData))
if err != nil {
return 0, nil, err
}
for k, v := range headers {
req.Header.Set(k, v)
}
c.Timeout = time.Duration(timeoutMs) * time.Millisecond
rsp, err := c.Do(req)
if err != nil {
return 0, nil, err
}
respData, err := ioutil.ReadAll(rsp.Body)
rsp.Body.Close()
if err != nil {
return rsp.StatusCode, nil, err
}
return rsp.StatusCode, respData, nil
}
func getReq(cnt int) *prompb.WriteRequest {
req := &prompb.WriteRequest{
Timeseries: []prompb.TimeSeries{
prompb.TimeSeries{
Labels: []prompb.Label{
prompb.Label{
Name: "__name__",
Value: "metric_of_ahfu_1",
},
prompb.Label{
Name: "container",
Value: "cls-xxxxx-111",
},
{Name: "instance", Value: "localhost:9090"},
{Name: "job", Value: "prometheus"},
},
Samples: []prompb.Sample{
prompb.Sample{
Value: float64(1002),
Timestamp: time.Now().UnixNano() / 1000000,
},
},
Exemplars: nil,
},
},
Metadata: []prompb.MetricMetadata{},
}
if cnt > 1 {
for i := 1; i < cnt; i++ {
req.Timeseries = append(req.Timeseries, prompb.TimeSeries{
Labels: []prompb.Label{
prompb.Label{
Name: "__name__",
Value: fmt.Sprintf("metric_of_ahfu_%d", i+1),
},
prompb.Label{
Name: "container",
Value: "cls-xxxxx-111",
},
{Name: "instance", Value: "localhost:9090"},
{Name: "job", Value: "prometheus"},
},
Samples: []prompb.Sample{
prompb.Sample{
Value: float64(rand.Intn(2000)),
Timestamp: time.Now().UnixNano() / 1000000,
},
},
Exemplars: nil,
})
}
}
return req
}
func main() {
log.SetFlags(log.LstdFlags | log.Lshortfile)
runtimes := 1
if len(os.Args) >= 4 {
runtimes, _ = strconv.Atoi(os.Args[3])
}
for r := 0; r < runtimes; r++ {
cnt := 1
if len(os.Args) >= 3 {
cnt, _ = strconv.Atoi(os.Args[2])
}
req := getReq(cnt)
log.Println(req)
buf, _ := proto.Marshal(req)
dst := make([]byte, 0, len(buf))
dst = snappy.Encode(dst, buf)
//
url := fmt.Sprintf("http://%s/api/v1/receive", os.Args[1])
_, rsp, err := Post(client, url, string(dst), 1000,
map[string]string{
"Content-Encoding": "snappy",
"Content-Type": "application/x-protobuf",
"User-Agent": "ahfu-test-client",
"X-Prometheus-Remote-Write-Version": "0.1.0",
})
if err != nil {
log.Println("Post error:", err.Error())
return
}
log.Println("url:", url)
log.Println("rsp:", string(rsp))
time.Sleep(time.Duration(10) * time.Second)
}
}
- 执行命令行:
./remote_write_client_macos 127.0.0.1:10908 30 1000- 每次发送30个监控项
- 连续发送1000次,中间间隔10秒
- instance和job这两个label一定要加,否则thanos receiver会丢弃。
2.部署thanos receiver:
thanos receive \
--tsdb.path "./ahfu_dir/" \
--grpc-address 0.0.0.0:10907 \
--http-address 0.0.0.0:10909 \
--receive.replication-factor 1 \
--label "receive_replica=\"0\"" \
--label "receive_cluster=\"eu1\"" \
--remote-write.address 0.0.0.0:10908 \
--log.level=debug \
--log.format=logfmt
- 10908端口是http协议,用于post监控数据到receiver上
- 10907端口是grpc协议,用于给thanos query来查询
- 10909端口是自身的监控数据的expoter
- 浏览器输入:http://127.0.0.1:10909/metrics可以看见thanos receiver自身的监控数据
- 搜索:
http_requests_total{code="200",handler="receive",method="post"}可以看见推送的请求量
- 到TSDB目录:
- 执行:
promtool tsdb list ./ - 启动后两分钟以后,可以看见如下信息:
- 执行:
promtool tsdb list ./
BLOCK ULID MIN TIME MAX TIME DURATION NUM SAMPLES NUM CHUNKS NUM SERIES SIZE
01FD7J9QW40GF1YSSZR8BTBJV6 1629115842635 1629116635334 13m12.699s 2370 30 30 13931
3.部署thanos query
thanos query \
--http-address "127.0.0.1:9091" \
--store "127.0.0.1:10907"
- 浏览器访问:127.0.0.1:9091 可以看见查询界面
- 注意:
神坑——- 发送的数据要足够多
- 发送的时间要足够长
- 我的客户端发送了约两分钟后,才看见数据
- 输入:
metric_of_ahfu_1, 可以看见客户端工具上报的数据。
【笔记】macos上部署thanos_receiver + thanos_query的更多相关文章
- Solr学习笔记-在Tomcat上部署执行Solr
上一篇我们初识了Solr而且学习了Jetty的启动方式.查看了Solr的管理界面,这一篇我们来实如今Tomcat上部署执行Solr. 部署环境: window7 jdk1.6.0_14 Solr-4. ...
- Dubbo入门到精通学习笔记(二):Dubbo管理控制台、使用Maven构建Dubbo的jar包、在Linux上部署Dubbo privider服务(shell脚本)、部署consumer服务
文章目录 Dubbo管理控制台 1.Dubbo管理控制台的主要作用: 2.管理控制台主要包含: 3.管理控制台版本: 安装 Dubbo 管理控制台 使用Maven构建Dubbo服务的可执行jar包 D ...
- docker4dotnet #3 在macOS上使用Visual Studio Code和Docker开发asp.net core和mysql应用
.net猿遇到了小鲸鱼,觉得越来越兴奋.本来.net猿只是在透过家里那田子窗看外面的世界,但是看着海峡对岸的苹果园越来越茂盛,实在不想再去做一只宅猿了.于是,.net猿决定搭上小鲸鱼的渡轮到苹果园去看 ...
- ASP.NET Core 中文文档 第二章 指南(1)用 Visual Studio Code 在 macOS 上创建首个 ASP.NET Core 应用程序
原文:Your First ASP.NET Core Application on a Mac Using Visual Studio Code 作者:Daniel Roth.Steve Smith ...
- (转)ZooKeeper 笔记(1) 安装部署及hello world
ZooKeeper 笔记(1) 安装部署及hello world 先给一堆学习文档,方便以后查看 官网文档地址大全: OverView(概述) http://zookeeper.apache.or ...
- ActionBarSherlock学习笔记 第一篇——部署
ActionBarSherlock学习笔记 第一篇--部署 ActionBarSherlock是JakeWharton编写的一个开源框架,使用这个框架,可以实现在所有的Android ...
- OGG学习笔记04-OGG复制部署快速参考
OGG学习笔记04-OGG复制部署快速参考 源端:Oracle 10.2.0.5 RAC + ASM 节点1 Public IP地址:192.168.1.27 目标端:Oracle 10.2.0.5 ...
- 《Maven实战》笔记-8-构建部署Web项目
一.Web项目结构 1.显式指定Web项目打包方式为war: 2.默认目录 根据“约定大于配置”的规则,Web项目的类及资源文件默认位置为src/main/java和src/main/reso ...
- 在Nginx上部署ThinkPHP,解决Pathinfo问题
在Nginx上部署ThinkPHP,解决Pathinfo问题 事实上.要解决nginx不支持pathinfo的问题.有两个解决思路,一是不使用pathinfo模式,二是改动nginx的配置文件,使它支 ...
随机推荐
- Linux运维常见问题
一.启动/重启/停止命令 1.jenkins的启动.停止和重启命令 启动:service jenkins start 或者systemctl start jenkins 状态:service jenk ...
- SpringBoot整合Apache Shiro
Subject 用户主体 (把操作交给SecurityManager)SecurityManager 安全管理器 (关联Realm)Realm Shiro连接数据的桥梁 引入maven依赖 < ...
- qt5之设置无边窗口移动
Note qt version: 5.12 qt creator: 4.13 本文将介绍 设置无边窗口和设置窗口的移动 你要知道: QDialog 和 QMainWindow都是 QWidget的派生 ...
- c++11之日期和时间库
本文主要介绍 std::chrono日期和时间用法. 演示环境: vs2017 0.头文件 1 #include <chrono> 2 #include <thread>// ...
- 【LeetCode】118. Pascal's Triangle 解题报告(Python)
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 Java解法 Python解法 日期 [LeetCo ...
- 【LeetCode】1133. Largest Unique Number 解题报告(C++)
作者: 负雪明烛 id: fuxuemingzhu 个人博客:http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 桶排序 日期 题目地址:https://leetcod ...
- 基于CA认证(结合文档在线预览)的电子签章解决方案
分享一个基于CA认证(结合文档在线预览)的电子签章实现思路,恰巧是最近项目中遇到的,欢迎大家一起讨论. 一. 项目背景 在公司业务系统中,按照传统的签章方式,存在以下痛点: 1.成本高,体现在纸质合同 ...
- Categorical Reparameterization with Gumbel-Softmax
目录 概 主要内容 Gumbel distribution Jang E., Gu S. and Poole B. Categorical reparameterization with gumbel ...
- CS5213设计HDMI转VGA带音频信号输出|CS5213方案|CS5213设计电路
CS5213是一款用于设计HDMI转VGA音视频信号转换器方案,CS5213设计HDMI转VGA转换器或者转接线产品特点: 将完整的HDMI信号转换为VGA输出支持数字信号到模似信号的转换支持 HDC ...
- Java实习生常规技术面试题每日十题Java基础(三)
目录 1.是否可以从一个static方法内部发出对非static方法的调用? 2.Integer与int的区别? 3.Overload和Override的区别.参数列表相同,返回值不同的方法,是否是重 ...