package main

import (
    "fmt"
    "io/ioutil"
    "net/http"
    "regexp"
    "strconv"
    "strings"
)

// 获取网卡速率
func getNetworkSpeed(nodeExporterURL string, device string) (receiveSpeed, transmitSpeed float64, err error) {
    resp, err := http.Get(nodeExporterURL + "/metrics")
    if err != nil {
        return 0, 0, err
    }
    defer resp.Body.Close()

    body, err := ioutil.ReadAll(resp.Body)
    if err != nil {
        return 0, 0, err
    }

    // 定义正则表达式匹配网卡速率
    receiveRegex := regexp.MustCompile(`node_network_receive_speed_bytes{device="` + device + `"} ([0-9.]+)`)
    transmitRegex := regexp.MustCompile(`node_network_transmit_speed_bytes{device="` + device + `"} ([0-9.]+)`)

    // 查找匹配的行
    lines := strings.Split(string(body), "\n")
    for _, line := range lines {
        if receiveMatch := receiveRegex.FindStringSubmatch(line); len(receiveMatch) > 1 {
            receiveSpeed, err = strconv.ParseFloat(receiveMatch[1], 64)
            if err != nil {
                return 0, 0, err
            }
        } else if transmitMatch := transmitRegex.FindStringSubmatch(line); len(transmitMatch) > 1 {
            transmitSpeed, err = strconv.ParseFloat(transmitMatch[1], 64)
            if err != nil {
                return 0, 0, err
            }
        }
    }

    return receiveSpeed, transmitSpeed, nil
}

func main() {
    nodeExporterURL := "http://127.0.0.1:9100" // node_exporter的地址
    device := "eth0"                              // 网卡设备名称

    receiveSpeed, transmitSpeed, err := getNetworkSpeed(nodeExporterURL, device)
    if err != nil {
        fmt.Println("Error fetching network speed:", err)
        return
    }

    fmt.Printf("Receive speed for %s: %.2f B/s\n", device, receiveSpeed)
    fmt.Printf("Transmit speed for %s: %.2f B/s\n", device, transmitSpeed)
}

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

Captcha Code