大一统的监控探针采集器 cprobe

需求背景

监控数据采集领域,比如 Prometheus 生态有非常多的 Exporter,虽然生态繁荣,但是无法达到开箱即用的大一统体验,Exporter 体系的核心问题有:

  • 良莠不齐:有的 Exporter 写的非常棒,有的则并不完善,有些监控类别甚至有多个 Exporter,选择困难
  • 写法各异:Exporter 所用的日志库、配置文件管理方式、命令行传参方式各异,体验不一
  • 倚重边车模式:有些 Exporter 和采集目标之间是一对一的关系,有几个采集目标就需要部署几个 Exporter,在 Kubernetes 环境下相对容易管理,在物理机虚拟机环境下管理起来就比较复杂了,而且多个 Exporter 还会带来资源成本的提升
  • 配置文件切分:对于非边车模式的 Exporter,即一个 Exporter 对应多个采集目标的,通常很难做到不同的采集目标不同的配置,期望能有一种配置文件切分 INCLUDE 机制,不同的采集目标采用不同的配置
  • 缺乏监控目标服务发现:对于支持 /probe 模式的 Exporter,服务发现就通过 Prometheus + relabel 模式来实现了,如果不支持 /probe 模式的 Exporter 则缺乏监控目标的服务发现机制

要是能有一个统一的采集器,把这些问题都解决掉,采用插件机制,All-in-One 采集所有监控目标,不同的插件体验一致,那该多好啊!cprobe 应运而生!

对比

社区有一些其他采集器,比如 grafana-agent,也是一个缝合怪,也是把各类 Exporter 的能力整合在一起,但是整合的非常生硬,缺少统一化设计,对目标实例的服务发现支持较弱;telegraf 和 categraf 则自成一派,指标体系没有拥抱 Prometheus exporter 生态,相关仪表盘、告警规则资源匮乏,另外服务发现机制做的也不好。datadog-agent 确实比较完备,但是生态上也是自成一派,服务于自身的 SaaS 服务,较少有开源用户采用。

以我当前的认知,监控数据的采集大抵需要三个角色,一个是部署在所有的目标机器上的,比如使用 categraf,中心端需要两个采集器,一个用于采集 Prometheus 协议的端点数据,可以使用 vmagent 或 Prometheus agent mode,另外一个用于采集所有非 Prometheus 协议的端点数据,计划就是 cprobe。

20231206120709

当然,vmagent 和 cprobe 都是探针角色,理论上可以合二为一,未来也会考虑让 cprobe 支持采集 Prometheus 协议的端点数据,这样就可以把 vmagent 去掉了,不过 vmagent 确实工作的很好,而且已经有很多用户在使用了,所以这个计划暂时搁置。

当前进展

cprobe 刚刚起步,完成了基础框架的搭建,也集成了 mysql、redis、kafka、blackbox 这几个 exporter,代码已经公布到 github:

github.com/cprobe/cprobe

20231206121355

项目文档偷个懒,会直接放到 issues 里,打上不同的标签。大家如果有建议和 PR 的想法,请先提 issue。cprobe 会尽量完善文档,会成立面向研发人员和资深用户的交流群(加群联系我的微信:picobyte,备注 cprobe-公司名-姓名)。

这几个插件在整合的过程中,也做了一些改动,主要改动如下:

  • 统一日志库,统一日志格式,统一日志级别控制
  • 统一配置文件管理,支持配置文件切分
  • 支持不同的采集目标不同的配置
  • 支持采集目标的服务发现,目前主要是 file_sd 和 http_sd
  • mysql 插件支持了自定义 sql
  • kafka 插件原本是一个 Kafka 集群一个 exporter,现在可以一个 cprobe 监控多个 Kafka 集群

安装体验

到 cprobe 的 releases 页面 Releases · cprobe/cprobe · GitHub 下载发布包。解包之后核心就是那个二进制 cprobe,通过如下命令安装:

sudo ./cprobe -install
sudo ./cprobe -start

如果是支持 systemd 的 OS,上面的安装过程实际就是自动创建了 service 文件,你可以通过下面的命令查看:

systemctl status cprobe

如果不是 systemd 的 OS,会采用其他进程管理方式,比如 Windows,会创建 cprobe 服务。

配置

解压缩之后应该可以看到 conf.d 目录,这是配置文件所在目录。writer.yaml 外加一堆的插件配置目录。 writer.yaml 是配置 remote write 地址(不知道什么是 remote write 地址,请自行 Google:Prometheus remote write),可以配置多个,默认配置如下:

