Linux性能监控:sar的可视化方案
在当今的IT环境中,系统性能监控是确保应用程序稳定运行和快速响应问题的关键。Linux作为一种广泛使用的操作系统,拥有多种性能监控工具,其中sar(System Activity Reporter)因其全面性和灵活性被广泛采用。然而,传统的sar输出格式为文本,虽然有生成图的功能 ,但不易于快速分析和实时监控。为了克服这一不足,本文设计了一套完整的可视化方案,通过实时展示sar的数据,极大地提升了性能监控的效率和直观性。
方案设计
- sar:sysstat中的性能监控工具
sar是sysstat工具包中的一个核心组件,能够从系统的多个方面(如CPU、内存、I/O、网络等)收集性能数据。使用命令sar -A 1可以每秒采集一次系统的全面性能数据,这为实时监控提供了坚实的数据基础。sar不仅能提供实时数据,还能存储历史数据,便于后续分析。建议使用较新的sysstat版本。
Github链接 - vsar:自研的sar数据处理程序
为了实现sar数据的可视化和实时性,开发了一款名为vsar的小型程序,可免费用于非商业用途。具备极低的资源占用,能够高效处理实时输出的sar数据以及离线存储的sar日志,并将这些数据写入InfluxDB数据库。vsar的引入,使得sar数据的流式处理成为可能,从而为数据可视化奠定了基础。
Github链接 - InfluxDB:时序数据库
InfluxDB是一款高性能的时序数据库,专为处理时间序列数据而设计。在本文的方案中,InfluxDB用于存储来自vsar的数据。这种结构化的存储方式,使得性能数据的检索和分析更加高效。InfluxDB的灵活性和可扩展性确保了其能够应对大规模数据处理需求。
Github链接 - Grafana:数据可视化平台
Grafana是一个开源的数据可视化和监控平台,支持多种数据源,包括InfluxDB。在本文的方案中,Grafana用于将存储在InfluxDB中的性能数据进行可视化展示。用户可以通过Grafana的仪表板实时查看系统性能指标,以图形化的方式轻松识别系统状态、趋势和异常。
Github链接
部署方案
在本章节中,我们将详细介绍如何部署这套Linux性能监控方案。整个方案涉及多台机器,分别用于数据采集和可视化展示。我们需要将sar和vsar部署在被监控的机器上,而InfluxDB和Grafana则可以部署在同一台机器上。
部署sar
首先,在被监控的机器上安装sysstat工具包,以便使用sar命令:
对于Debian/Ubuntu系统:
sudo apt install sysstat
对于Red Hat/CentOS系统:
sudo yum install sysstat
或者,也可以源码安装,到Github链接下载sysstat包,本文以sysstat-12.7.6.tgz为例:
(1)先进行解压
tar zxvf sysstat-12.7.6.tgz
(2)进入解压后的sysstat目录后,进行配置
cd sysstat-12.7.6
sh ./configure
(3)编译,确保编译机上安装了gcc
make
(4)安装
make install
(5)查看安装情况
[root@VM-8-2-centos sysstat-12.7.6]# which sar
/usr/local/bin/sar
[root@VM-8-2-centos sysstat-12.7.6]# sar -V
sysstat version 12.7.6
(C) Sebastien Godard (sysstat <at> orange.fr)
[root@VM-8-2-centos sysstat-12.7.6]#
部署vsar
接下来在被监控的机器上安装vsar。打开vsar的Github链接下载vsar包,本文以
vsar_0.0.2.20240725_beta_x64_centos8.tgz 为例,直接拷贝到安装目录解压即可:
tar zxvf vsar_0.0.2.20240725_beta_x64_centos8.tgz
部署influxdb
找一台机器用于部署influxdb。
首先,制作一个源,Debian源和yum源的制作请参考官方指导。
然后,安装influxdb:
对于Debian/Ubuntu系统:
sudo apt install influxdb
对于Red Hat/CentOS系统:
sudo yum install influxdb
部署Grafana
grafana软件可以与influxdb部署在同一台机器上。
首先,制作一个源,Debian源和yum源的制作请参考官方指导。
然后,安装grafana:
对于Debian/Ubuntu系统:
sudo apt install grafana
对于Red Hat/CentOS系统:
sudo yum install grafana
启动程序
启动influxdb
第一步,启动influxdb服务:
sudo systemctl start influxdb
sudo systemctl enable influxdb
第二步,创建数据库:
通过influx命令进行数据库使命行,创建用于存储sar数据的数据库:
[root@VM-8-2-centos ~]# influx
Connected to http://localhost:8086 version 1.8.10
InfluxDB shell version: 1.8.10
>CREATE DATABASE sar_test_db;
>
启动grafana
第一步,启动grafana服务:
sudo systemctl start grafana
sudo systemctl enable grafana
第二步,访问Grafana:
打开浏览器,访问Grafana Web界面(默认端口为3000):
http://82.150.141.106:3000
登录账户默认为admin,登录密码默认为admin。grafana页面如下所示:
启动vsar
第一步,进入vsar的安装目录下的bin目录
[root@VM-8-2-centos bin]# pwd
/usr/local/vsar/bin
[root@VM-8-2-centos bin]# ls
start.sh stop.sh vsar
第二步,查看此软件的用法
[root@VM-8-2-centos bin]# sh start.sh -h
Usage: sh start.sh [OPTION...]
Write sar data into influxdb.USAGE: sh start.sh [-v] [-c] [-h] [-u influxdb_url] [-b batch_cnt] [-H host] [-s sar_command]-b count Data count in one batch-H host Hostname or ip of current machine-u influxdb_url Influxdb url for writing data-s sar_command Specify a sar command instead of 'sar -A 1'-c Copyright information-h Give this help list-v Application version information
第三步,启动vsar软件
通过帮助信息可以知道,启动此软件,需要指定influxdb的写数据url(-u)、一个批次写多少条数据(-b)、主机IP或名称(-H)。
[root@VM-8-2-centos bin]# sh start.sh -u http://localhost:8086/write?db=sar_test_db -H server_centos8 -b 20
[root@VM-8-2-centos bin]# nohup: appending output to 'nohup.out'[root@VM-8-2-centos bin]#
至此,软件服务都启动完毕。
可视化展示
前文中已经启动了所有软件服务,采集到的监控数据都已被写入influxdb中了,接下来就是配置grafana对接influxdb,将数据实时展示出来。
添加数据源
- 首先,登录Grafana,按下图所示,点击"Add new connection",目的是将influxdb配置成grafana的一个数据源。
2. 然后,在下一个页面的搜索框中输入"influxdb”,点击influxDB按钮,操作如下:
3. 接下来,点“Add new data source"。
4. 输入数据源名称和influxdb的url,由于influxdb和grafana都装在一台机器上,所以influxdb的url是http://localhost:8086
5. 填写数据库名称,前文已经创建好的sar_test_db,点击"save & test"验证连通性并保存。
至此,数据库已添加完毕,influxdb已成功接入grafana。
添加dashboard
数据源准备好后,只需要配置dashboard就可以进行数据的图形化展示,步骤如下:
- 选择Dashboards页面
- 新建dashboard
- 添加一个可视化展示
-
选择刚刚创建好的数据源
-
在进入的Edit panel页面中配置查询语句,选择measurement,也就是数据库中的表名。本文以cpu_usage表为例。
-
添加field,也就是要展示的数据项,本文以cpu_usage表的%usr和%sys为例。
-
添加筛选条件,假设要看每个cpu核的情况,而不是all cpu的情况。
-
添加分组条件,以机器host作为第一级分组,以cpu核编号做为第二级分组。
-
保存
-
保存页面需要为此dashboard起个名称。
-
放大数据展示
-
选择要展示的时间段,比如实时展示近15分钟的数据。
-
最终的CPU使用率展示图
性能监控展示示例
用户可以根据自己想展示的数据灵活地编写dashboard的查询语句。以下为一些性能监控的示例:
- CPU监控
2. 内存监控
3. 硬盘监控
4. 文件系统监控
5. 负载监控
6. 网络监控
7. 块设备监控
8. swap监控
9. socket监控
意义
克服传统sar的局限性
传统的sar工具虽然强大,但其输出通常为文本格式,缺乏可视化功能。这使得用户在分析系统性能时往往需要借助其他工具来处理和解释数据,增加了复杂性。通过将sar数据实时导入到InfluxDB并使用Grafana进行可视化展示,我们的方案大大简化了数据分析流程,使得系统性能的监控变得更加直观和高效。
提高监控的实时性
在性能测试过程中,实时性是关键。传统的sar无法提供瞬时的可视化和警报,可能导致关键性能问题被延迟发现。我们的方案通过vsar程序实现了实时数据的采集和传输,使得分析人员可以在Grafana仪表板上立即查看系统状态,并在指标超过阈值时进行报警。这种实时监控能力使团队能够快速响应潜在问题,极大地减少了识别和解决性能瓶颈的时间。
增强性能测试的准确性
性能测试需要对系统在不同负载下的行为进行准确评估。通过本方案,测试人员可以在测试期间实时监控各种性能指标,如CPU利用率、内存消耗、网络带宽等。这种实时的数据反馈使得测试人员能够动态调整测试策略,并更精确地识别系统瓶颈和优化点。
简化数据分析与决策
本方案提供的可视化工具不仅仅是为了实时监控,它还能帮助用户更好地理解历史数据和趋势。通过Grafana的强大可视化功能,管理者能够快速生成报表和分析,支持更明智的决策。可视化数据直观、易懂,为团队沟通和问题解决提供了有力支持。
降低实施复杂性
本文的方案极大地简化了系统监控的部署过程。vsar程序的轻量级设计确保了其在资源消耗方面的优势,使其适用于各种规模的系统。这种降低实施复杂性的特性,不仅减少了学习和配置的成本,还加速了监控系统的部署和使用。
结束语
在现代IT基础设施中,系统性能监控已成为确保业务连续性和优化资源利用的关键环节。传统工具如sar虽然强大,但其在可视化方面的不足,限制了其在复杂和动态环境中的应用。通过引入自研的vsar程序,并结合InfluxDB和Grafana,我们的方案不仅克服了这些不足,还显著提升了监控的实时性和可视化能力。这种一体化的解决方案,使得系统性能监控变得更加直观、准确和高效,大大地提升了系统的可靠性和用户体验。
相关文章:

