夜莺系列 3 监控采集Categraf

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
可观测监控 Prometheus 版,每月50GB免费额度
简介: Categraf监控采集agent

Categraf 是一个监控采集 Agent,类似 Telegraf、Grafana-Agent、Datadog-Agent,希望对所有常见监控对象提供监控数据采集能力,采用 All-in-one 的设计,不但支持指标采集,也希望支持日志和调用链路的数据采集。
特点:
支持 remote_write 写入协议,支持将数据写入 promethues、M3DB、VictoriaMetrics、InfluxDB
指标数据只采集数值,不采集字符串,标签维持稳态结构
采用 all-in-one 的设计,所有的采集工作用一个 agent 搞定,未来也可以把日志和 trace 的采集纳入 agent
纯 Go 代码编写,静态编译依赖少,容易分发,易于安装
尽可能落地最佳实践,不需要采集的数据无需采集,针对可能会对时序库造成高基数的问题在采集侧做出处理
常用的采集器,不但提供采集能力,还要整理出监控大盘和告警规则,用户可以直接导入使用
希望更多的公司、更多人研发人员参与共建,做成国内最开放、最好用的采集器

部署

在目标机器部署,只需要 categraf 二进制、配置文件;

categraf启动时 可以通过-configs参数指定配置目录,如果不指定,会默认读取工作目录下的conf。 conf 目录结构如下:

  • config.toml# 主配置
  • logs.toml# logs-agent 配置
  • prometheus.toml# prometheus agent 配置
  • traces.yaml# trace-agent 配置
  • conf/input.*/*.toml 插件配置文件,以input.打头,如果某个采集器 xx 不想启用,把 input.xx 改个其他前缀(或者删除这个目录),比如 bak.input.xx,categraf 就会忽略这个采集器。

安装很简单

wget https://github.com/flashcatcloud/categraf/releases/download/v0.3.1/categraf-v0.3.1-linux-amd64.tar.gz
tar xf categraf-v0.3.1-linux-amd64.tar.gz
cd categraf-v0.3.1-linux-amd64/
#修改配置文件,在 conf/config.toml 中,修改n9e的地址和开启心跳:[[writers]]
url ="http://127.0.0.1:17000/prometheus/v1/write"[heartbeat]
enable =true#然后启动 Categraf。nohup ./categraf &

主配置config.toml说明

[global]
# 启动的时候是否在stdout中打印配置内容print_configs =false# 机器名,作为本机的唯一标识,会为时序数据自动附加一个 agent_hostname=$hostname 的标签# hostname 配置如果为空,自动取本机的机器名# hostname 配置如果不为空,就使用用户配置的内容作为hostname# 用户配置的hostname字符串中,可以包含变量,目前支持两个变量,# $hostname 和 $ip,如果字符串中出现这两个变量,就会自动替换# $hostname 自动替换为本机机器名,$ip 自动替换为本机IP# 建议大家使用 --test 做一下测试,看看输出的内容是否符合预期# 这里配置的内容,再--test模式下,会显示为 agent_hostname=xxx 的标签 hostname =""# 是否忽略主机名的标签,如果设置为true,时序数据中就不会自动附加agent_hostname=$hostname 的标签omit_hostname =false# 时序数据的时间戳使用ms还是s,默认是ms,是因为remote write协议使用ms作为时间戳的单位precision ="ms"# 全局采集频率,15秒采集一次interval =15# 全局附加标签,一行一个,这些写的标签会自动附到时序数据上# [global.labels]# region = "shanghai"# env = "localhost"[log]
# 默认的log输出,到标准输出(stdout) # 如果指定为文件, 则写入到指定的文件中file_name ="stdout"# options below will not be work when file_name is stdout or stderr# 如果是写入文件,最大写入大小,单位是MBmax_size =100# max_age is the maximum number of days to retain old log files based on the timestamp encoded in their filename.# 保留多少天的日志文件max_age =1# max_backups is the maximum number of old log files to retain.# 保留多少个日志文件max_backups =1# local_time determines if the time used for formatting the timestamps in backup files is the computer's local time.# 是否使用本地时间local_time =true# Compress determines if the rotated log files should be compressed using gzip.# 是否将老文件压缩(gzip格式)compress =false# 发给后端的时序数据,会先被扔到 categraf 内存队列里,每个采集插件一个队列# chan_size 定义了队列最大长度# batch 是每次从队列中取多少条,发送给后端backend[writer_opt]
# default: 2000batch =2000# channel(as queue) sizechan_size =10000# 后端backend配置,在toml中 [[]] 表示数组,所以可以配置多个writer# 每个writer可以有不同的url,不同的basic auth信息[[writers]]
# 注意端口号# v5版本端口是19000# v6版本端口是17000url ="http://127.0.0.1:19000/prometheus/v1/write"# Basic auth usernamebasic_auth_user =""# Basic auth passwordbasic_auth_pass =""# timeout settings, unit: mstimeout =5000dial_timeout =2500max_idle_conns_per_host =100# 是否采用http模式下发配置文件[http]
enable =falseaddress =":9100"print_access =falserun_mode ="release"# 是否启用告警自愈agent[ibex]
enable =false## ibex flush intervalinterval ="1000ms"## n9e ibex server rpc addressservers = ["127.0.0.1:20090"]
## temp script dirmeta_dir ="./meta"# 心跳上报(附带资源信息,对象列表中使用)给夜莺v6# 如果是v5版本,这里不需要保留[heartbeat]
enable =true# report os version cpu.util mem.util metadataurl ="http://127.0.0.1:17000/v1/n9e/heartbeat"# interval, unit: sinterval =10# Basic auth usernamebasic_auth_user =""# Basic auth passwordbasic_auth_pass =""## Optional headers# headers = ["X-From", "categraf", "X-Xyz", "abc"]# timeout settings, unit: mstimeout =5000dial_timeout =2500max_idle_conns_per_host =100

一些配置默认是注释的, 根据自己的需要进行开启.

采集对象等配置项可以重复, 新的对象进行追加就行.

如果是唯一的配置项后面的配置会覆盖前面的, 插件的会覆盖全局的.

一些常用的配置项

interval

采集频率,如果这个配置注释掉了,就会复用 config.toml 中的采集频率,这个配置如果配置成数字,单位就是秒,如果配置成字符串,就要给出单位

interval =60interval ="60s"interval ="1m"

instances

很多采集插件的配置中,都有 instances 配置段,用 [[]] 包住,说明是数组,即,可以出现多个 [[instances]]

[[instances]]
targets = [
"www.baidu.com",
"127.0.0.1"]
[[instances]]
targets = [
"10.4.5.6",
"10.4.5.7"]

interval_times

instances 下面如果有 interval_times 配置,表示 interval 的倍数,比如ping监控,有些地址采集频率是15秒,有些可能想采集的别太频繁,比如30秒,那就可以把interval配置成15,把不需要频繁采集的那些instances的interval_times配置成2

labels

instances 下面的 labels 和 config.toml 中的 global.labels 的作用类似,只是生效范围不同,都是为时序数据附加标签,instances 下面的 labels 是附到对应的实例上,global.labels 是附到所有时序数据上

日志采集

categraf从0.1.2版本开始支持发送日志到日志网关(http/tcp),0.1.8版本支持发送日志到kafka。

通过 conf/logs.toml 配置使用, 整体和filefeat类似. 详见官方文档.


Prometheus Agent

Categraf 也支持采集 Prometheus 指标。它可以把prometheus采集配置直接拿来使用。

global:
scrape_interval: 15s
external_labels:
scraper: ksm-test
cluster: test
scrape_configs:
- job_name: "kube-state-metrics"metrics_path: "/metrics"kubernetes_sd_configs:
- role: endpoints
api_server: "https://172.31.0.1:443"tls_config:
ca_file: /etc/kubernetes/pki/ca.crt
cert_file: /etc/kubernetes/pki/apiserver-kubelet-client.crt
key_file: /etc/kubernetes/pki/apiserver-kubelet-client.key
insecure_skip_verify: truescheme: http
relabel_configs:
- source_labels:
[
__meta_kubernetes_namespace,
__meta_kubernetes_service_name,
__meta_kubernetes_endpoint_port_name,
]
action: keep
regex: kube-system;kube-state-metrics;http-metrics
remote_write:
- url: 'http://172.31.62.213/prometheus/v1/write'

traces

categraf对OpenTelemetry Collector做了简单的封装, 用户可以对接各种trace系统。

input

Categraf支持的插件非常多,包括常用的中间件、云平台等。






相关实践学习
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。     相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
目录
相关文章
|
Prometheus 监控 关系型数据库
Linux监控之夜莺
Linux监控之夜莺
1030 0
|
Prometheus 监控 Cloud Native
夜莺自定义告警模板
夜莺自定义告警模板
|
JSON Prometheus 监控
使用redis exporter轻松实现redis监控
上一篇我们讲到使用prometheus和grafana可以实现监控平台,本篇我们以监控redis为例展示如何对中间件进行监控配置。
5596 0
|
9月前
|
存储 前端开发 数据可视化
Grafana Loki,轻量级日志系统
本文介绍了基于Grafana、Loki和Alloy构建的轻量级日志系统。Loki是一个由Grafana Labs开发的日志聚合系统,具备高可用性和多租户支持,专注于日志而非指标,通过标签索引而非内容索引实现高效存储。Alloy则是用于收集和转发日志至Loki的强大工具。文章详细描述了系统的架构、组件及其工作流程,并提供了快速搭建指南,包括准备步骤、部署命令及验证方法。此外,还展示了如何使用Grafana查看日志,以及一些基本的LogQL查询示例。最后,作者探讨了Loki架构的独特之处,提出了“巨型单体模块化”的概念,即一个应用既可单体部署也可分布式部署,整体协同实现全部功能。
2945 70
Grafana Loki,轻量级日志系统
|
11月前
|
Prometheus 监控 Cloud Native
无痛入门Prometheus:一个强大的开源监控和告警系统,如何快速安装和使用?
Prometheus 是一个完全开源的系统监控和告警工具包,受 Google 内部 BorgMon 系统启发,自2012年由前 Google 工程师在 SoundCloud 开发以来,已被众多公司采用。它拥有活跃的开发者和用户社区,现为独立开源项目,并于2016年加入云原生计算基金会(CNCF)。Prometheus 的主要特点包括多维数据模型、灵活的查询语言 PromQL、不依赖分布式存储、通过 HTTP 拉取时间序列数据等。其架构简单且功能强大,支持多种图形和仪表盘展示模式。安装和使用 Prometheus 非常简便,可以通过 Docker 快速部署,并与 Grafana 等可
5292 2
|
监控 应用服务中间件 网络安全
Nightingale——部署客户端采集其他服务器状态信息
Nightingale——部署客户端采集其他服务器状态信息
300 1
Nightingale——部署客户端采集其他服务器状态信息
|
Kubernetes 搜索推荐 应用服务中间件
制作KubeVirt镜像
制作KubeVirt镜像
454 13
|
监控 关系型数据库 MySQL
Nightingale——滴滴夜莺部署【一】
Nightingale——滴滴夜莺部署【一】
417 0
Nightingale——滴滴夜莺部署【一】
|
NoSQL Java Linux
CentOS7下部署Graylog开源日志管理系统
CentOS7下部署Graylog开源日志管理系统
1109 0
CentOS7下部署Graylog开源日志管理系统
|
监控 关系型数据库 MySQL