mirror of
https://github.com/fankes/komari-agent.git
synced 2025-10-18 18:49:23 +08:00
参考了nezha-agent。实现了Linux服务器下NVIDIA显卡的监控。 通过 --gpu 参数启用显卡监控功能。 支持多显卡,显卡使用率,显存使用率监控 实现了AMD显卡的监控,但是未经过测试
56 lines
1.3 KiB
Go
56 lines
1.3 KiB
Go
//go:build linux
|
||
// +build linux
|
||
|
||
package monitoring
|
||
|
||
import (
|
||
"os/exec"
|
||
"strings"
|
||
)
|
||
|
||
func GpuName() string {
|
||
// 调整优先级:专用显卡厂商优先,避免只识别集成显卡
|
||
accept := []string{"nvidia", "amd", "radeon", "vga", "3d"}
|
||
out, err := exec.Command("lspci").Output()
|
||
if err == nil {
|
||
lines := strings.Split(string(out), "\n")
|
||
|
||
// 首先尝试找专用显卡
|
||
for _, line := range lines {
|
||
lower := strings.ToLower(line)
|
||
|
||
// 跳过集成显卡和管理控制器
|
||
if strings.Contains(lower, "aspeed") ||
|
||
strings.Contains(lower, "matrox") ||
|
||
strings.Contains(lower, "management") {
|
||
continue
|
||
}
|
||
|
||
// 优先匹配专用显卡厂商
|
||
for _, a := range accept {
|
||
if strings.Contains(lower, a) {
|
||
parts := strings.SplitN(line, ":", 4)
|
||
if len(parts) >= 4 {
|
||
return strings.TrimSpace(parts[3])
|
||
} else if len(parts) == 3 {
|
||
return strings.TrimSpace(parts[2])
|
||
} else if len(parts) == 2 {
|
||
return strings.TrimSpace(parts[1])
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
// 如果没有找到专用显卡,返回第一个VGA设备作为兜底
|
||
for _, line := range lines {
|
||
if strings.Contains(strings.ToLower(line), "vga") {
|
||
parts := strings.SplitN(line, ":", 4)
|
||
if len(parts) >= 3 {
|
||
return strings.TrimSpace(parts[2])
|
||
}
|
||
}
|
||
}
|
||
}
|
||
return "None"
|
||
}
|