[资源监控] influxdb,对接go客户端

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

在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值