温馨提示×

如何用Go语言编写Linux系统监控工具

小樊
51
2025-10-14 00:40:58
栏目: 编程语言

要用Go语言编写一个Linux系统监控工具,你需要了解一些基本的Linux命令和Go语言的网络编程、文件操作、并发编程等知识。以下是一个简单的示例,展示了如何使用Go语言编写一个基本的Linux系统监控工具,该工具可以实时显示系统的CPU使用率、内存使用情况和磁盘空间。

  1. 首先,确保你已经安装了Go语言。如果没有,请访问https://golang.org/dl/ 下载并安装。

  2. 创建一个新的Go文件,例如:system_monitor.go

  3. 编写以下代码:

package main

import (
	"bufio"
	"fmt"
	"os/exec"
	"strings"
	"time"
)

func getCPUUsage() (string, error) {
	cmd := exec.Command("top", "-bn1")
	output, err := cmd.Output()
	if err != nil {
		return "", err
	}
	scanner := bufio.NewScanner(strings.NewReader(string(output)))
	for scanner.Scan() {
		if strings.Contains(scanner.Text(), "%Cpu(s):") {
			return strings.TrimSpace(strings.Split(scanner.Text(), ":")[1]), nil
		}
	}
	return "", fmt.Errorf("无法获取CPU使用率")
}

func getMemoryUsage() (string, error) {
	cmd := exec.Command("free", "-m")
	output, err := cmd.Output()
	if err != nil {
		return "", err
	}
	scanner := bufio.NewScanner(strings.NewReader(string(output)))
	for scanner.Scan() {
		if strings.Contains(scanner.Text(), "Mem:") {
			memInfo := strings.Fields(scanner.Text())
			return fmt.Sprintf("%s/%sMB (%.2f%%)", memInfo[1], memInfo[2], memInfo[3]*100.0/float64(memInfo[2])), nil
		}
	}
	return "", fmt.Errorf("无法获取内存使用情况")
}

func getDiskUsage() (string, error) {
	cmd := exec.Command("df", "-h")
	output, err := cmd.Output()
	if err != nil {
		return "", err
	}
	scanner := bufio.NewScanner(strings.NewReader(string(output)))
	for scanner.Scan() {
		if strings.Contains(scanner.Text(), "/dev/") {
			diskInfo := strings.Fields(scanner.Text())
			return diskInfo[0], nil
		}
	}
	return "", fmt.Errorf("无法获取磁盘使用情况")
}

func main() {
	for {
		cpuUsage, err := getCPUUsage()
		if err != nil {
			fmt.Println("错误:", err)
		} else {
			fmt.Printf("CPU使用率: %s\n", cpuUsage)
		}

		memoryUsage, err := getMemoryUsage()
		if err != nil {
			fmt.Println("错误:", err)
		} else {
			fmt.Printf("内存使用情况: %s\n", memoryUsage)
		}

		diskUsage, err := getDiskUsage()
		if err != nil {
			fmt.Println("错误:", err)
		} else {
			fmt.Printf("磁盘使用情况: %s\n", diskUsage)
		}

		time.Sleep(2 * time.Second)
	}
}
  1. 在终端中运行go run system_monitor.go,你将看到系统的CPU使用率、内存使用情况和磁盘空间。

这个示例仅仅是一个基本的系统监控工具,你可以根据需要扩展功能,例如添加网络监控、进程监控等。同时,你也可以考虑使用第三方库,例如github.com/shirou/gopsutil,来简化系统监控功能的实现。

0