操作系统需要重点关注指标

机器层面的监控分为两部分,带内监控和带外监控。带内监控就是通过带内网络来监控,主要是以在 OS 里部署 Agent 的方式,来获取 OS 的 CPU、内存、磁盘、IO、网络、进程等相关监控指标。

外监控走的是带外网络,通常和业务网络不互通,通过 IPMI、SNMP 等协议获取硬件健康状况。

IPMI 可用于监控硬件的物理参数,如系统温度、风扇速度、电源电压等,可以有效地利用 IPMI 监控硬件温度、功耗、启动或关闭服务器和系统,以及进行日志记录。IPMI 的一个主要亮点是,它的功能独立于服务器的 CPU 和操作系统。因为固件是直接在服务器主板上运行的,所以不管安装的操作系统是什么,它都可以用于管理各种远程位置的服务器。BMC(服务器基板管理控制器)也可以开启 SNMP 的支持,通过 SNMP Trap 做硬件监控是一个很好的思路。

带内监控,常见的 Agent 有 Categraf、Telegraf、Grafana-agent、Datadog-agent、Node-exporter 等。

Categraf 作为一款 Agent 需要部署到所有目标机器上,因为采集 CPU、内存、进程等指标,是需要读取 OS 里的一些信息的,远程读取不了。采集到数据之后,转换格式,传输给监控服务端。

Categraf 推送监控数据到服务端,走的是 Prometheus 的 RemoteWrite 协议,是基于 Protobuf 的 HTTP 协议,所以所有支持 RemoteWrite 的后端,都可以和 Categraf 对接,比如 Prometheus、Nightingale、TDEngine 等。

Categraf 是插件架构,采集 CPU 指标的是 cpu 插件,采集内存指标的是 mem 插件,采集进程指标的是 procstat 插件,每个插件都有一个配置目录,在 conf 目录下,以 input. 打头。OS 的各类指标采集,大都是读取的 /proc 目录。

1、cpu

cpu 插件的配置文件在 input.cpu 目录,只有两个配置项,interval 和 collect_per_cpu,其中 interval 表示采集频率,所有的插件都有这个配置。而和 CPU 采集相关的配置实际只有一个,就是 collect_per_cpu,它用于控制是否采集每个单核的指标。默认值是 false,表示不采集单核的指标,只采集整机的指标。

CPU 相关的指标,最核心的就是使用率。大型互联网公司,为了应对突发流量,CPU 的平均利用率一般就是 30% 左右。如果平时 CPU 利用率总是超过 60%,就比较危险了。

2、mem

mem 插件的配置文件在 input.mem 目录,核心配置只有一个 collect_platform_fields,它表示是否采集各个平台特有的指标。内存相关的指标,Linux、Windows、BSD、Darwin 都不是完全一样的,内存总量、使用量这类指标所有平台都有,但是其余很多指标都是和平台相关的,比如 Linux 下特有的 swap、huge_page 相关的指标,其他平台就是没有的。

内存相关的指标,最核心的是可用率,即 mem_available_percent。这个值如果小于 30% 就可以发个低级别告警出来了,然后着手扩容。

3、disk

disk 插件的配置文件在 input.disk 目录,默认不用调整,如果某个挂载点不想采集,可以配置到 ignore_mount_points 中,这样就会自动忽略掉对应的挂载点。

硬盘相关的指标,主要关注空间使用率和 inode 使用率。对于空间使用率,85% 一刀切的告警规则不合适,建议考虑大空间的盘和小空间的盘分别对应不同的告警规则。

4、diskio

diskio 插件的配置文件在 input.diskio 目录,默认不用调整,如果只想采集某几个盘的 IO 数据,可以使用 devices 配置进行限制。硬盘 IO 相关的指标,主要关注读写延迟,所谓的 IO.UTIL 这种指标基本不用太关注。

5、net

net 插件的配置文件在 input.net 目录,默认不用调整,如果只想采集某个特定网卡的数据,可以修改 interfaces 配置。不过网卡丢包是需要关注的,比如长期每秒几十个丢包,就有理由怀疑是硬件的问题了。

6、netstat

netstat 插件的配置文件在 input.netstat 目录,默认不用调整,tcp_time_wait 指标就是靠这个插件采集的。

7、processes

processes 插件的配置文件在 input.processes 目录,默认不用调整。最常见的指标是进程总量,如果某个机器进程总量超过 600,大概率是有问题的,常见的原因比如某个 cron 写"挫"了,每分钟 fork 一个进程,但就是不退出,时间长了就把机器压垮了。

8、conntrack

这个插件就是用来监控 conntrack 的情况的。我们可以配置一条这样的告警规则及时发现问题:conntrack_ip_conntrack_count / ip_conntrack_max > 0.8 就可以告警。

9、kernel_vmstat

kernel_vmstat 插件的配置文件在 input.kernel_vmstat,采集的是 /proc/vmstat 的指标数据。这个文件内容比较多,所以配置文件中给了一个白名单,你可以按需启用,默认启用了 oom_kill。

10、ntp

ntp 插件的配置文件在 input.ntp 目录,需要在配置文件中给出 ntp server 的地址。每个公司都应该有对时机制,很多分布式程序都是重度依赖时间的。监控指标是 ntp_offset_ms,顾名思义,单位是毫秒,一般这个值不能超过 1000,也不能小于 -1000,需要配置告警规则。

11、procstat

rocstat 插件的配置文件在 input.procstat 目录,用于监控进程。进程监控主要是两个方面,一个是进程存活性,一个是进程占用的 CPU、内存、文件句柄等数据。

12、exec

exec 插件的配置文件在 input.exec 目录,用于自定义监控脚本。因为 Agent 虽然内置了很多插件,但有些长尾需求仍然是解决不了的,此时就需要通过自定义监控脚本来扩展监控采集能力。

监控脚本可以是 Shell 的,也可以是 Python、Perl、Ruby 的,只要机器上有对应的执行环境就可以。Agent 会 fork 一个进程来执行,截获进程的 stdout(标准输出),解析成监控数据然后上报。所以脚本采集到数据之后,要格式化成某个特定的格式,打印到 stdout。Categraf 支持三种格式:Prometheus、Influx、Falcon,默认是 Influx 格式。

此文章为8月Day4学习笔记,内容来源于极客时间《运维监控系统实战笔记》,推荐该课程。

相关推荐
ak啊5 天前
基于 Prometheus 的后端服务性能故障监控方案
监控
刘大猫266 天前
Arthas monitor(方法执行监控)
人工智能·后端·监控
可观测性用观测云6 天前
Neo4j 可观测性最佳实践
监控
ak啊7 天前
基于Python的自动化运维中服务器性能监控与告警
python·监控
ak啊11 天前
Sentry 私有化部署监控前端应用
监控
vivo互联网技术18 天前
vivo Trace 监控追求极致的建设历程
监控
企鹅侠客18 天前
Prometheus告警从触发到收到通知延迟在哪?
运维·prometheus·监控
cxy_618 天前
centos7系统搭建nagios监控
监控·nagios
Mike_jia1 个月前
一篇文章带你了解一款强大的全栈监控工具---HertzBeat
监控
佳腾_1 个月前
【Zabbix技术系列文章】第④篇——Zabbix 数据可视化
运维·信息可视化·zabbix·监控