global:
  extra_labels:
    colld: cprobe

writers:
- url: http://127.0.0.1:9090/api/v1/write

这是一个极简配置,也基本够用,实际 writer.yaml 中还可以配置不同时序库后端的认证信息以及 relabel 的配置,同级目录下有个 backup.yaml 可以看到一些配置样例。

不同的插件的配置会散落在各个插件目录里,以 mysql 插件举例,相关配置在 conf.d/mysql 下面,入口文件是 main.yaml,用于定义需要采集的 mysql target。target 的服务发现方式支持两种:file_sd 和 http_sd,当然,也支持 static_configs。

在 cprobe 场景下,cprobe 会直连监控目标,比如 mysql 的监控,Prometheus 是从 mysqld_exporter 获取监控数据,而 cprobe 是直连 mysql,所以 main.yaml 中要配置一些采集规则,即 scrape_rule_files。scrape_rule_files 是个数组,即可以把配置文件切分管理,这提供了极大的管理灵活性,各位自行发挥了。各个插件的配置目录下通常都会有个 doc 目录,里面会有个 README.md,README.md 中会对插件配置做说明。

后续规划

最核心的是增加更多插件,不同的插件要整理仪表盘、告警规则。框架层面,希望增加更多自埋点数据,通过 HTTP 的方式暴露更多调试信息。另外就是完善中英文文档。当然,大家如有建议也欢迎留言给我们。

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

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

相关文章

uniapp怎么开发插件并发布

今天耳机坏了,暂时内卷不了,所以想开发几个插件玩玩,也好久没写博客了,就拿这个来写了 首先,发布插件时需要你有项目 这里先拿uniapp创建一个项目, 如下,创建好的项目长这样 然后根据uniapp官网上说的,我们发布插件时,需要在uni_modules里面编写和发布 ps:还需要使用uniapp…

计算机组成原理期末复习

文章目录 第一章:计算机系统漫游编译系统进程线程之间的关系存储器层次结构虚拟地址 第二章:信息的表示和处理大端与小端整数运算浮点数运算 第三章:程序的机器级表示栈的压入和弹出算数与逻辑运算操作指令条件判断与循环 第六章:…

U盘抜太快打不开恢复方法

U盘是一种常用的存储设备,由于其便携性和大容量等特点,被广泛应用于数据存储和传输。然而,有时候我们会遇到U盘拔出后无法再次使用的问题,这通常是由于U盘拔出太快导致的。本文将深入探讨U盘拔太快打不开的原因,并提供…

【elfboard linux 开发板】10. 设备树与烧录

1. 设备树介绍 设备树由一系列被命名的node和property组成 可以描述如下信息: CPU的数量和类别内存基地址和大小总线和桥外设连接中断控制器和中断使用情况GPIO控制器和GPIO使用情况Clock 控制器和 Clock 使用情况 由dts文件以文本方式对系统设备树进行描述&…

GPT-4V的图片识别和分析能力原创

GPT-4V是OpenAI开发的大型语言模型,是GPT-4的升级版本。GPT-4V在以下几个方面进行了改进: 模型规模更大:GPT-4V的参数量达到了1.37T,是GPT-4的10倍。 训练数据更丰富:GPT-4V的训练数据包括了1.56T的文本和代码数据。 …

Ubuntu 22.04 安装prometheus

服务器监控和报警软件有很多,为什么我们会选择Prometheus而不是其他软件呢? 因为它有以下优点: 自带简易web监控页面,用户可以很方便地查看监控数据和使用仪表盘。能实时收集数据并根据自定义警报规则推送告警;具有丰…

力扣双周赛第三题----2857. 统计距离为 k 的点对

这题我们的暴力做法就是o(n^2),但是根据数据量这样会超时,所以我们不能用暴力解法去解决 那么想一想双指针可以吗,不可以。为什么呢?因为他没有一个特性可以让他双指针跳过前面或者后面一个点。比如他们数组有顺序的情况下,还有一…

【JaveWeb教程】(23) MySQL数据库开发之事务与索引 详细代码示例讲解(最全面)

目录 2. 事务2.1 介绍2.2 操作2.3 四大特性 3. 索引3.1 介绍3.2 结构3.3 语法 2. 事务 场景:学工部整个部门解散了,该部门及部门下的员工都需要删除了。 操作: -- 删除学工部 delete from dept where id 1; -- 删除成功-- 删除学工部的员工…

