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