【云原生•监控】Categraf大一统的监控数据采集器

news2024/11/25 13:19:08

【云原生•监控】Categraf大一统的监控数据采集器

前言

「笔者已经在公有云上搭建了一套临时环境,可以先登录体验下:」

http://124.222.45.207:17000/login
账号:root/root.2020

简介

Categraf 是一个监控采集 Agent,类似 TelegrafGrafana-AgentDatadog-Agent,希望对所有常见监控对象提供监控数据采集能力,采用 All-in-one 的设计,不但支持指标采集,也希望支持日志和调用链路的数据采集。

e1fd60a4b1d986b9501bb5ac0a9c30d9.png

Categraf组件将5个常用agent进行整合,采用 all-in-one 的设计,主要解决如每台机器可能需要部署很多个prometheus exporter导致运维困难的问题,所有的采集工作用一个 agent 搞定,也可以把日志和 trace 的采集纳入 agent

  • 「ibex agent:」故障自愈agent,主要用于执行自愈脚本;

  • 「logs agent:」日志采集agent

  • 「metrics agent:」指标采集agent,采用插件模式设计;

  • 「prometheus agent:」嵌入prometheus sdk,实现prometheus agent模式;

  • 「traces agent:」链路采集agent;

编译运行

categraf 的代码托管在 github:https://github.com/flashcatcloud/categraf。

1、下载并编译:

# export GO111MODULE=on
# export GOPROXY=https://goproxy.cn
go build

2、打包:

tar zcvf categraf.tar.gz categraf conf

conf 目录下还提供了 categraf.service 文件样例,便于大家使用 systemd 托管 categraf。

3、运行

# test mode: just print metrics to stdout
./categraf --test

# test system and mem plugins
./categraf --test --inputs system:mem

# print usage message
./categraf --help

# run
./categraf

# run with specified config directory
./categraf --configs /path/to/conf-directory

# only enable system and mem plugins
./categraf --inputs system:mem

# use nohup to start categraf
nohup ./categraf &> stdout.log &

「测试」

我们经常会需要测试某个采集器的行为,临时看一下这个采集器输出哪些监控指标,比如配置好了 conf/input.mem/mem.toml 想要看看采集了哪些Linux内存指标,可以执行命令:./categraf --test --inputs mem

[root@swarm-worker02 categraf-v0.3.3-linux-amd64]# ./categraf --test  --inputs mem                
2023/05/15 23:41:48 I! tracing disabled
2023/05/15 23:41:48 metrics_agent.go:269: I! input: local.mem started
2023/05/15 23:41:48 agent.go:47: I! [*agent.MetricsAgent] started
2023/05/15 23:41:48 agent.go:50: I! agent started
23:41:48 mem_free agent_hostname=swarm-worker02 1264836608
23:41:48 mem_high_free agent_hostname=swarm-worker02 0
23:41:48 mem_sreclaimable agent_hostname=swarm-worker02 279576576
23:41:48 mem_swap_cached agent_hostname=swarm-worker02 0
23:41:48 mem_available agent_hostname=swarm-worker02 5180682240
23:41:48 mem_used agent_hostname=swarm-worker02 520003584
23:41:48 mem_total agent_hostname=swarm-worker02 6017568768
23:41:48 mem_available_percent agent_hostname=swarm-worker02 86.09261380691878
23:41:48 mem_write_back agent_hostname=swarm-worker02 0
23:41:48 mem_used_percent agent_hostname=swarm-worker02 8.64142320674847
23:41:48 mem_high_total agent_hostname=swarm-worker02 0
23:41:48 mem_low_total agent_hostname=swarm-worker02 0

ibex agent

ibex agent主要用于告警自愈场景。故障自愈主要用于解决出现故障时,基于故障治理方案自动执行相关的操作,已达到故障自动修复能力。比如主机磁盘使用率高,可以执行脚本清理磁盘文件;还比如PaaS组件CPU、内存使用率居高不下,可以通过三方接口方式调用重启组件释放资源等等。

夜莺监控支持告警规则中关联回调地址方式,实现告警触发时通过调用三方接口方式实现告警自愈能力,见下图:

c5b90810dac3317aec10d04a3121e9a0.png

回调地址除了可以配置HTTP地址外,还支持基于ibex组件回调自愈脚本能力,见下图:

400aa79a353b68a0bb5a46ea5c31c5dc.png

