Skip to content

stark-eagle/linux_monitor

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

基于Go语言实现Linux监控系统

项目简介

这是一个基于Go语言开发的Linux系统监控项目,采用客户端-服务端架构,使用gRPC进行通信,MySQL存储监控数据,并提供Web界面展示监控信息。

系统架构

  • 客户端(client): 收集系统信息(CPU、内存、网络IO等)并发送到服务端
  • 服务端(server): 接收客户端数据,存储到MySQL数据库,提供HTTP API和Web界面
  • Web界面(html): 使用Highcharts展示监控数据的图表界面
  • gRPC服务(services): 定义客户端和服务端之间的通信协议

环境要求

  • Go 1.23.0+
  • MySQL 5.7+
  • Protocol Buffers编译器 (protoc)
  • Linux系统(客户端运行环境)

安装步骤

1. 克隆项目

git clone https://github.com/stark-eagle/linux_monitor.git
cd linux_monitor

2. 安装依赖

go mod tidy

3. 安装Protocol Buffers编译器

# Ubuntu/Debian
sudo apt-get install protobuf-compiler

# CentOS/RHEL
sudo yum install protobuf-compiler

# 或者从官网下载: https://github.com/protocolbuffers/protobuf/releases

4. 编译protobuf文件

cd services
# Windows
build.bat

# Linux/Mac
for dir in */; do
    cd "$dir"
    for proto in *.proto; do
        protoc --go_out=plugins=grpc:. "$proto"
    done
    cd ..
done

5. 数据库配置

5.1 创建数据库

CREATE DATABASE monitor CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;

5.2 导入数据库结构

mysql -u root -p monitor < monitor.sql

5.3 修改数据库连接配置

编辑 server/db.go 文件中的数据库连接参数:

const (
    USERNAME = "root"        // 数据库用户名
    PASSWORD = "123456"      // 数据库密码
    NETWORK  = "tcp"
    SERVER   = "127.0.0.1"   // 数据库服务器地址
    PORT     = 3306          // 数据库端口
    DATABASE = "monitor"     // 数据库名
)

运行步骤

1. 启动服务端

cd server
go run .

服务端将启动两个服务:

  • gRPC服务:监听端口 30001(接收客户端数据)
  • HTTP服务:监听端口 808(提供Web界面和API)

2. 配置客户端

编辑 client/config.toml 文件:

server = "192.168.226.133"  # 服务端IP地址
port = 30001                # 服务端gRPC端口
secret = "456123"           # 认证密钥

3. 启动客户端

cd client
go run .

客户端将每5秒向服务端发送一次系统监控数据,包括:

  • 系统初始化信息(CPU信息)
  • 内存使用情况
  • 网络IO统计
  • CPU使用率

4. 访问Web界面

打开浏览器访问:

  • 主页:http://服务端IP:808/
  • 监控页面:http://服务端IP:808/show.html?id=客户端ID

项目结构说明

本项目采用“客户端(采集)- 服务端(存储/接口)- 前端(展示)- gRPC 协议定义”的分层结构。核心目录与文件说明如下。

  • 根目录

    • go.mod / go.sum:Go 模块与依赖管理
    • monitor.sql:数据库结构与存储过程定义(初始化数据库时导入)
    • README.md:项目说明文档
    • main.go:占位入口(当前未使用)
  • client/(客户端,采集并上报)

    • main.go:客户端入口,读取配置、生成客户端ID、循环每5秒采集并通过 gRPC 上报
    • config.toml:客户端配置(server、port、secret)
    • confutils.go:读取与解析 config.toml
    • idutils.go:生成并持久化客户端唯一ID(基于网卡信息的MD5)
    • functions.go:系统信息采集封装
      • getMem:内存数据
      • getCPU:CPU 基础信息
      • getCPUPercent:CPU 使用率
      • getNetIO:网络 IO 统计
      • getDiskPartition / getDiskUsage:磁盘信息(目前未对接上报)
    • proto.go:gRPC 客户端调用封装(sendInit / sendMemory / sendNetIO / sendCPUPercent 等)
    • proto.go 中使用的消息与服务来自 services/client 生成代码
  • server/(服务端,gRPC 接收 + HTTP API + 数据库)

    • main.go:服务端入口
      • 初始化数据库连接
      • 启动 gRPC 服务(端口 30001)
      • 启动 HTTP 服务(端口 808)
    • proto.go:gRPC 服务实现(Client 服务)
      • Init:客户端注册(校验 secret,写入硬件信息)
      • Memory:上报内存数据
      • Network:上报网络数据(当前仅打印)
      • CPUPercent:上报 CPU 使用率
    • db.go:数据库访问与存储过程调用
      • sqlOpen / sqlQuery:数据库连接/查询
      • registerClient:注册客户端(call register_client)
      • addMemory:写入内存数据(call insert_memory)
      • addCPUPercent:写入 CPU 使用率(call insert_cpu_percent)
      • getMemory:查询内存曲线(call select_memory + 获取最大时间戳)
      • getCPUPercent:查询 CPU 使用率曲线(call select_cpu_percent_with_time + 获取最大时间戳)
      • getClient:查询所有客户端 ID(select id from info)
    • handler.go:HTTP 路由与处理
      • GET /:健康检查
      • GET /api/client/get:查询所有客户端 ID
      • GET /api/cpu/get?id={id}&time={last}&limit={n}:查询CPU使用率曲线
      • GET /api/memory/get?id={id}&time={last}&limit={n}:查询内存曲线
      • 统一设置 CORS 头,返回 JSON
  • services/(gRPC 协议与生成代码)

    • client/:客户端与服务端交互的 proto 定义与生成代码(client.proto / client.pb.go)
    • data/、ping/、test/:其他 proto 示例/模块
    • build.bat:Windows 环境下批量生成 *.pb.go 的脚本(protoc 命令)
  • html/(前端静态页面)

    • index.html:主页
    • show.html:图表展示页(通过 HTTP API 获取数据)
    • code/、jq/、graphics/ 等:Highcharts、jQuery、样式与图形资源
  • .idea/:IDE 工程文件

  • .gitignore:Git 忽略规则

运行时端口与路径约定

数据库对象(与代码对应的存储过程/表)

  • 存储过程(在 monitor.sql 中定义并被服务端调用):
    • register_client(注册客户端,使用于 server/db.go: registerClient)
    • insert_memory(写入内存数据,使用于 server/db.go: addMemory)
    • insert_cpu_percent(写入 CPU 使用率,使用于 server/db.go: addCPUPercent)
    • select_memory(查询内存曲线,使用于 server/db.go: getMemory)
    • select_cpu_percent_with_time(查询 CPU 曲线,使用于 server/db.go: getCPUPercent)
  • 表:
    • info(至少包含 id 字段,server/db.go 的 getClient 通过 select id from info 获取客户端列表)

gRPC 与客户端上报流程概览

  1. 客户端启动,读取 config.toml 并生成唯一 ID(idutils.go)
  2. 周期性采集系统信息(functions.go)
  3. 通过 gRPC 调用服务端接口(proto.go -> services/client):
    • Init:注册客户端与硬件信息
    • Memory:上报内存
    • Network:上报网络 IO(当前服务端打印)
    • CPUPercent:上报 CPU 使用率
  4. 服务端写库并提供 HTTP 接口给前端页面查询展示

About

基于Go语言实现Linux监控系统

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages