温馨提示×

如何通过Golang日志监控CentOS资源使用情况

小樊
33
2025-11-22 00:24:10
栏目: 编程语言

要通过Golang日志监控CentOS资源使用情况,你可以使用Golang的os/exec包来执行系统命令并获取资源使用情况,然后将这些信息记录到日志文件中。以下是一个简单的示例,展示了如何使用Golang监控CPU和内存使用情况,并将结果记录到日志文件中:

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

  2. 创建一个名为main.go的文件,并添加以下代码:

package main

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

func main() {
	logFile, err := os.OpenFile("resource_usage.log", os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0666)
	if err != nil {
		log.Fatalf("Error opening log file: %v", err)
	}
	defer logFile.Close()

	logger := log.New(logFile, "Resource usage: ", log.Ldate|log.Ltime|log.Lshortfile)

	for {
		cpuUsage, err := getCpuUsage()
		if err != nil {
			logger.Printf("Error getting CPU usage: %v", err)
		} else {
			logger.Printf("CPU usage: %s", cpuUsage)
		}

		memoryUsage, err := getMemoryUsage()
		if err != nil {
			logger.Printf("Error getting memory usage: %v", err)
		} else {
			logger.Printf("Memory usage: %s", memoryUsage)
		}

		time.Sleep(5 * time.Second)
	}
}

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):") {
			line := scanner.Text()
			fields := strings.Fields(line)
			cpuUsage := fields[1]
			return cpuUsage, nil
		}
	}

	return "", fmt.Errorf("CPU usage not found")
}

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:") {
			line := scanner.Text()
			fields := strings.Fields(line)
			memoryUsage := fields[3] + "/" + fields[1]
			return memoryUsage, nil
		}
	}

	return "", fmt.Errorf("Memory usage not found")
}
  1. 在终端中运行以下命令以编译并运行程序:
go run main.go

程序将每5秒检查一次CPU和内存使用情况,并将结果记录到名为resource_usage.log的日志文件中。

注意:这个示例仅适用于CentOS 7及更高版本。如果你使用的是CentOS 6或其他发行版,可能需要修改topfree命令的参数以获取正确的输出。

0