三夜莺n9e(Flashcat)监控采集器categraf

一categraf监控采集器github介绍

1代码仓库:https://github.com/flashcatcloud/categraf/
或者在夜莺flashcat的官网下:https://flashcat.cloud/download/

image.png
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目录下可以看各种采集不同模块

image.png

3进入其中一个模块
alert-xxxx.json就是告警规则的json,可以直接导入到夜莺
dashboard就是大盘的json,可以直接导入到夜莺

image.png

image.png
4k8s的监控采集说明没有在input目录下,它在和input平级的目录下
image.png

二categraf配置文件

相关介绍来自:https://flashcat.cloud/docs/content/flashcat-monitor/categraf/3-configuration/
categraf启动时 可以通过-configs参数指定配置目录,如果不指定,会默认读取工作目录下的conf。 conf 目录结构如下:

  • config.toml # 主配置
  • logs.toml # logs-agent 配置
  • prometheus.toml # prometheus agent 配置
  • traces.yaml # trace-agent 配置
  • conf/input./.toml 插件配置文件(metrics.agent的逻辑和功能)
    • 配置文件中一般会有个instance,每个instance一般对应一个采集对象
    • 如果要采集多个对象,需要配置多个instance
(一)主配置文件
[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
(二) conf/input./.toml 插件配置文件

以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"
1. interval
  • interval=15 #采集周期是15s
    interval = 60
    interval = “60s”
    interval = “1m”
    可以使用的单位有:秒:s 分钟:m 小时:h
  • timeout = 5 #脚本执行的超时时间。5s没返回认为超时
  • interval_times = 1 #表示 interval 的倍数,这个[[instances]]里面的脚本的执行周期为interval_times的值乘以最上面interval的值
  • data_format = “influx” #采集脚本的数据格式
2. instances

很多采集插件的配置中,都有 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"
]
3. 关于tls的配置
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证书,客户端证书,客户端私钥。

4. 隐藏了一些无用指标输出

假设,我想 drop 掉以 timestamp 结尾的指标,可以这么配置:

[[instances]]
targets = [
     "https://flashcat.cloud"
]

metrics_drop = ["*timestamp"]

如果我只想保留以 timestamp 结尾的指标,忽略其他指标

[[instances]]
targets = [
     "https://flashcat.cloud"
]

metrics_pass = ["*timestamp"]
5. 为指标增加前缀

所有针对 flashcat.cloud 的探测指标,统一增加了 ulricqin_ 的前缀。

[[instances]]
targets = [
     "https://flashcat.cloud"
]

metrics_name_prefix = "ulricqin_"
6. 数据转换

从 InternalConfig 中可以看到还有一个配置是 processor_enum,这个是用于数据转换的,比如某些插件采集的数据可能是可枚举的字符串,字符串无法写入 Prometheus 生态的时序库,此时要把这些可枚举的字符串转换为数字。

[[processor_enum]]
  metrics = ["*status"]
  [processor_enum.value_mappings]
    up = 1
    down = 0

针对 status 结尾的指标,采集到了两个值,一个是 up 一个是 down,都是字符串,然后通过 processor_enum 把字符串转换成了不同的数字。

(三) conf/logs.toml配置文件

https://flashcat.cloud/docs/content/flashcat-monitor/categraf/4-logs-agent/

(四) conf/prometheus-agent配置文件

https://flashcat.cloud/docs/content/flashcat-monitor/categraf/5-prometheus/

(五) conf/traces-agent配置配置文件

https://flashcat.cloud/docs/content/flashcat-monitor/categraf/6-traces/

三categraf的使用

官网下载包,解压

image.png
conf下有各个插件,config.toml是主配置文件。
以input.开头就会识别这个模块。 也可以自己建input.xxx的目录。把配置文件放进去

image.png

如果要一次性测试、查看多个插件的输出:./categraf --test --inputs mysql:cpu:mem, 注意使用冒号来分割多个插件。
(test模式,只是模拟采集数据,不会真正上报)
如./categraf --test --inputs cpu

image.png

修改完配置文件,重启categraf
导入大盘和告警规则

四提问和报bug

