1代码仓库:https://github.com/flashcatcloud/categraf/
或者在夜莺flashcat的官网下:https://flashcat.cloud/download/
categraf-v0.2.36-linux-amd64-with-cgo-plugin.tar.gz # 带 cgo 插件的版本,目前cgo插件有两个 oracle 和 arp
categraf-v0.2.41-linux-amd64.tar.gz # linux + amd64 环境下运行的版本
categraf-v0.2.41-linux-arm64.tar.gz # linux + arm64 环境下运行的版本
categraf-v0.2.41-windows-amd64.zip # windows + amd64 环境下运行的版本
categraf-v0.2.41-windows-arm64.zip # windows + arm64 环境下运行的版本
2其中input目录下可以看各种采集不同模块
3进入其中一个模块
alert-xxxx.json就是告警规则的json,可以直接导入到夜莺
dashboard就是大盘的json,可以直接导入到夜莺
4k8s的监控采集说明没有在input目录下,它在和input平级的目录下
相关介绍来自:https://flashcat.cloud/docs/content/flashcat-monitor/categraf/3-configuration/
categraf启动时 可以通过-configs参数指定配置目录,如果不指定,会默认读取工作目录下的conf。 conf 目录结构如下:
[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
# 如果是写入文件,最大写入大小,单位是MB
max_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: 2000
batch = 2000
# channel(as queue) size
chan_size = 10000
# 后端backend配置,在toml中 [[]] 表示数组,所以可以配置多个writer
# 每个writer可以有不同的url,不同的basic auth信息
[[writers]]
# 注意端口号
# v5版本端口是19000
# v6版本端口是17000
url = "http://127.0.0.1:19000/prometheus/v1/write"
# Basic auth username
basic_auth_user = ""
# Basic auth password
basic_auth_pass = ""
# timeout settings, unit: ms
#推送一次指的标超时时间
timeout = 5000
#连接后端的超时时间
dial_timeout = 2500
#每个机器最大空闲连接数
max_idle_conns_per_host = 100
# 是否开启push gateway
[http]
enable = false
address = ":9100"
print_access = false
run_mode = "release"
# 是否启用告警自愈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"
# 心跳上报(附带资源信息,对象列表中使用)给夜莺v6
# 如果是v5版本,这里不需要保留
[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
以exec模块的配置为例
# # collect interval
# interval = 15
[[instances]]
# # commands, support glob
commands = [
"/opt/categraf/scripts/*/collect_*.sh"
#"/opt/categraf/scripts/*/collect_*.py"
#"/opt/categraf/scripts/*/collect_*.go"
#"/opt/categraf/scripts/*/collect_*.lua"
#"/opt/categraf/scripts/*/collect_*.java"
#"/opt/categraf/scripts/*/collect_*.bat"
#"/opt/categraf/scripts/*/collect_*.cmd"
#"/opt/categraf/scripts/*/collect_*.ps1"
]
# # timeout for each command to complete
# timeout = 5
# # interval = global.interval * interval_times
# interval_times = 1
# # mesurement,labelkey1=labelval1,labelkey2=labelval2 field1=1.2,field2=2.3
data_format = "influx"
秒:s
分钟:m
小时:h
很多采集插件的配置中,都有 instances 配置段,用 [[]] 包住,说明是数组,即,可以出现多个 [[instances]] 配置段
[[instances]]
targets = [
"www.baidu.com",
"127.0.0.1",
"10.4.5.6",
"10.4.5.7"
]
也可以下面这样子配置:
[[instances]]
targets = [
"www.baidu.com",
"127.0.0.1"
]
[[instances]]
targets = [
"10.4.5.6",
"10.4.5.7"
]
use_tls = false
tls_min_version = "1.2"
tls_ca = "/etc/categraf/ca.pem"
tls_cert = "/etc/categraf/cert.pem"
tls_key = "/etc/categraf/key.pem"
## Use TLS but skip chain & host verification
insecure_skip_verify = true
use_tls 为true时,表示使用tls连接mysql。 如果正式是自签证书,想要避免 X509: certificate signed by unknown authority 错误,可以设置 insecure_skip_verify = true
注意 目前的设计两个参数是共同起作用的,单独设置insecure_skip_verify = true无法避免 X509: certificate signed by unknown authority。
tls_min_version 表示支持的最小tls版本,可选值是1.0 1.1 1.2 1.3 分别对应 TLS1.0 到TLS1.3 。 SSLv3 不支持。
tls_ca tls_cert tls_key 分别是ca证书,客户端证书,客户端私钥。
假设,我想 drop 掉以 timestamp 结尾的指标,可以这么配置:
[[instances]]
targets = [
"https://flashcat.cloud"
]
metrics_drop = ["*timestamp"]
如果我只想保留以 timestamp 结尾的指标,忽略其他指标
[[instances]]
targets = [
"https://flashcat.cloud"
]
metrics_pass = ["*timestamp"]
所有针对 flashcat.cloud 的探测指标,统一增加了 ulricqin_ 的前缀。
[[instances]]
targets = [
"https://flashcat.cloud"
]
metrics_name_prefix = "ulricqin_"
从 InternalConfig 中可以看到还有一个配置是 processor_enum,这个是用于数据转换的,比如某些插件采集的数据可能是可枚举的字符串,字符串无法写入 Prometheus 生态的时序库,此时要把这些可枚举的字符串转换为数字。
[[processor_enum]]
metrics = ["*status"]
[processor_enum.value_mappings]
up = 1
down = 0
针对 status 结尾的指标,采集到了两个值,一个是 up 一个是 down,都是字符串,然后通过 processor_enum 把字符串转换成了不同的数字。
https://flashcat.cloud/docs/content/flashcat-monitor/categraf/4-logs-agent/
https://flashcat.cloud/docs/content/flashcat-monitor/categraf/5-prometheus/
https://flashcat.cloud/docs/content/flashcat-monitor/categraf/6-traces/
官网下载包,解压
conf下有各个插件,config.toml是主配置文件。
以input.开头就会识别这个模块。 也可以自己建input.xxx的目录。把配置文件放进去
如果要一次性测试、查看多个插件的输出:./categraf --test --inputs mysql:cpu:mem
, 注意使用冒号来分割多个插件。
(test模式,只是模拟采集数据,不会真正上报)
如./categraf --test --inputs cpu
修改完配置文件,重启categraf
导入大盘和告警规则