这里的1就是对应的自愈脚本ID,可以在【告警自愈】-【自愈脚本】页面查询对应ID信息:

66a7b166aeabbe44ab2983da8309c27f.png

自愈脚本通常有两种方式:基于ssh方式执行和客户端agent执行,夜莺采用基于后者方式,ibex-agent最新方式已经集成到categraf组件中:

4278ac88d0c058d31c9afe583f8b0784.png

categraf组件ibex相关配置示例如下:

# 是否启用告警自愈agent
[ibex]
enable = false
## ibex flush interval
interval = "1000ms"
## n9e ibex server rpc address
servers = ["127.0.0.1:20090"]
## temp script dir
meta_dir = "./meta"

故障自愈核心组件数据流如下图:

ebee76b218c0db2b0ca618d2a3327f04.png

自愈脚本、告警配置都在n9e组件端,然后将其分发到ibex server组件,该组件单独管理故障自愈脚本执行分发,然后ibex agent组件定时周期性通过RPC接口方式拉取当前主机上执行的脚本任务执行,并同时将执行结果、执行输出等上报到ibex server组件,这样n9e管理端就可以从ibex server端查询到任务执行明细并进行展示。

ibex agent组件已经被集成到categraf组件中,所以,这里的ibex agent即为categraf。

ibex故障自愈详细的核心流程见下图:

9d2014314284aa28f3bb62c07d0173cb.png

prometheus agent

Prometheus Agent 是自 Prometheus v2.32.0 版本推出的实验性功能,当启用此功能后,将不会在本地文件系统上生成块,并且无法在本地查询。如果网络出现异常状态无法连接至远程端点,数据将暂存在本地磁盘,但是仅限于两个小时的缓冲。

prometheus开启agent模式时,prometheus.yml中必须配置"remote_write",不能配置alertmanagerrules,因为agent节点仅有采集指标功能,添加alertmanagerrules启动时会报错。

prometheus agent配置conf/prometheus.toml

[prometheus]
# 是否启动prometheus agent
enable=false
# 原来prometheus的配置文件
# 或者新建一个prometheus格式的配置文件
scrape_config_file="/path/to/in_cluster_scrape.yaml"
## 日志级别,支持 debug | warn | info | error
log_level="info"
# 以下配置文件,保持默认就好了
## wal file storage path ,default ./data-agent
# wal_storage_path="/path/to/storage"
## wal reserve time duration, default value is 2 hour
# wal_min_duration=2

categraf组件中prometheus agent就是使用prometheus sdk实现了prometheus agent模式,这样就可以把prometheus采集配置直接拿来使用:

50c0dbd329d4e207db09a7443859b9ed.png

如上图,我理解的categrafprometheus agent典型应用场景是借助prometheus强大的服务发现能力,对云原生集群node机器、cAdvisor容器、ksm集群和上层业务组件进行监控。

metrics agent

作为categraf组件的核心模块,metrics agent主要实现对各种组件的性能指标进行采集,类似于prometheus中的exporter,但是categraf组件采用All-in-one 的设计思想,并利用插件模式进行实现。

采集插件的代码,在代码的 inputs 目录,每个插件一个独立的目录,目录下是采集代码,以及相关的监控大盘JSON(如有)和告警规则JSON(如有),Linux相关的大盘和告警规则没有散在 cpu、mem、disk等采集器目录,而是一并放到了 system 目录下,方便使用。

插件的配置文件,放在conf目录,以input.打头,每个配置文件都有详尽的注释,如果整不明白,就直接去看 inputs 目录下的对应采集器的代码,Go 的代码非常易读,比如某个配置不知道是做什么的,去采集器代码里搜索相关配置项,很容易就可以找到答案。

categraf大概实现了70+插件,每个插件怎么使用可以查看对应的插件的README文档,具体使用这里就不做过多介绍。下面主要来看下插件核心实现原理(见下图),方便我们进行二次开发:

01596230c72956b3a9e52c041260974c.png

heartbeat

categraf组件可以和n9e后端组件启用心跳功能,通过心跳模式上报集群节点的CPU、内存、OS等基础信息,配置如下:

# categraf心跳配置,启动心跳功能,categraf会定时周期将节点cpu、内存等信息通过心跳包发送给n9e后端服务
[heartbeat]
enable = true

