commit
c2f972220e
@ -0,0 +1,7 @@
|
|||||||
|
.idea
|
||||||
|
go.sum
|
||||||
|
*.exe
|
||||||
|
host.csv
|
||||||
|
monitor.csv
|
||||||
|
logs
|
||||||
|
*.log
|
||||||
@ -0,0 +1,41 @@
|
|||||||
|
/*
|
||||||
|
*
|
||||||
|
@author: sre
|
||||||
|
@date: 2023/11/19 0019
|
||||||
|
@desc: todo
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
package main
|
||||||
|
|
||||||
|
import "strings"
|
||||||
|
|
||||||
|
// getCPUInfo 获取cpu核心 使用率
|
||||||
|
func getCPUInfo(ip, port string) (int, float64, error) {
|
||||||
|
var cpuTotal, cpuIdle float64
|
||||||
|
var cpuCount int
|
||||||
|
data, err := getMetrics(ip, port)
|
||||||
|
if err != nil {
|
||||||
|
return 0, 0, err
|
||||||
|
|
||||||
|
}
|
||||||
|
// 解析metrics数据
|
||||||
|
lines := strings.Split(data, "\n")
|
||||||
|
for _, line := range lines {
|
||||||
|
if strings.HasPrefix(line, "node_cpu_seconds_total") {
|
||||||
|
fields := strings.Fields(line)
|
||||||
|
if len(fields) == 2 {
|
||||||
|
cpuData, err := extractMetricValue(fields[1])
|
||||||
|
if err != nil {
|
||||||
|
//fmt.Println("无法提取指标值: ", err)
|
||||||
|
return 0, 0, err
|
||||||
|
}
|
||||||
|
cpuTotal += cpuData
|
||||||
|
if strings.Contains(line, "mode=\"idle\"") {
|
||||||
|
cpuIdle += cpuData
|
||||||
|
cpuCount += 1
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return cpuCount, 100 * (1 - cpuIdle/cpuTotal), nil
|
||||||
|
}
|
||||||
@ -0,0 +1,50 @@
|
|||||||
|
/*
|
||||||
|
*
|
||||||
|
@author: sre
|
||||||
|
@date: 2023/11/19 0019
|
||||||
|
@desc: todo
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"github.com/gocarina/gocsv"
|
||||||
|
"os"
|
||||||
|
)
|
||||||
|
|
||||||
|
// Monitor for output
|
||||||
|
type Monitor struct {
|
||||||
|
IP string `csv:"ip"`
|
||||||
|
Port string `csv:"port"`
|
||||||
|
CPUCore int `csv:"cpu_core"`
|
||||||
|
CPUUsage float64 `csv:"cpu_usage"`
|
||||||
|
MemTotal float64 `csv:"mem_total"`
|
||||||
|
MemAvailable float64 `csv:"mem_available"`
|
||||||
|
NodeLoad1 float64 `csv:"node_load1"`
|
||||||
|
NodeLoad5 float64 `csv:"node_load5"`
|
||||||
|
NodeLoad15 float64 `csv:"node_load15"`
|
||||||
|
ERROR string `csv:"error"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// Host for input
|
||||||
|
type Host struct {
|
||||||
|
IP string `csv:"ip"`
|
||||||
|
Port string `csv:"port"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func GetHostListFromCSV() ([]*Host, error) {
|
||||||
|
hostssFile, err := os.OpenFile(INPUTFILE, os.O_RDWR|os.O_CREATE, os.ModePerm)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
defer hostssFile.Close()
|
||||||
|
|
||||||
|
hosts := []*Host{}
|
||||||
|
|
||||||
|
if err := gocsv.UnmarshalFile(hostssFile, &hosts); err != nil { // Load hosts from file
|
||||||
|
//if err := gocsv.UnmarshalBytes(CSVDATA, &hosts); err != nil { // Load hosts from file
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return hosts, nil
|
||||||
|
|
||||||
|
}
|
||||||
@ -0,0 +1,30 @@
|
|||||||
|
/*
|
||||||
|
*
|
||||||
|
@author: sre
|
||||||
|
@date: 2023/11/19 0019
|
||||||
|
@desc: todo
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"testing"
|
||||||
|
)
|
||||||
|
|
||||||
|
func TestGetHostListFromCSV(t *testing.T) {
|
||||||
|
hosts, err := GetHostListFromCSV()
|
||||||
|
if err != nil {
|
||||||
|
fmt.Println(err)
|
||||||
|
}
|
||||||
|
for _, host := range hosts {
|
||||||
|
fmt.Println(host)
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestStrclean(t *testing.T) {
|
||||||
|
s1 := "\"30.1 30.251.46,\","
|
||||||
|
fmt.Println(strClean(s1))
|
||||||
|
|
||||||
|
}
|
||||||
@ -0,0 +1,5 @@
|
|||||||
|
module exporterData
|
||||||
|
|
||||||
|
go 1.21
|
||||||
|
|
||||||
|
require github.com/gocarina/gocsv v0.0.0-20231116093920-b87c2d0e983a
|
||||||
|
@ -0,0 +1,58 @@
|
|||||||
|
/*
|
||||||
|
*
|
||||||
|
@author: sre
|
||||||
|
@date: 2023/11/19 0019
|
||||||
|
@desc: todo
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
package main
|
||||||
|
|
||||||
|
import "strings"
|
||||||
|
|
||||||
|
func getLoadInfo(ip, port string) (float64, float64, float64, error) {
|
||||||
|
var node_load1, node_load5, node_load15 float64
|
||||||
|
data, err := getMetrics(ip, port)
|
||||||
|
if err != nil {
|
||||||
|
return 0, 0, 0, err
|
||||||
|
|
||||||
|
}
|
||||||
|
// 解析metrics数据
|
||||||
|
lines := strings.Split(data, "\n")
|
||||||
|
for _, line := range lines {
|
||||||
|
//node_load1
|
||||||
|
if strings.HasPrefix(line, "node_load1 ") {
|
||||||
|
fields := strings.Fields(line)
|
||||||
|
if len(fields) == 2 {
|
||||||
|
node_load1, err = extractMetricValue(fields[1])
|
||||||
|
if err != nil {
|
||||||
|
return 0, 0, 0, err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
//node_load5
|
||||||
|
if strings.HasPrefix(line, "node_load5 ") {
|
||||||
|
fields := strings.Fields(line)
|
||||||
|
if len(fields) == 2 {
|
||||||
|
node_load1, err = extractMetricValue(fields[1])
|
||||||
|
if err != nil {
|
||||||
|
return 0, 0, 0, err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
//node_load15
|
||||||
|
if strings.HasPrefix(line, "node_load15 ") {
|
||||||
|
fields := strings.Fields(line)
|
||||||
|
if len(fields) == 2 {
|
||||||
|
node_load1, err = extractMetricValue(fields[1])
|
||||||
|
if err != nil {
|
||||||
|
return 0, 0, 0, err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return node_load1, node_load5, node_load15, nil
|
||||||
|
|
||||||
|
}
|
||||||
@ -0,0 +1,16 @@
|
|||||||
|
|
||||||
|
|
||||||
|
交叉编译
|
||||||
|
```cmd
|
||||||
|
SET CGO_ENABLED=0
|
||||||
|
SET GOOS=linux
|
||||||
|
SET GOARCH=amd64
|
||||||
|
go build
|
||||||
|
```
|
||||||
|
|
||||||
|
```cmd
|
||||||
|
SET CGO_ENABLED=0
|
||||||
|
SET GOOS=linux
|
||||||
|
SET GOARCH=arm64
|
||||||
|
go build
|
||||||
|
```
|
||||||
Loading…
Reference in new issue