Linux主机监控最佳实践

快猫交付团队 2025-04-29 10:00:00

1. 概要

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

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主机绑定到对应业务组,相关的告警规则、看图策略,会自动生效,做到开箱即用。

快猫星云 联系方式 快猫星云 联系方式
快猫星云 联系方式
快猫星云 联系方式
快猫星云 联系方式
快猫星云
OpenSource
开源版
Flashcat
Flashcat