# report os version cpu.util mem.util metadata
url = "http://127.0.0.1:17000/v1/n9e/heartbeat"

# interval, unit: s
interval = 10

# Basic auth username
basic_auth_user = ""

# Basic auth password
basic_auth_pass = ""

## Optional headers
# headers = ["X-From", "categraf", "X-Xyz", "abc"]

# timeout settings, unit: ms
timeout = 5000
dial_timeout = 2500
max_idle_conns_per_host = 100

心跳包会将categraf组件服务器的基础信息发送到后端,具体信息如下:

data := map[string]interface{}{
 "agent_version": version,//categraf版本
 "os":            runtime.GOOS,//系统
 "arch":          runtime.GOARCH,//架构
 "hostname":      hostname,//主机名
 "cpu_num":       runtime.NumCPU(),//CPU核数
 "cpu_util":      cpuUsagePercent,//cpu使用率
 "mem_util":      memUsagePercent,//内存使用率
 "unixtime":      time.Now().UnixMilli(), //后端可以用于计算客户端和后端时间偏移
}

服务端收到心跳包后,基于req.Offset = (time.Now().UnixMilli() - req.UnixTime)计算出后端和categraf采集端时间偏移量,然后并将这些信息一起写入到内存,并定时1秒间隔刷新到Redis缓存中,keyn9e_meta_$hostname格式,见下图:

7e8cf7e6851cd7a8f13bb68ab5483aa7.png

a3d7338e1fa96110c2bb3123df3f518a.gif

[更多云原生监控运维,请关注微信公众号:Reactor2020]

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

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

相关文章

KDHL-200A高压开关电阻测量仪技术参数

一、产品概述 KDHL-200A高压开关电阻测量仪操作面板采用人体工学设计,符合操作习惯,采用高频开关电源和数字电路技术,适用于开关控制设备回路电阻的测量。 测试电流采用国家标准推荐的直流100A,可在直流100A的情况下直接测得回路…

媒体公关是什么?

传媒如春雨,润物细无声,大家好,我是51媒体网胡老师。 常常有很多朋友问我,胡老师,你具体是从事什么行业的,能为我们做些什么呢,其实51媒体网(51 Media PR)是专注于媒体公…

员工每天带薪拉屎3至6小时,对谁更不利?

#员工每天带薪拉屎3至6小时被解雇# 事件摘要: 据劳动报报道,2015年7月开始,某公司员工王某每天在厕所停留的时间为3至6个小时。记录显示,自2015年9月7日至17日(9月13日除外)王某每天分二至三次&#xff0…

第51讲:Python定义函数时使用*定义个数可变的位置形参

文章目录 1.个数可变的位置形参概念2.定义函数时定义一个个数可变的位置形参3.个数可变的形参通常位于函数中的最后一个形参 1.个数可变的位置形参概念 定义函数时,如果无法事先确定传递的位置实参的个数,在这种情况下,可以将形参定义为个数…

AutoAI 2023峰会观察:数据驱动变革,迎接智驾未来

在驶向智驾未来的科技之路上,数据正在发挥什么样的重要作用? AutoAI 2023中国峰会盛大召开 近日,AutoAI 2023第六届无人驾驶及智能驾舱中国峰会在上海盛大召开,AutoSec 7周年年会暨中国汽车网络安全与数据安全合规峰会也于同期一起…

老手机安装apk包时出现[解析包时出现错误]

问题 在老手机上安装打包好的apk时出现了“解析包时出现错误” 环境 手机 型号:华为、荣耀Android版本: 6.0 开发环境 gradle 6.9.2Android Studio 4.2.1minSdkVersion 23 解决 打包时只使用V1签名。 总结分析 因为Android7以上,引入使…

气氛热烈 金句频出!一文看尽网易科技首期AIGC创新社沙龙

GPT狂飙,AI突进。 无数人的热情被点燃,振臂高呼“AI的iPhone时刻已经到来”。面对时代新机遇,创业者闻风而动,投资人竞相追逐,巨头纷纷入局。未来会怎样?没人能给出确切的答案。 但是,几乎已成共…

《嵌入式系统开发实践》实验三 进程通信

一、 实验目的 掌握无名管道与有名管道的进程通信;掌握消息队列的读写操作;掌握共享内存的通信机制。 二、 实验任务与要求 管道读写程序的编写与应用;消息队列的发送和接收程序的编写和应用;共享内存的创建、连接和分离编程和…

