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)
}