Implemente una herramienta de monitoreo simple con golang

El fondo es así: una vez que mi servidor colgó repentinamente porque el uso de la CPU era demasiado alto, pero no sabía qué proceso lo causó. Así que quería encontrar una herramienta de monitoreo para monitorear mi máquina. Espero que esta herramienta sea lo suficientemente simple, sin una configuración complicada, lista para usar cuando la carga de la CPU sea demasiado alta, qué sucedió y qué proceso lo estaba causando. Pregunta Es una pena que no haya encontrado una herramienta de este tipo (avíseme si existe una herramienta tan conveniente), pero realmente no quiero darle al servidor un sistema de monitoreo muy pesado. Entonces, decidí escribir una herramienta yo mismo. La idea es la siguiente:

  1. Verifique la tasa de ocupación de la CPU de vez en cuando, y cuando exceda el porcentaje establecido, active la grabación;
  2. Invoque el comando superior, organice la ocupación de la CPU de mayor a menor, registre la salida en un archivo, y el archivo está ordenado por tiempo;
  3. El programa puede ejecutarse en segundo plano.

Para el primer punto, utilicé una biblioteca: github.com/shirou/gopsutil, que tiene métodos relacionados con el uso de la CPU y la memoria, que es relativamente simple.

El código es el siguiente:

func visor() {
	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)
}

Ejemplos de métodos de uso son los siguientes:

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

Para ver el código completo, consulte: https://github.com/TomatoMr/visor.


Bienvenido a prestar atención a mi número público: onepunchgo, déjame un mensaje.

imagen

20 artículos originales publicados · Me gusta0 · Visitas 757

Supongo que te gusta

Origin blog.csdn.net/qq_31362439/article/details/105666137
Recomendado
Clasificación