Linux性能监控:sar的可视化方案
在当今的IT环境中,系统性能监控是确保应用程序稳定运行和快速响应问题的关键。Linux作为一种广泛使用的操作系统,拥有多种性能监控工具,其中sar(System Activity Reporter)因其全面性和灵活性被广泛采用。然而…...

如何录制电脑屏幕视频,5招让您成为电脑录制高手
在今天,屏幕录制成为每个电脑使用者都应掌握的基础技能。不论是教学分享、会议记录还是游戏直播,屏幕录制都能帮你捕捉那些重要的瞬间,将无形的信息转化为有形的视频。那么,如何录制电脑屏幕视频呢?今天,我…...

AI届的新宠:小语言模型(SLM)?
大语言模型(LLM)在过去几年产生了巨大影响,特别是随着OpenAI的ChatGPT的出现,各种大语言模型如雨后春笋般出现,国内如KimiChat、通义千问、文心一言和智谱清言等。 然而,大语言模型通常拥有庞大的参数&…...

PMP模拟题错题本
模拟题A 错题整理 项目经理为一个具有按时完成盈利项目历史记录的组织工作。然而,由于缺乏相关方的支持以及他们未能提供信息,这些项目都经历过问题。若要避免这些问题,项目经理在新项目开始时应该做什么? A. 在启动阶段识别关键…...