某厂校招一道关于C的笔试题

一、笔试原题 题目:在Linux x86 _ 54 gcc环境下,下面的程序会出现什么问题?运行结果是什么?为什么? 程序如下图: 通过在gcc的环境下编译运行,发现运行结果为不断死循环打印0-17的数字 我们…

遥感影像-语义分割数据集:高分卫星-云数据集详细介绍及训练样本处理流程

原始数据集详情 简介:该云数据集包括RGB三通道的高分辨率图像,包含高分一、高分二及宽幅数据集。 KeyValue卫星类型高分系列覆盖区域未知场景未知分辨率1m、2m、8m数量12000单张尺寸1024*1024原始影像位深8位标签图片位深8位原始影像通道数三通道标签图…

云卷云舒:AI for DB、DB for AI

云卷云舒:算力网络云原生(下):云数据库发展的新篇章-CSDN博客https://blog.csdn.net/bishenghua/article/details/135050556 随着数据库和AI技术的分支同向演进,AI 和数据库间的关联越发紧密了。 大模型的演进发展&a…

为何资深程序员都离不开 requirements.txt?你还在为环境配置发愁吗?

requirements.txt 文件是一个用于记录 Python 包依赖的文件,它能够帮助我们快速配置开发环境。在迁移到新的开发环境时,通常需要逐个使用 pip install 命令安装各种包,这个过程既耗时又可能出现错误。 而 requirements.txt 文件可以让我们一…

通过IP地址识别风险用户

随着互联网的迅猛发展,网络安全成为企业和个人关注的焦点之一。识别和防范潜在的风险用户是维护网络安全的关键环节之一。IP数据云将探讨通过IP地址识别风险用户的方法和意义。 IP地址的基本概念:IP地址是互联网上设备的独特标识符,它分为IP…

靶场实战(14):OSCP备考之VulnHub SUNSET NOONTIDE

打靶思路 资产发现 主机发现服务发现漏洞发现(获取权限) irc服务提升权限 server用户 sudosuidcron内核提权信息收集 1、资产发现 1.1、主机发现 本次靶场SUNSET: NOONTIDE[1]指定IP,不涉及主机发现过程。 1.2、服务发现 使用命令sudo -u roo…

Kubernetes 集群管理—日志架构

日志架构 应用日志可以让你了解应用内部的运行状况。日志对调试问题和监控集群活动非常有用。 大部分现代化应用都有某种日志记录机制。同样地,容器引擎也被设计成支持日志记录。 针对容器化应用,最简单且最广泛采用的日志记录方式就是写入标准输出和标…

调用openai实现聊天功能

📑前言 本文主要是【聊天机器人】——调用openai实现聊天功能的文章,如果有什么需要改进的地方还请大佬指出⛺️ 🎬作者简介:大家好,我是听风与他🥇 ☁️博客首页:CSDN主页听风与他 &#x1f3…

编译和链接(2)

3. 预处理详解 3.2#define 3.2.5带副作用的宏参数 当宏参数在宏的定义中出现超过一次的时候,如果参数带有副作用,那么你在使用这个宏的时候就可能 出现危险,导致不可预测的后果。副作用就是表达式求值的时候出现的永久性效果。 例如&…

day16 二叉树的最大深度 n叉树的最大深度 二叉树的最小深度 完全二叉树的节点数

题目1:104 二叉树的最大深度 题目链接:104 二叉树的最大深度 题意 二叉树的根节点是root,返回其最大深度(从根节点到最远叶子节点的最长路径上的节点数) 递归 根节点的的高度就是二叉树的最大深度 所以使用后序遍…

【Minio】常见问题解决思路

检查存储服务器对应的端口与应用服务器是否能够互通,通过ping|telnet命令检查、查看防火墙端口是否开放,检查防火墙端口linux系统和windows系统各有不同。检查电脑上的杀毒软件是否限制了网络端口和文件权限问题。检查minio配置信息是否正确,…

Unity AssetBundles资源管理和热更新

项目中的做法,在项目中一般会把资源按照文件目录去划分资源,以文件路径的名字作为AB的名字,一般都是把资源的这些放到预处理中。 一般会分为几个类型,比如把单个文件夹下的每个资源进行打bundle,把单个文件夹下的所有资…