1. go采集客户端
说明:
- go客户端每10s收集系统内存信息, 并写入
performance
- 通过token连接influxdb
package main
import (
"fmt"
"os"
"regexp"
"strconv"
"strings"
"time"
influxdb2 "github.com/influxdata/influxdb-client-go/v2"
)
const (
PROC_MEM = "/proc/meminfo"
)
var (
sysMemExpr = "^(MemTotal|MemFree|MemAvailable|Buffers|Cached):"
)
type SysMemInfo struct {
MemTotal uint64 `json:"memTotal"`
MemFree uint64 `json:"memFree"`
MemAvailable uint64 `json:"memAvailable"`
Buffers uint64 `json:"buffers"`
Cached uint64 `json:"cached"`
}
func getSysMemInfo() *SysMemInfo {
var (
memTotal uint64 = 0
memFree uint64 = 0
memAvailable uint64 = 0
buffers uint64 = 0
cached uint64 = 0
)
memBytes, memReadErr := os.ReadFile(PROC_MEM)
if memReadErr != nil {
panic("failed to read mem file " + PROC_MEM)
}
memLines := strings.Split(string(memBytes), "\n")
memLineRegex, _ := regexp.Compile(sysMemExpr)
for _, memLine := range memLines {
if memLineRegex.MatchString(memLine) {
lineItems := strings.Fields(memLine)
if len(lineItems) < 2 {
continue
}
key := strings.TrimRight(lineItems[0], ":")
valueStr := strings.TrimSpace(lineItems[1])
value, _ := strconv.ParseUint(valueStr, 10, 64)
switch key {
case "MemTotal":
memTotal = value
case "MemFree":
memFree = value
case "MemAvailable":
memAvailable = value
case "Buffers":
buffers = value
case "Cached":
cached = value
}
}
}
return &SysMemInfo{
MemTotal: memTotal,
MemFree: memFree,
MemAvailable: memAvailable,
Buffers: buffers,
Cached: cached,
}
}
func main() {
// 创建client, 通过token连接
client := influxdb2.NewClient("http://xxx.xxx.xxx.xxx:8086", "DIvBSXmpfIbHM_GJ4ah5fgiZry8j4KUsaNk9aIM0MeJirKeyBl0ij5OI2-yPO-AytDktfVeR7Ss0JnlFMG4zA==")
defer client.Close()
// 连接 组织 + bucket
writeAPI := client.WriteAPI("Q", "performance")
sign := time.Tick(time.Second * 10)
for {
<-sign
memInfo := getSysMemInfo()
writeAPI.WriteRecord(fmt.Sprintf("centos_memory,unit=kb MemTotal=%d,MemFree=%d,MemAvailable=%d,Buffers=%d,Cached=%d",
memInfo.MemTotal, memInfo.MemFree, memInfo.MemAvailable, memInfo.Buffers, memInfo.Cached))
writeAPI.Flush()
}
}
2. 添加dashboard