From 8950816df406c50aa000ae33afa31cc39fde7afd Mon Sep 17 00:00:00 2001 From: naiba Date: Mon, 26 Apr 2021 19:13:02 +0800 Subject: [PATCH] =?UTF-8?q?=F0=9F=90=9B=20=E4=BF=AE=E5=A4=8D=E7=A1=AC?= =?UTF-8?q?=E7=9B=98=E4=BF=A1=E6=81=AF=E7=BB=9F=E8=AE=A1=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- cmd/agent/monitor/monitor.go | 74 ++++++++++++++++++------------------ 1 file changed, 37 insertions(+), 37 deletions(-) diff --git a/cmd/agent/monitor/monitor.go b/cmd/agent/monitor/monitor.go index d7fd9d6..d7b0801 100644 --- a/cmd/agent/monitor/monitor.go +++ b/cmd/agent/monitor/monitor.go @@ -2,6 +2,7 @@ package monitor import ( "fmt" + "regexp" "strings" "sync/atomic" "time" @@ -17,6 +18,13 @@ import ( ) var netInSpeed, netOutSpeed, netInTransfer, netOutTransfer, lastUpdate uint64 +var expectDiskFsTypes = []string{ + "apfs", "ext4", "ext3", "ext2", "reiserfs", "jfs", "btrfs", "fuseblk", "zfs", "simfs", "ntfs", "fat32", "exfat", "xfs", +} +var excludeNetInterfaces = []string{ + "lo", "tun", "docker", "veth", "br-", "vmbr", "vnet", "kube", +} +var getMacDiskNo = regexp.MustCompile(`\/dev\/disk(\d)s.*`) func GetHost() *model.Host { hi, _ := host.Info() @@ -83,14 +91,7 @@ func TrackNetworkSpeed() { nc, err := net.IOCounters(true) if err == nil { for _, v := range nc { - if strings.Contains(v.Name, "lo") || - strings.Contains(v.Name, "tun") || - strings.Contains(v.Name, "docker") || - strings.Contains(v.Name, "veth") || - strings.Contains(v.Name, "br-") || - strings.Contains(v.Name, "vmbr") || - strings.Contains(v.Name, "vnet") || - strings.Contains(v.Name, "kube") { + if isListContainsStr(excludeNetInterfaces, v.Name) { continue } innerNetInTransfer += v.BytesRecv @@ -110,38 +111,37 @@ func TrackNetworkSpeed() { func getDiskTotalAndUsed() (total uint64, used uint64) { diskList, _ := disk.Partitions(false) + devices := make(map[string]string) + countedDiskForMac := make(map[string]struct{}) for _, d := range diskList { fsType := strings.ToLower(d.Fstype) - if strings.Contains(fsType, "apfs") || - strings.Contains(fsType, "ext4") || - strings.Contains(fsType, "ext3") || - strings.Contains(fsType, "ext2") || - strings.Contains(fsType, "reiserfs") || - strings.Contains(fsType, "jfs") || - strings.Contains(fsType, "btrfs") || - strings.Contains(fsType, "fuseblk") || - strings.Contains(fsType, "zfs") || - strings.Contains(fsType, "simfs") || - strings.Contains(fsType, "ntfs") || - strings.Contains(fsType, "fat32") || - strings.Contains(fsType, "exfat") || - strings.Contains(fsType, "xfs") { - diskUsageOf, _ := disk.Usage(d.Mountpoint) - path := diskUsageOf.Path - // Mac 下只统计 "/" - if fsType == "apfs" { - if path == "/" { - total += diskUsageOf.Total - } - used += diskUsageOf.Used - continue - } - // 不统计 K8s 的虚拟挂载点,see here:https://github.com/shirou/gopsutil/issues/1007 - if !strings.Contains(path, "/var/lib/kubelet") { - total += diskUsageOf.Total - used += diskUsageOf.Used - } + // 不统计 K8s 的虚拟挂载点:https://github.com/shirou/gopsutil/issues/1007 + if devices[d.Device] == "" && isListContainsStr(expectDiskFsTypes, fsType) && !strings.Contains(d.Mountpoint, "/var/lib/kubelet") { + devices[d.Device] = d.Mountpoint } } + for device, mountPath := range devices { + diskUsageOf, _ := disk.Usage(mountPath) + // 这里是针对 Mac 机器的处理,https://github.com/giampaolo/psutil/issues/1509 + matches := getMacDiskNo.FindStringSubmatch(device) + if len(matches) == 2 { + if _, has := countedDiskForMac[matches[1]]; !has { + countedDiskForMac[matches[1]] = struct{}{} + total += diskUsageOf.Total + } + } else { + total += diskUsageOf.Total + } + used += diskUsageOf.Used + } return } + +func isListContainsStr(list []string, str string) bool { + for i := 0; i < len(list); i++ { + if strings.Contains(list[i], str) { + return true + } + } + return false +}