<think>嗯,用户现在问的是如何在夜监控的仪表盘中定义变量。首先,我需要回忆一下夜监控的相关文档和常见用法。变量在仪表盘中通常用于动态筛选数据,比如选择不同的主机、服务或者时间范围,这样用户就不用每次都手动修改查询语句了。 用户之前问过关于categraf的input.docker插件获取的指标,现在转向夜的仪表盘变量,可能是他们在搭建监控系统,先收集了Docker的指标,现在需要在前端展示时进行动态过滤。所以用户可能已经配置好了数据源,现在需要优化仪表盘的交互性。 接下来,我需要考虑变量定义的具体步骤。夜监控基于Grafana,所以变量定义应该和Grafana类似,但可能有自己的术语或界面差异。需要确认夜的变量类型有哪些,比如查询变量、自定义变量、时间间隔变量等。 用户可能需要知道如何创建变量,比如在哪里添加变量,如何命名,选择哪种类型,以及如何关联数据源。比如,如果用户想动态选择主机名,可能需要使用查询变量,从Prometheus或其他数据源中获取label_values。或者使用自定义变量让用户手动输入选项。 另外,变量在查询中的引用方式也很重要,比如$hostname这样的格式。可能需要举例说明如何在指标查询中使用变量,以及如何设置变量的默认值或多选功能。 还需要注意变量定义时的常见问题,比如数据源是否正确,查询语句是否有语法错误,变量是否被正确引用等。可能用户会遇到变量不显示数据或者选项为空的情况,这时候需要检查数据源的连接和查询语句的正确性。 最后,用户可能需要一个具体的示例,比如创建一个主机名的变量,或者服务名称的变量,这样他们可以跟着步骤操作。同时,提醒用户变量定义的位置通常在仪表盘设置里,如何进入编辑模式,找到变量配置的部分。 总结一下,回答需要涵盖变量类型、创建步骤、查询示例、引用方法以及常见问题处理,这样用户能全面了解如何在夜中定义和使用变量来增强仪表盘的交互性。</think>以下是 **夜监控仪表盘变量定义的详细说明**,涵盖变量类型、语法规则及实战示例: --- ### 一、**变量核心作用** - **动态筛选数据**:通过变量控制面板内容(如切换主机、服务、机房等) - **复用仪表盘**:同一仪表盘适配不同监控对象(如开发/生产环境) - **简化查询**:在PromQL或查询语句中引用变量(例如:`$host`) --- ### 二、**变量定义入口** 1. 进入仪表盘 → 点击右上角 **`设置`** → 左侧菜单选择 **`变量`** 2. 点击 **`新增变量`** 按钮 --- ### 三、**变量类型详解** #### 1. **查询型变量**(最常用) - **数据源**:从监控数据中动态提取值(如主机名列表) - **配置示例**: ```yaml 名称:host # 变量引用名,如 $host 标签:选择主机 # 面板显示的名称 类型:查询 数据源:Prometheus # 需与面板数据源一致 刷新方式:On Dashboard Load # 加载仪表盘时更新 查询语句:label_values(up{job="node_exporter"}, instance) # 获取所有存活主机的instance标签值 多选:✅ 开启 # 允许同时选多个值 全选:✅ 开启 # 增加“All”选项 ``` #### 2. **自定义变量** - **场景**:固定选项(如环境类型) - **配置示例**: ```yaml 名称:env 标签:环境 类型:自定义 值列表:dev,test,prod # 用逗号分隔 默认值:prod ``` #### 3. **时间间隔变量** - **场景**:动态调整图表时间粒度 - **配置示例**: ```yaml 名称:interval 标签:粒度 类型:间隔 值列表:10s,30s,1m,5m 默认值:1m ``` --- ### 四、**变量在查询中的引用** #### 1. **PromQL中的引用** ```promql # 单值引用 node_cpu_seconds_total{mode="user", instance="$host"} # 多值引用(自动转换为正则匹配) node_memory_MemFree_bytes{instance=~"$host"} ``` #### 2. **标题/描述中的引用** ```markdown 当前选择主机:[[host]] 环境:[[env]] ``` --- ### 五、**高级技巧** #### 1. **级联变量** - **场景**:先选“机房”,再动态加载该机房的主机 - **配置方法**: - 变量1(机房):`label_values(up{job="node_exporter"}, idc)` - 变量2(主机):`label_values(up{idc="$idc"}, instance)` #### 2. **默认值优化** ```yaml # 使用PromQL返回最新活跃主机 query_result(time() - max_over_time(up{instance=~"$host"}[5m])) ``` #### 3. **隐藏变量** - 勾选 **`隐藏`** 选项 → 变量不在面板显示,但可在查询中使用 --- ### 六、**调试与验证** 1. **预览变量值**: - 变量配置页 → 点击 **`更新`** → 查看“当前值”列表 2. **查询日志检查**: ```bash tail -f /var/log/n9e/access.log | grep &#39;variable=host&#39; ``` 3. **常见错误处理**: - **无数据**:检查数据源连通性、查询语法、标签是否存在 - **变量不更新**:确认“刷新”策略是否为`On Time Range Change` --- ### 七、**实战示例** #### 目标:创建按主机和指标筛选的CPU监控看板 1. 定义变量: - `host`: `label_values(node_cpu_seconds_total, instance)` - `mode`: `label_values(node_cpu_seconds_total{mode!="idle"}, mode)` 2. 添加图表: ```promql sum(rate(node_cpu_seconds_total{instance=~"$host", mode="$mode"}[1m])) by (instance) ``` --- 通过合理使用变量,可显著提升仪表盘的灵活性和复用性。建议参考官方文档:[夜变量配置指南](https://flashcat.cloud/docs/content/flashcat-monitor/nightingale-v4/dashboard/templated-dashboards/)
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值