Laravel Dusk:点亮自动化测试的明灯
Laravel Dusk:点亮自动化测试的明灯 在Web开发中,确保应用程序的用户体验和功能正确性至关重要。Laravel Dusk是一个强大的浏览器自动化测试工具,它允许开发者模拟用户与应用程序的交互,从而进行端到端的测试。本文将深入探讨Lar…...

Git、Gitlab以及分支管理
分布式版本控制系统 一、Git概述 Git是一种分布式版本控制系统,用于跟踪和管理代码的变更。它由Linus torvalds创建的,最初被设计用于Linux内核的开发。Git 允许开发人员跟踪和管理代码的版本,并且可以在不同的开发人员之间进行协作。 Githu…...

TCP/IP 协议栈介绍
TCP/IP 协议栈介绍 1. 引言 TCP/IP(传输控制协议/互联网协议)是一组用于数据网络中通信的协议集合,它是互联网的基础。本文将详细介绍TCP/IP协议栈的各个层次、工作原理以及其在网络通信中的作用。 2. TCP/IP 协议栈的层次结构 TCP/IP协议…...

香橙派orangepi系统没有apt,也没有apt-get,也没有yum命令,找不到apt、apt-get、yum的Linux系统
以下是一个关于如何在 Orange Pi 上的 Arch Linux 系统中发现缺失包管理器的问题并解决的详细教程。 发现问题 确认系统类型: 使用以下命令检查当前的 Linux 发行版: uname -a cat /etc/os-release如果你看到类似于 “Arch Linux” 的信息,说…...