ptp4l测试-LinuxPTP\ptp4l配置与问题排查

目录 一、前言 1.1 什么是ptp4l 1.2 描述 1.3 官网连接 1.4 目的 1.5 平台 二、 平台必要软件 2.1 linux物理机 2.2 imx6ull开发板 三、检查硬件是否支持 3.1 ifconfig查看当前网卡的名称 3.2 ethtool检查驱动和网卡是否支持 四、开启ptp4l服务 4.1 方法一&#x…

Windows远程访问本地 jupyter notebook服务

文章目录 前言视频教程1. Python环境安装2. Jupyter 安装3. 启动Jupyter Notebook4. 远程访问4.1 安装配置cpolar内网穿透4.2 创建隧道映射本地端口 5. 固定公网地址 前言 Jupyter Notebook,它是一个交互式的数据科学和计算环境,支持多种编程语言&#…

图像滤波概述

什么是图像滤波 1.图像滤波,即在尽量保留图像细节特征的条件下对目标图像的噪声进行抑制,是图像预处理中不可缺少的操作,其处理效果的好坏将直接影响到后续图像处理和分析的有效性和可靠性。 2.消除图像中的噪声成分叫作图像的平滑化或滤波操…

霍尔电流传感器在直流列头柜的应用

摘要:数据中心供电电源质量的好坏直接影响到IT设备的安全运行,因此对数据中心直流列头柜电源进出线实行监测非常重要,而通过霍尔电流传感器可以采集主进线电流、多路支路直流电流和漏电流。 关键词:数据中心;直流列头柜…

MySQL-多表查询(下)

♥️作者:小刘在C站 ♥️个人主页:小刘主页 ♥️每天分享云计算网络运维课堂笔记,努力不一定有收获,但一定会有收获加油!一起努力,共赴美好人生! ♥️树高千尺,落叶归根人生不易&…

统计:SEM standar deviation of the mean [延长仪表周期 技术点]

平均值标准误差(SEM, standard deviation of the mean) SD:样本标准差 分母(n-1) SD与SEM区别: 1.SD量化了样本分散值之间的差值有多大; 2.SEM量化了对总体实际平均值的了解程度。其考虑了SD的值和样本量&…

day11 - 手写数字笔迹细化

手写数字笔迹细化 对于手写数字识别实验中,经常会遇到因为笔迹较粗导致误识别的情况,所以我们通常会先将笔迹进行细化,笔迹变细以后,数字的特征会更明显,后续进行识别的准确率就会更高。 例如数字7 和 1 &#xff0c…

2019下半年上午题

2019下半年上午题 b 选a c 最后统一单位 计算需要多少片芯片: 流水线: 也就是: 对于这一道题: c ssl:安全套接层 https:安全通道 PGP:电子邮件加密 d b a b b 受委托方和委…

WWDC2023|苹果已邀请多家VR/AR领域媒体,有望推出首款头显设备

据9to5mac报道,苹果已邀请多位VR/AR领域的记者和创作者参加今年WWDC开发者大会,其中包括UploadVR编辑Ian Hamilton、经常测试AR/VR产品的Norman Chan等,这表明苹果有望推出该领域的相关产品和服务,例如首款VR/AR头显。 根据此前…

动态规划-树形DP

树的重心 题目 链接:https://www.acwing.com/problem/content/848/ 给定一颗树,树中包含 n n n 个结点(编号 1 ∼ n 1 \sim n 1∼n)和 n − 1 n-1 n−1 条无向边。 请你找到树的重心,并输出将重心删除后&#x…

免费使用GPT4.0?搭载多模态的全新New Bing开放使用教程

目录 1 微软发布新必应2 支持文本生成图像3 支持多模态回答4 历史记录和回答导出5 支持插件化导入 1 微软发布新必应 5月4日,微软基于ChatGPT的搜索引擎New Bing发布了一次大规模更新,并宣布已开放给所有用户,现在无需再排队等待&#xff0c…

实力上榜!ONES 荣获深圳市「专精特新」企业认定

近日,ONES 成功入选 2022 年深圳市专精特新中小企业名单,这标志着 ONES 在研发管理领域专业化、企业数字化程度、质量管理水平、研发创新水平等多个方面得到充分认可和肯定。 深圳市专精特新企业评选是以工业和信息化部、国家统计局、国家发展改革委、财…