史上最全 Linux 可观测最佳实践分享!建议先收藏~
Linux 操作系统诞生于 1991 年,因稳定、开源、免费、安全、高效等特点,发展迅猛,到目前为止已有许多发行版本,且每款发行版本都拥有一大批用户,形成众多发行版本百花齐放的盛况。
然而也正因为 Linux 版本多种多样,使得用户很难了解各版本之间的产品特点和应用方式,尤其伴随云计算技术与应用的普及,在实际使用过程中,用户在系统部署与维护、数据采集与分析、异常告警等方面面临非常大的挑战。
对象复杂:基础设施、日志、指标、事件、应用性能、前端访问、后台代码
部署困难:同时维护多套监控系统,需要熟悉每个部署环节,实施周期长
系统太多:庞大而又复杂的业务系统,很难做到数据的统一收集、展示
告警风暴:没有有效的告警收敛机制,造成告警洪流
目前市场上比较通用的做法有两种:一是使用开源软件比如 Zabbix、Prometheus+Grafana、Telegraf + Influxdb,二是购买传统商业监测软件。然而这也会碰到许多棘手的问题,像开源软件虽然免费、透明、可更改,但同时也存在有安全隐患、学习与维护成本高、无技术服务支持等难题;传统商业监测软件功能相对而言又比较分散,需要购买多套软件以实现不同的功能需求,且计费模式欠缺灵活度,用户侧存在较高的成本压力。
为解决这个问题,DataFlux 基于云计算时代的可观测系统标准,帮助实现一个平台既能收集系统所有指标、日志以及链路追踪,又能将精准分析与处理采集数据结果展示展示到同一平台同一页面,和智能检测与全面告警等多项功能。
一键安装:DataKit 是一款驻云官方开发的实时数据采集 agent,支持上百种数据的采集。
统一展示:分为工作空间、场景、视图三位一体,多维度分析。
异常检测:拥有强大的异常检测功能,提供了包括内置检测库和自定义检测库两类检测库。配合告警和关联事件,能帮助您快速发现问题、定位问题、解决问题。
我们这里以常见的主机监测来给大家做一个效果演示。
1、收到钉钉上的告警信息,登录 dataflux 平台。(需预先配置通知对象,可在后面的 Linux 详情介绍中查看操作步骤)
2、点击事件模块可以看到主机名为 df_solution_ecs_007 的服务器同时发生多条告警事件 (包括 CPU 使用率过高,CPU 负载过高)。
3、点击场景 -- Linux 场景视图,选择时间范围(最近 3 天),可以很明显的看到 6 月 9 日 14:34 左右 CPU 视图里的 CPU 负载、CPU 使用率突然飙升;进程视图里看到一个名称为 [crypto] 的进程 CPU 占用 132%,[scan] 进程 CPU 占用 19%。(实际均为挖矿木马)
关于 Linux 可观测最佳实践分享的细节,接下来一一为大家说明。
Linux 可观测最佳实践分享
一、前置条件
1、账号注册
前往官方网站https://www.dataflux.cn/ 注册账号,使用已注册的账号/密码登录。
2、安装 Datakit
1)获取命令
点击 [集成] 模块,右上角 [快速获取 DataKit 安装命令],根据您的操作系统和系统类型选择合适的安装命令。
2)执行安装
复制 Datakit 安装命令在需要被监控的服务器上直接运行。
安装目录 /usr/local/datakit/
日志目录 /var/log/datakit/
主配置文件 /usr/local/datakit/conf.d/datakit.conf
插件配置目录 /usr/local/datakit/conf.d/
二、安装部署
1、添加插件
1)默认插件
Datakit 安装完成后,已经默认开启 Linux 主机常用插件,可以在内置视图查看。
2)日志插件
编辑日志插件文件 logging.conf,添加系统日志,安全日志检测
cd /usr/local/datakit/conf.d/log/
cp logging.conf.sample logging.conf
vim logging.conf
systemctl restart datakit
2、内置视图
点击 [基础设施] 模块,查看所有已安装 Datakit 的主机列表以及基础信息,如主机名,CPU,内存等。
点击 [主机名] 可以查看该主机的详细系统信息,集成运行情况 (该主机所有已安装的插件),内置视图(主机)。
点击 [集成运行情况] 任意插件名称 [查看监控视图] 可以看到该插件的内置视图。
点击 [基础设施] 模块,[进程] 查看所有进程运行状态
3、添加场景
创建场景
点击 [场景] 模块,新建场景
选择 [Linux 主机监控场景],添加描述并确认。
查看 [Linux 主机监控场景],可以通过 [主机名] 进行筛选。
4、添加检测库
默认检测库
点击 [异常检测库] 模块,可以看到默认已经配置 [主机检测库],可以根据实际情况添加异常检测规则。
点击任意 [规则名称],查看具体检测规则和内容。
三、指标详情
1、CPU
1)指标列表
2)指标详解
系统 CPU 使用率就是除了空闲时间外的其他时间占总 CPU 时间的百分比。
系统 CPU 使用率,不仅包括进程用户态的内核态的运行,还包括中断处理、等待 I/O 以及内核线程等。所以当你发现系统 CPU 使用率很高的时候,不一定能找到相应的高 CPU 使用率的进程。
中断是指 CPU 执行程序时,由于发生了某种随机的事件 (硬中断或软中断),引起 CPU 暂时中断正在运行的程序,转去执行一段特殊的服务程序 (称为中断服务程序或中断处理程序),以处理该事件,该事件处理完后又返回被中断的程序继续执行。
3)故障排查
IOwait 高可能导致负载高,存在频繁写入或 I/O 瓶颈,结合 I/O 状态指标查看。
核心态 CPU 高,应该优先排查内核线程和系统调用情况。
系统 CPU 在满负荷运行时,可参考下列分布:用户态:65%~70%;核心态:30%~35%;空闲率:0%~5%
2、内存
1)指标列表
2)指标详解
Buffers (缓冲) 是内核缓冲区用到的内存,对应的是 /proc/meminfo 中的 Buffers 值。它对原始磁盘块的临时存储,也就是用来缓存磁盘的数据,通常不会太大。这样内核可以把分散的写集中起来统一写入,减少对磁盘写入操作。
Cache (缓存) 是内核页缓存和 Slab 用到的内存,对应的是 /proc/meminfo 中的 Cached 与 SReclaimable 之和。它是从磁盘读取文件的页缓存,也就是用来缓存从文件读取的数据。这样,下次访问文件数据时直接通过内存,而减少对磁盘的读取操作。
3)故障排查
OOM (内存溢出) 主机上的内存可能会被耗尽,并且内核将无法回收足够的内存用于运行新的程序,为了保存系统的其余部分,内核会调用 OOM killer 杀掉一些进程,以释放内存,可以从系统日志文件 messages 中查看。
3、磁盘
1)指标列表
2)指标详解
索引节点,简称 Inode,用来记录文件的元数据,比如 inode 编号、文件大小、访问权限、修改日期等。索引节点和文件一一对应,它跟文件内容一样,都会被持久化存储到磁盘,索引节点也会占用磁盘空间。
3)故障排查
磁盘空间充足,但是无法写入数据,可以查看 Inode 使用率 (一般由于小文件过多导致)。
4、IO
1)指标列表
2)指标详解
读写流量是指每秒 I/O 的请求大小,也就是传输速率。
读写响应时间是指 I/O 从发出到收到响应的时间间隔。
IOPS (Input/Output Per Second),I/O 每秒的请求次数。
3)故障排查
在数据库等大量小文件随机读写比较多的场景中,IOPS 更能反映系统性能;而在多媒体等顺序读写比较多的场景中读写流量才更能反映系统性能。
5、网络
1)指标列表
2)指标详解
网络流量是指当前两个网络端点之间的数据传输率,通常以 b/s 或 B/s 为单位。
网络包传输速率 (Packet Per Second),用来评估网络的转发能力,比如硬件交换机,通常可以达到线性转发 (即 pps 可以达到接近理论的最大值)。而基于 Linux 服务器的转发,则容易受到网络包大小的影响。
6、交换分区
1)指标列表
2)指标详解
Swap 分区在系统的物理内存不够用的时候,把硬盘中的一部分空间释放出来,以供当前运行的程序使用。
7、系统
1)指标列表
2)指标详解
系统 CPU 平均负载是指单位时间内系统处于 可运行状态 和 不可中断状态 的平均进程数,也就是平均活跃进程数。它和 CPU 使用率并没有直接关系。
可运行状态是指正在使用 CPU 或者 正在等待 CPU 的进程,也就是我们常用 ps 命令可以看到的,处于 R 状态 (Running 或 Runnable) 的进程。
不可中断状态是指正处于内核态关键流程中的进程,并且这些流程是不可打断的,比如最常见的等待硬件设备 I/O 响应,在 ps 命令中看到的是 D 状态 (Uninterruptible Sleep) 的进程。
3)故障排查
CPU 平均负载高,可能是 CPU 密集型应用进程导致。
I/O 密集型应用可能导致平均负载高但是 CPU 使用率不高。
一般来说单核 CPU 平均负载 <2 时,系统性能良好;当 >5 时,那么就表明这个主机存在严重的性能问题。
8、进程
1)指标列表
2)指标详解
僵尸进程是当子进程比父进程先结束,而父进程又没有回收子进程,释放子进程占用的资源,此时子进程将成为一个僵尸进程。如果父进程先退出 ,子进程被 init 接管,子进程退出后 init 会回收其占用的相关资源。
关于可观测的实践内容,可语雀搜索“Linux 可观测最佳实践”了解更多~
评论