夜莺系列 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支持的插件非常多,包括常用的中间件、云平台等。






相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
目录
相关文章
|
运维 监控 数据可视化
ELK日志监控分析系统的探索与实践(二):利用Metricbeat监控服务器系统指标
在ELK日志监控分析系统的探索与实践(一)中,我们介绍了如何利用ELK+Filebeat监控Springboot项目的日志,本篇则是重点介绍如何利用ELk+Metricbeat监控服务器系统CPU、内存、磁盘等系统指标。
ELK日志监控分析系统的探索与实践(二):利用Metricbeat监控服务器系统指标
|
5月前
|
Kubernetes 监控 数据安全/隐私保护
普罗米修斯监控k8s
普罗米修斯监控k8s
97 1
|
4月前
|
Prometheus 监控 Kubernetes
在k8S中,blackbox主要是监控什么的?
在k8S中,blackbox主要是监控什么的?
|
7月前
|
数据采集 运维 监控
添加监控
添加监控 “【5月更文挑战第3天】”
54 8
|
7月前
|
分布式计算 资源调度 Java
YarnJMX监控
YarnJMX监控
454 2
|
7月前
|
Prometheus 监控 关系型数据库
监控数据的几种采集方式
【1月更文挑战第14天】
|
Prometheus Kubernetes 监控
k8s的监控
k8s的监控
178 0
|
数据采集 Prometheus 监控
【夜莺监控】海王——Categraf
【夜莺监控】海王——Categraf
|
Prometheus 监控 Cloud Native
【夜莺监控】初识夜莺,还是强!
【夜莺监控】初识夜莺,还是强!
|
监控 机器人
夜莺系列 2 告警管理
夜莺的告警管理
684 0