使用golang对服务器简单监控

package main

import (
	"fmt"
	"github.com/shirou/gopsutil/cpu"
	"github.com/shirou/gopsutil/disk"
	"github.com/shirou/gopsutil/host"
	"github.com/shirou/gopsutil/load"
	"github.com/shirou/gopsutil/mem"
	"github.com/shirou/gopsutil/net"
	"time"
)

func main() {
	getCpuInfo()
	getCpuLoad()
	fmt.Println("----------")
	getMemInfo()
	fmt.Println("----------")
	getHostInfo()
	fmt.Println("----------")
	getDiskInfo()
	fmt.Println("----------")
	getNetInfo()
}

// cpu信息
func getCpuInfo() {
	cpuNumber, err := cpu.Counts(true)
	if err != nil {
		fmt.Println(err.Error())
	}
	fmt.Println(fmt.Sprintf("CPU核心数: %v", cpuNumber))

	cpuPercent, err := cpu.Percent(time.Second, true)
	if err != nil {
		fmt.Println(err.Error())
	}
	fmt.Println(fmt.Sprintf("CPU使用率: %.1f%%", cpuPercent[0]))
}

// cpu负载
func getCpuLoad() {
	loadInfo, err := load.Avg()
	if err != nil {
		fmt.Println(err.Error())
	}
	fmt.Println(fmt.Sprintf("CPU平均负载: %v", loadInfo))
}

// 内存信息
func getMemInfo() {
	memInfo, err := mem.VirtualMemory()
	if err != nil {
		fmt.Println(err.Error())
	}

	// 总内存(GB)
	memTotal := memInfo.Total / 1024 / 1024 / 1024
	fmt.Println(fmt.Sprintf("总内存: %v GB", memTotal))

	// 已用内存(MB)
	memUsed := memInfo.Used / 1024 / 1024
	fmt.Println(fmt.Sprintf("已用内存: %v MB", memUsed))

	// 可用内存(MB)
	memAva := memInfo.Available / 1024 / 1024
	fmt.Println(fmt.Sprintf("可用内存: %v MB", memAva))

	// 内存使用率
	memUsedPercent := memInfo.UsedPercent
	fmt.Println(fmt.Sprintf("内存使用率: %.1f%%", memUsedPercent))
}

// 主机信息
func getHostInfo() {
	hostInfo, err := host.Info()
	if err != nil {
		fmt.Println(err.Error())
	}
	fmt.Println(fmt.Sprintf("主机名: %v", hostInfo.Hostname))
	fmt.Println(fmt.Sprintf("操作系统: %v", hostInfo.Platform))
}

// 磁盘信息
func getDiskInfo() {
	diskPart, err := disk.Partitions(false)
	if err != nil {
		fmt.Println(err)
	}
	for _, dp := range diskPart {
		fmt.Println(dp)
		diskUsed, _ := disk.Usage(dp.Mountpoint)
		fmt.Println(fmt.Sprintf("分区总大小: %d MB", diskUsed.Total/1024/1024))
		fmt.Println(fmt.Sprintf("分区使用率: %.1f%%", diskUsed.UsedPercent))
		fmt.Println(fmt.Sprintf("分区inode使用率: %.1f%%", diskUsed.InodesUsedPercent))
	}
}

// 网络信息
func getNetInfo() {
	info, _ := net.IOCounters(true)
	for index, v := range info {
		fmt.Println(fmt.Sprintf("%v:%v send:%v recv:%v", index, v, v.BytesSent, v.BytesRecv))
	}
}

输出

CPU核心数: 12
CPU使用率: 4.6%
CPU平均负载: {"load1":0,"load5":0,"load15":0}
----------
总内存: 31 GB
已用内存: 26276 MB
可用内存: 6324 MB
内存使用率: 80.0%
----------
主机名: 无情哈拉少
操作系统: Microsoft Windows 11 Pro
----------
The network path was not found.
{"device":"C:","mountpoint":"C:","fstype":"NTFS","opts":"rw.compress"}
分区总大小: 102412 MB
分区使用率: 90.8%
分区inode使用率: 0.0%
{"device":"D:","mountpoint":"D:","fstype":"NTFS","opts":"rw.compress"}
分区总大小: 186367 MB
分区使用率: 13.4%
分区inode使用率: 0.0%
{"device":"E:","mountpoint":"E:","fstype":"NTFS","opts":"rw.compress"}
分区总大小: 187371 MB
分区使用率: 68.3%
分区inode使用率: 0.0%
{"device":"F:","mountpoint":"F:","fstype":"NTFS","opts":"rw.compress"}
分区总大小: 5723148 MB
分区使用率: 1.9%
分区inode使用率: 0.0%
----------
0:{"name":"以太网","bytesSent":0,"bytesRecv":0,"packetsSent":0,"packetsRecv":0,"errin":0,"errout":0,"dropin":0,"dropout":0,"fifoin":0,"fifoout":0} send:0 recv:0      
1:{"name":"本地连接* 9","bytesSent":0,"bytesRecv":0,"packetsSent":0,"packetsRecv":0,"errin":0,"errout":0,"dropin":0,"dropout":0,"fifoin":0,"fifoout":0} send:0 recv:0 
2:{"name":"本地连接* 10","bytesSent":0,"bytesRecv":0,"packetsSent":0,"packetsRecv":0,"errin":0,"errout":0,"dropin":0,"dropout":0,"fifoin":0,"fifoout":0} send:0 recv:0
3:{"name":"VMware Network Adapter VMnet1","bytesSent":7284264534016,"bytesRecv":94489280512,"packetsSent":81604378624,"packetsRecv":94489280512,"errin":0,"errout":0,"dropin":0,"dropout":0,"fifoin":0,"fifoout":0} send:7284264534016 recv:94489280512
4:{"name":"VMware Network Adapter VMnet8","bytesSent":3704679875739648,"bytesRecv":6736767872925696,"packetsSent":3690893030719488,"packetsRecv":6736505879920640,"errin":0,"errout":0,"dropin":0,"dropout":0,"fifoin":0,"fifoout":0} send:3704679875739648 recv:6736767872925696
5:{"name":"WLAN 2","bytesSent":301329291965104128,"bytesRecv":1938900090278117376,"packetsSent":2245920003457024,"packetsRecv":6078259192135680,"errin":0,"errout":0,"dropin":0,"dropout":0,"fifoin":0,"fifoout":0} send:301329291965104128 recv:1938900090278117376
6:{"name":"Loopback Pseudo-Interface 1","bytesSent":0,"bytesRecv":0,"packetsSent":0,"packetsRecv":0,"errin":0,"errout":0,"dropin":0,"dropout":0,"fifoin":0,"fifoout":0} send:0 recv:0

posted @ 2023-11-16 11:26  朝阳1  阅读(28)  评论(0编辑  收藏  举报