golang系统资源监控工具插件库grofer的使用

golang系统资源监控工具插件库grofer的使用

grofer logo

grofer是一个用Go编写的现代系统资源监控工具,使用termui和gopsutil库构建,目前仅兼容Linux系统。

安装

使用go get安装

go get -u github.com/pesos/grofer

作为可执行文件安装

curl -sSL https://github.com/pesos/grofer/releases/download/<version tag>/grofer_<architecture> --output grofer
chmod +x grofer

支持的架构:

  • grofer_386
  • grofer_amd64
  • grofer_arm
  • grofer_arm64

从源码构建

git clone https://github.com/pesos/grofer
cd grofer
go build grofer.go

Docker使用

  1. 获取Docker镜像:
docker pull ghcr.io/pesos/grofer
  1. 运行:
docker run \
  --name grofer \
  --rm -it \
  -v /:/host:ro \
  -v /var/run/docker.sock:/var/run/docker.sock:ro \
  --privileged \
  --pid=host \
  --network=host \
  ghcr.io/pesos/grofer

使用示例

显示总体指标

grofer

grofer界面

显示CPU详细信息

grofer --cpuinfo

CPU信息

显示进程指标

grofer proc

进程信息

显示特定进程信息

grofer proc -p PID

特定进程信息

显示容器指标

grofer container

容器信息

显示特定容器信息

grofer container -c CID

特定容器信息

导出性能数据

grofer export -i 1 -p 1

导出数据

代码示例

以下是一个简单的Go程序示例,展示如何使用grofer库:

package main

import (
	"github.com/pesos/grofer/pkg/core"
	"log"
)

func main() {
	// 创建一个新的grofer实例
	g, err := core.NewGrofer()
	if err != nil {
		log.Fatal(err)
	}

	// 显示总体系统指标
	err = g.DisplayOverallStats(1000) // 1000ms刷新间隔
	if err != nil {
		log.Fatal(err)
	}

	// 显示特定进程信息
	// pid := 1234 // 替换为实际的PID
	// err = g.DisplayProcInfo(pid, 1000)
	// if err != nil {
	//     log.Fatal(err)
	// }
}

功能特点

  1. 系统监控

    • CPU使用率(每个核心)
    • 内存(RAM)使用情况
    • 网络使用情况
    • 磁盘存储
  2. 进程监控

    • 所有运行进程的列表
    • 特定进程的详细信息
    • 进程操作(如终止进程)
  3. 容器监控

    • Docker容器列表
    • 特定容器的详细信息
    • 容器操作
  4. 数据导出

    • 将性能数据导出为JSON格式
    • 可自定义导出文件名和格式

注意事项

  1. grofer目前仅支持Linux系统
  2. 使用TUI界面时,按?键可查看可用快捷键
  3. 刷新率必须大于1000毫秒

贡献者


更多关于golang系统资源监控工具插件库grofer的使用的实战教程也可以访问 https://www.itying.com/category-94-b0.html

1 回复

更多关于golang系统资源监控工具插件库grofer的使用的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


Golang系统资源监控工具grofer使用指南

grofer是一个用Go编写的系统资源监控工具,它提供了类似top命令的功能,但具有更丰富的可视化界面和更详细的系统信息展示。下面我将详细介绍grofer的使用方法和示例代码。

grofer简介

grofer是一个终端UI工具,可以监控:

  • CPU使用情况
  • 内存使用情况
  • 磁盘I/O
  • 网络流量
  • 进程列表

安装grofer

go get -u github.com/pesos/grofer

基本使用

1. 启动全局监控

最简单的使用方式是直接运行grofer命令:

package main

import (
	"github.com/pesos/grofer/pkg/core"
)

func main() {
	grofer := core.NewGrofer()
	grofer.Global()
}

这会显示一个包含CPU、内存、磁盘和网络信息的综合仪表板。

2. 监控特定子系统

CPU监控

package main

import (
	"github.com/pesos/grofer/pkg/core"
)

func main() {
	grofer := core.NewGrofer()
	grofer.Cpu()
}

内存监控

package main

import (
	"github.com/pesos/grofer/pkg/core"
)

func main() {
	grofer := core.NewGrofer()
	grofer.Mem()
}

3. 进程监控

package main

import (
	"github.com/pesos/grofer/pkg/core"
)

func main() {
	grofer := core.NewGrofer()
	grofer.Proc()
}

高级功能

自定义刷新间隔

默认刷新间隔是1秒,可以自定义:

package main

import (
	"time"
	"github.com/pesos/grofer/pkg/core"
)

func main() {
	grofer := core.NewGrofer()
	grofer.RefreshInterval = 2 * time.Second
	grofer.Global()
}

导出监控数据

grofer支持将监控数据导出为JSON格式:

package main

import (
	"github.com/pesos/grofer/pkg/core"
	"github.com/pesos/grofer/pkg/export"
)

func main() {
	exporter := export.NewExporter()
	grofer := core.NewGroferWithExporter(exporter)
	
	// 监控并导出数据
	grofer.Global()
	
	// 获取导出的JSON数据
	jsonData := exporter.GetData()
	println(string(jsonData))
}

集成到自己的应用中

下面是一个将grofer集成到自己应用中的完整示例:

package main

import (
	"time"
	"github.com/pesos/grofer/pkg/core"
	"github.com/pesos/grofer/pkg/sink/tui"
)

func main() {
	// 创建grofer实例
	grofer := core.NewGrofer()
	
	// 配置UI
	ui := tui.NewViz()
	grofer.SetSink(ui)
	
	// 设置刷新间隔
	grofer.RefreshInterval = 500 * time.Millisecond
	
	// 启动监控
	err := grofer.Global()
	if err != nil {
		panic(err)
	}
	
	// 运行UI
	ui.Run()
}

键盘快捷键

在grofer界面中可以使用以下快捷键:

  • q - 退出程序
  • h - 显示帮助
  • / - 切换不同监控视图
  • / - 在进程列表中上下移动

自定义监控项

你可以扩展grofer来监控自定义指标:

package main

import (
	"github.com/pesos/grofer/pkg/core"
	"github.com/pesos/grofer/pkg/sink/tui"
)

type CustomMonitor struct {}

func (c *CustomMonitor) Render() string {
	return "Custom monitoring data here"
}

func main() {
	grofer := core.NewGrofer()
	ui := tui.NewViz()
	
	// 添加自定义监控器
	ui.AddCustomMonitor("Custom", &CustomMonitor{})
	
	grofer.SetSink(ui)
	grofer.Global()
	ui.Run()
}

总结

grofer是一个功能强大且易于扩展的Go语言系统监控工具。它提供了丰富的终端UI界面和灵活的API,既可以作为独立工具使用,也可以集成到你的Go应用程序中。通过简单的API调用,你可以监控系统各项资源使用情况,并根据需要进行定制扩展。

grofer特别适合需要轻量级系统监控的Go应用程序,或者作为开发者在调试性能问题时的辅助工具。它的终端界面使得在没有GUI环境的服务器上也能方便地查看系统状态。

回到顶部