Mettre en œuvre un outil de surveillance simple avec Golang

L'arrière-plan est le suivant. Une fois que mon serveur a soudainement raccroché parce que l'utilisation du processeur était trop élevée, mais je ne savais pas quel processus en était la cause. Je voulais donc trouver un outil de surveillance pour surveiller ma machine. J'espère que cet outil est assez simple, sans configuration compliquée, prêt à l'emploi, pour surveiller quand la charge CPU est trop élevée, ce qui s'est passé et quel processus l'a causé Question. C'est dommage que je n'aie pas trouvé un tel outil (merci de me faire savoir s'il existe un outil aussi pratique), mais je ne veux vraiment pas donner au serveur un système de surveillance très lourd. J'ai donc décidé d'écrire moi-même un outil. L'idée est la suivante:

  1. Vérifiez le taux d'occupation du processeur de temps en temps et, lorsqu'il dépasse le pourcentage défini, déclenchez l'enregistrement;
  2. Appelez la commande supérieure, organisez l'occupation du processeur de haut en bas, enregistrez la sortie dans un fichier et le fichier est commandé par le temps;
  3. Le programme peut s'exécuter en arrière-plan.

Pour le premier point, j'ai utilisé une bibliothèque: github.com/shirou/gopsutil, qui a des méthodes liées à l'utilisation du CPU et à l'utilisation de la mémoire, ce qui est relativement simple.

Le code est le suivant:

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)
}

Voici des exemples de méthodes d'utilisation:

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

Pour le code complet, veuillez consulter: https://github.com/TomatoMr/visor.


Bienvenue à faire attention à mon numéro public: onepunchgo, laissez-moi un message.

image

A publié 20 articles originaux · Likes0 · Visites 757

Je suppose que tu aimes

Origine blog.csdn.net/qq_31362439/article/details/105666137
conseillé
Classement