Linux主机监控最佳实践

介绍 Flashcat 中 Linux 主机监控的最佳实践,覆盖 Categraf 数据采集、hostname/ident 唯一标识、全局标签、业务组绑定、内置仪表盘、告警规则、全局告警和订阅告警配置。

作者 快猫交付团队

1. 概要

本文主要介绍在Flashcat监控系统中,对Linux主机监控的最佳实践,包括如何管理Linux主机,以及对Linux主机做到监控开箱即用的最佳实践。

核心要点摘要

  • Flashcat 中 Linux 主机监控的完整链路包括数据采集、绑定业务组、仪表盘和告警规则四个部分。
  • Categraf 负责采集 Linux 系统指标,config.toml 中的全局标签适合写入 region、idc、env 等不可变信息。
  • 主机唯一标识由 hostname 字段决定,上报后会经过 agent_hostname 到夜莺 ident 的映射。
  • 业务组建议按服务最小单元划分,并配合部门、团队、基础服务、业务服务等标签进行筛选。
  • 告警可按两类模式落地:业务方各自维护本组主机告警,或由 SRE 统一维护全局规则,业务方通过订阅告警接收感兴趣事件。

Linux 主机监控实施路径

步骤 关键配置 目的
1. 数据采集 安装 Categraf,并配置全局标签和 hostname 采集 Linux 指标,形成稳定主机标识
2. 绑定业务组 创建业务组并绑定主机、自定义标签 按团队、服务和职责管理主机
3. 导入仪表盘 导入内置 Linux by Categraf 仪表盘 快速查看本业务组主机指标
4. 配置告警 导入内置规则,或配置全局告警 + 订阅告警 让主机告警自动生效,并按责任方通知

2. 最佳实践

Flashcat对于Linux主机的完整监控,包括数据采集、绑定业务组、仪表盘、告警规则四个方面。

2.1 数据采集

我们使用Categraf采集器来采集Linux相关指标。Categraf的安装请参考:安装说明。安装成功后,Categraf会自动采集Linux系统相关指标。

在最佳实践中,我们建议将不可变标签(比如Linux主机所在的region、idc、env等信息),写入categraf配置文件config.toml 的全局标签中,方便后续对Linux主机的分类查询,具体如下所示:

[global.labels]  
region = "shanghai"  
idc = "shanghai-01"  
env = "prod"

机器的唯一标识取决于 categraf 配置文件(config.toml)中的 hostname 字段的配置,如果为空,则自动提取主机名作为唯一标识。对于中大型公司,通常机器名都是经过规划的,都是唯一的,这种情况就建议使用机器名做唯一标识。对于小型公司,机器名可能会重复,这种情况就建议使用IP地址做唯一标识。配置 hostname="$ip" 则会自动探测本机 IP 地址作为机器唯一标识。如果你想让唯一标识中既包含机器名又包含 IP,也是可以的,比如配置为 hostname="$hostname-$ip"。如果这也可能会重复,那就只能给 hostname 字段写死一个唯一的值了。

hostname 字段的值最终会放到指标的 agent_hostname 标签中上报,使用 ./categraf --test 就可以看到采集到的内容。指标推送到夜莺服务端之后,夜莺会把 agent_hostname 标签 rename 成 ident 标签,所以在夜莺体系里,最终是通过 ident 字段来区分不同的机器。

2.2 绑定业务组

Categraf采集器启动后,机器会自动注册至Flashcat当中,我们在Flashcat中创建业务组,对机器进行分组管理,即将机器绑定到相应的业务组中。

最佳实践中,业务组的命名,我们建议以服务最小单元为粒度进行划分。比如:基础架构-DBA团队,既管理MySQL数据库,又管理Oracle数据,建议分别创建业务组“基础架构-DBA-MySQL”、“基础架构-DBA-Oracle”,将运行MySQL的主机绑定至“基础架构-DBA-MySQL”下面,将运行Oracle的主机,绑定至“基础架构-DBA-Oracle”下面。

绑定业务组时,我们建议同时为Linux主机绑定自定义标签(自定义标签连同上报的全局标签,会出现在机器的Prometheus监控指标中),方便后续的数据筛选。建议标签可以体现部门(dept)、团队(group)、具体服务(infra_service=“mysql”, service=“map”, 这里我们区分一下基础服务和业务服务)等信息,如下图所示:

2.3 仪表盘

