page contents

用golang实现web性能监控工具

用golang实现web性能监控工具!背景是这样的,有一次我的服务器突然挂掉了,是由于cpu占用过高,但是我又不知道是哪个进程造成的。于是便想找一个监控工具来监控我的机器,我希望这个工具足够简单,没有复杂的配置,开箱即用,能够监控到当cpu负载过高时,发生的时间以及当时是什么进程造成这样的问题。很可惜,我并没有找到这样的工具(若有这样方便的工具请告知我),但我实在不想因此而给服务器上一套很重的监控系统。于是乎,我决定自己写一个工具。思路如下:

attachments-2021-10-MrHhStRH617b4b4c83657.jpg

golang实现web性能监控工具!背景是这样的,有一次我的服务器突然挂掉了,是由于cpu占用过高,但是我又不知道是哪个进程造成的。于是便想找一个监控工具来监控我的机器,我希望这个工具足够简单,没有复杂的配置,开箱即用,能够监控到当cpu负载过高时,发生的时间以及当时是什么进程造成这样的问题。很可惜,我并没有找到这样的工具(若有这样方便的工具请告知我),但我实在不想因此而给服务器上一套很重的监控系统。于是乎,我决定自己写一个工具。思路如下:

  1. 每隔一段时间就查看cpu占用率,当超过了设置的百分比,就触发记录;

  2. 调用top命令,按照cpu占用率从高到低排列,将输出记录到文件中,文件以时间命令;

  3. 程序能后台运行。

针对第一点,我用了一个库:github.com/shirou/gopsutil,里面有关于cpu使用率以及内存使用率的相关方法,比较简单。

代码如下:

funcvisor() {
for {
per, _ := cpu.Percent(time.Duration(config.GetConfig().Interval)*time.Second, false)
if per[0] > config.GetConfig().AlterLimit {
record(per[0])
}
}
}

func record(per float64) {
now := time.Now().Format("2006-01-02-15-04-05")
logFile := config.GetConfig().SnapPath + now + ".log"
f, _ := os.Create(logFile)
defer f.Close()

f.Write([]byte{'\n'})
f.Write([]byte("此时cpu占用率:" + strconv.FormatFloat(per, 'f', 10, 64)))
f.Write([]byte{'\n'})
topCmd := exec.Command("top", "-H", "-n", "1", "-b")
topOutput, _ := topCmd.Output()
f.Write(topOutput)
}

使用方法示例如下:

# 后台启动
visor -start -config=./config/config.yaml -d
# 结束进程
visor -stop

更多相关技术内容咨询欢迎前往并持续关注六星社区了解详情。

如果你想用Python开辟副业赚钱,但不熟悉爬虫与反爬虫技术,没有接单途径,也缺乏兼职经验
关注下方微信公众号:Python编程学习圈,获取价值999元全套Python入门到进阶的学习资料以及教程,还有Python技术交流群一起交流学习哦。

attachments-2022-06-r8uJDGIY62b02221ee47d.jpeg

  • 发表于 2021-10-29 09:16
  • 阅读 ( 556 )
  • 分类:Golang

你可能感兴趣的文章

相关问题

0 条评论

请先 登录 后评论
轩辕小不懂
轩辕小不懂

2403 篇文章

作家榜 »

  1. 轩辕小不懂 2403 文章
  2. 小柒 1474 文章
  3. Pack 1135 文章
  4. Nen 576 文章
  5. 王昭君 209 文章
  6. 文双 71 文章
  7. 小威 64 文章
  8. Cara 36 文章