在invidia jetpack4.5.1上运行c++版yolov8(tensorRT)
心路历程(可略过) 为了能在arm64上跑通yolov8,我试过很多很多代码,太多对库版本的要求太高了; 比如说有一个是需要依赖onnx库的,(https://github.com/UNeedCryDear/yolov8-opencv-onnxruntime-…...

Vue3 接入 i18n 实现国际化多语言
在 Vue.js 3 中实现网页的国际化多语言,最常用的包是 vue-i18n。 第一步,安装一个 Vite 下使用 <i18n> 标签的插件:unplugin-vue-i18n npm install unplugin-vue-i18n # 或 yarn add unplugin-vue-i18n 安装完成后,调整 v…...

深度学习环境坑。
前面装好了之后装pytorch之后老显示gpufalse。 https://www.jb51.net/article/247762.htm 原因就是清华源的坑。 安装的时候不要用conda, 用pip命令 我cuda12.6,4070s cudnn-windows-x86_64-8.9.7.29_cuda12-archive.zip cuda_12.5.1_555.85_windows.…...

LLM——10个大型语言模型(LLM)常见面试题以及答案解析
今天我们来总结以下大型语言模型面试中常问的问题 1、哪种技术有助于减轻基于提示的学习中的偏见? A.微调 Fine-tuning B.数据增强 Data augmentation C.提示校准 Prompt calibration D.梯度裁剪 Gradient clipping 答案:C 提示校准包括调整提示,尽量减少产生…...

MongoDB - 聚合阶段 $count、$skip、$project
文章目录 1. $count 聚合阶段2. $skip 聚合阶段3. $project 聚合阶段1. 包含指定字段2. 排除_id字段3. 排除指定字段4. 不能同时指定包含字段和排除字段5. 排除嵌入式文档中的指定字段6. 包含嵌入式文档中的指定字段7. 添加新字段8. 重命名字段 1. $count 聚合阶段 计算匹配到…...

如何获取文件缩略图(C#和C++实现)
在C中,可以有以下两种办法 使用COM接口IThumbnailCache 文档链接:IThumbnailCache (thumbcache.h) - Win32 apps | Microsoft Learn 示例代码如下: VOID GetFileThumbnail(PCWSTR path) {HRESULT hr CoInitialize(nullptr);IShellItem* i…...

create-vue项目的README中文版
使用方法 要使用 create-vue 创建一个新的 Vue 项目,只需在终端中运行以下命令: npm create vuelatest[!注意] (latest 或 legacy) 不能省略,否则 npm 可能会解析到缓存中过时版本的包。 或者,如果你需要支持 IE11,你…...

Centos 7系统(最小化安装)安装Git 、git-man帮助、补全git命令-详细文章
安装之前由于是最小化安装centos7安装一些开发环境和工具包 文章使用国内阿里源 cd /etc/yum.repos.d/ && mkdir myrepo && mv * myrepo&&lscurl -O https://mirrors.aliyun.com/repo/epel-7.repo;curl -O https://mirrors.aliyun.com/repo/Centos-7…...

Golang零基础入门课_20240726 课程笔记
视频课程 最近发现越来越多的公司在用Golang了,所以精心整理了一套视频教程给大家,这个只是其中的第一部,后续还会有很多。 视频已经录制完成,完整目录截图如下: 课程目录 01 第一个Go程序.mp402 定义变量.mp403 …...

杂记-镜像
-i https://pypi.tuna.tsinghua.edu.cn/simple 清华 pip intall 出现 error: subprocess-exited-with-error 错误的解决办法———————————pip install --upgrade pip setuptools57.5.0 ————————————————————————————————————…...

如何将WordPress文章中的外链图片批量导入到本地
在使用采集软件进行内容创作时,很多文章中的图片都是远程链接,这不仅会导致前端加载速度慢,还会在微信小程序和抖音小程序中添加各种域名,造成管理上的麻烦。特别是遇到没有备案的外链,更是让人头疼。因此,…...

primetime如何合并不同modes的libs到一个lib文件
首先,用primetime 抽 timing model 的指令如下。 代码如下(示例): #抽lib时留一些margin, setup -max/hold -min set_extract_model_margin -port [get_ports -filter "!defined(clocks)"] -max 0.1 #抽lib extract_mod…...

【运维笔记】数据库无法启动,数据库炸后备份恢复数据
事情起因 在做docker作业的时候,把卷映射到了宿主机原来的mysql数据库目录上,宿主机原来的mysql版本为8.0,docker容器版本为5.6,导致翻车。 具体操作 备份目录 将/var/lib/mysql备份到~/mysql_backup:cp /var/lib/…...

成功解决:java.security.InvalidKeyException: Illegal key size
在集成微信支付到Spring Boot项目时,可能会遇到启动报错 java.security.InvalidKeyException: Illegal key size 的问题。这是由于Java加密扩展(JCE)限制了密钥的长度。幸运的是,我们可以通过简单的替换文件来解决这个问题。 解决…...

微服务事务管理(分布式事务问题 理论基础 初识Seata XA模式 AT模式 )
目录 一、分布式事务问题 1. 本地事务 2. 分布式事务 3. 演示分布式事务问题 二、理论基础 1. CAP定理 1.1 ⼀致性 1.2 可⽤性 1.3 分区容错 1.4 ⽭盾 2. BASE理论 3. 解决分布式事务的思路 三、初识Seata 1. Seata的架构 2. 部署TC服务 3. 微服务集成Se…...

测试面试宝典(三十五)—— fiddler的工作原理
Fiddler 是一款强大的 Web 调试工具,其工作原理主要基于代理服务器的机制。 首先,当您在计算机上配置 Fiddler 为系统代理时,客户端(如浏览器)发出的所有 HTTP 和 HTTPS 请求都会被导向 Fiddler。 Fiddler 接收到这些…...

旷野之间32 - OpenAI 拉开了人工智能竞赛的序幕,而Meta 将会赢得胜利
他们通过故事做到了这一点(Snapchat 是第一个)他们用 Reels 实现了这个功能(TikTok 是第一个实现这个功能的)他们正在利用人工智能来实现这一点。 在人工智能竞赛开始时,Meta 的人工智能平台的表现并没有什么特别值得…...

机械学习—零基础学习日志(高数15——函数极限性质)
零基础为了学人工智能,真的开始复习高数 这里我们将会学习函数极限的性质。 唯一性 来一个练习题: 再来一个练习: 这里我问了一下ChatGPT,如果一个值两侧分别趋近于正无穷,以及负无穷。理论上这个极限值应该说是不存…...

树 形 DP (dnf序)
二叉搜索子树的最大键值 /*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode() : val(0), left(nullptr), right(nullptr) {}* TreeNode(int x) : val(x), left(nullptr), right(null…...

React的生命周期?
React的生命周期分为三个主要阶段:挂载(Mounting)、更新(Updating)和卸载(Unmounting)。 1、挂载(Mounting) 当组件实例被创建并插入 DOM 时调用的生命周期方法&#x…...

c# - - - ASP.NET Core 网页样式丢失,样式不对
c# - - - ASP.NET Core 网页样式丢失,样式不对 问题 正常样式是这样的。 修改项目名后,样式就变成这样了。底部的内容跑到中间了。 解决 重新生成解决方案,然后发布网站。 原因: 修改项目名之前的 div 上有个这个自定义属…...

Cannot find module ‘html-webpack-plugin
当你在使用Webpack构建项目时遇到Cannot find module html-webpack-plugin这样的错误,这意味着Webpack在构建过程中找不到html-webpack-plugin模块。要解决这个问题,你需要确保已经正确安装了html-webpack-plugin模块,并且在Webpack配置文件中…...