我们在对应业务组中,导入内置仪表盘(Linux by Categraf),就可以看到Linux监控数据。

内置Linux仪表盘

如果我们只想在仪表盘中看到本业务组的机器指标,可以在仪表盘-大盘变量中,将ident的变量类型改成“机器标识”。如下图所示:

修改大盘变量类型,只看本业务组机器

2.4 告警规则

对于Linux主机的告警规则配置,不同的运维模式有不同的配置最佳实践,大体可以分为两大类:

场景一:各自运维自己所属的Linux主机

在该模式下,业务在自己的业务组中,导入内置告警规则 Linux by Categraf,根据自身情况,调整阈值、告警通知规则。建议用户在告警规则中开启“仅在本业务组生效”开关,这样,只有本业务组的机器,触发告警条件时,才会发出告警,如下图所示:

修改大盘变量类型,只看本业务组机器

场景二:SRE团队统一运维Linux主机(更常见)

该场景更为常见,SRE统一管理告警规则,统一处理告警。同时,部分业务方可能会对Linux主机告警感兴趣,也想同步接收告警。我们可以使用“全局告警规则”+“订阅告警”的方式来满足需求:

  • 首先,SRE来统一维护Linux主机的全局告警规则,比如在“基础架构-运维-Linux”业务组下,统一管理告警规则。告警规则针对全局生效(关闭“仅在本业务组生效”开关)。我们也可以在告警规则的查询语句中,做一些标签过滤,比如过滤掉大数据相关的机器,因为大数据相关的机器通常告警阈值和在线业务不同。

  • 其次,有时业务方可能也对主机告警感兴趣,想接收告警。此时,我们建议使用“订阅告警”的方式来支持,如下图所示(SRE配置了全局的告警规则,“地图业务方”同步订阅地图业务相关的主机告警,发送给自己),由于我们在“对象列表”中,将机器打上了对应的标签,告警事件中,会自动携带这些标签,所以下面的配置仅将含有service=map的告警事件推送给地图的业务方。通过订阅的方式,业务方无需重复配置告警规则,仅接收感兴趣的告警事件,降低了运维复杂度。

修改大盘变量类型,只看本业务组机器

  • 如果是对其他基础组件订阅告警,比如订阅数据库告警,可以通过 infra_service=“mysql” 且 user_team=“map"来过滤告警,这里注意:
    • user_team:DBA在采集数据库指标时,建议为数据库实例指定user_team标签,方便用户管理;
    • infra_service:如果我们使用Categraf本地采集MySQL,且机器上添加了"infra_service"标签,则数据库指标会携带该标签,如果Categraf远程采集MySQL,我们需要在采集时,建议在采集策略里面,指定"infra_service"标签,方便管理;

2.5 预期效果

通过以上的最佳实践,如果有新的Linux主机上线,我们只需要部署好Categraf采集器,将Linux主机绑定到对应业务组,相关的告警规则、看图策略,会自动生效,做到开箱即用。

3. FAQ

Linux 主机唯一标识应该用主机名还是 IP?

取决于机器命名是否唯一。中大型公司通常主机名经过规划,可以用机器名;如果小型公司机器名可能重复,建议配置 hostname="$ip" 使用本机 IP。也可以组合为 hostname="$hostname-$ip",仍可能重复时需要写死唯一值。

agent_hostnameident 是什么关系?

Categraf 采集后会把 hostname 字段的值放入指标的 agent_hostname 标签。指标推送到夜莺服务端后,夜莺会把 agent_hostname rename 成 ident,最终通过 ident 区分不同机器。

业务组应该怎么划分?

建议以服务最小单元为粒度。例如 DBA 团队同时管理 MySQL 和 Oracle 时,可以分别创建“基础架构-DBA-MySQL”和“基础架构-DBA-Oracle”,再把对应主机绑定到对应业务组。

SRE 统一运维主机时,业务方如何接收自己的告警?

建议由 SRE 维护全局 Linux 主机告警规则,业务方通过“订阅告警”按标签过滤接收。例如只把包含 service=map 的主机告警推送给地图业务方,避免重复配置规则。

延伸路径

继续看解决方案和产品对比

如果你正在做监控、可观测性或故障定位相关选型,建议从解决方案和产品对比继续往下看。

快猫星云 联系方式 快猫星云 联系方式
快猫星云 联系方式
快猫星云 联系方式
快猫星云 联系方式
快猫星云