Pendant le processus de fonctionnement et de maintenance du serveur, il est souvent nécessaire de surveiller diverses ressources du serveur, telles que: surveillance de la charge du processeur, surveillance de l'utilisation du disque, surveillance du numéro de processus, etc., afin d'alarmer rapidement lorsqu'une anomalie se produit dans le système et informez l'administrateur système. Cet article présente plusieurs exigences de surveillance courantes et la rédaction de scripts shell dans les systèmes Linux.
Répertoire de l'article:
1.Linux utilise Shell pour vérifier si le processus existe
2. Linux utilise le shell pour détecter l'utilisation du procédé processeur
3. Linux utilise le shell pour détecter l'utilisation de la mémoire du processus
4. Linux utilise le shell pour détecter l'utilisation de la poignée du processus
5.Linux utilise Shell pour voir si un port TCP ou UDP écoute
6.Linux utilise Shell pour afficher le nombre de processus en cours d'exécution
7. Linux utilise le shell pour détecter la charge du processeur système
8. Linux utilise du shell pour détecter l'espace disque du système
9. Résumé
Vérifiez si le processus existe
Lors de la surveillance d'un processus, nous devons généralement obtenir l'ID du processus. L'ID de processus est l'identifiant unique du processus, mais parfois plusieurs processus avec le même nom de processus peuvent être exécutés sous différents utilisateurs du serveur. La fonction GetPid ci-dessous donne à la fonction d'obtenir l'ID de processus du nom de processus spécifié sous l'utilisateur spécifié (actuellement, en considérant uniquement un processus avec ce nom de processus sous cet utilisateur). Il a deux paramètres: le nom d'utilisateur et le nom de processus. Il utilise d'abord PS pour trouver des informations de processus et filtre le processus requis via GREP, et trouve enfin la valeur d'ID du processus via SED et AWK (cette fonction peut être modifiée en fonction des conditions réelles, telles que le filtrage d'autres informations, etc.).
Listing 1. Surveillance du processus
La copie de code est la suivante:
fonction getpid #User #name
{
Psusser = 1 $
Psname = 2 $
pid = `ps -u $ PSUSER | grep $ psname | grep -v grep | grep -v vi | grep -v dbx / n
| grep -v tail | grep -v start | grep -v stop | sed -n 1p | awk '{print $ 1}' `
Echo $ pid
}
Exemple de démonstration:
1) Programme source (par exemple, recherchez l'ID de processus de l'utilisateur en tant que racine et le nom du processus est cftestApp)
La copie de code est la suivante:
Pid = `getpid root cftestapp`
Echo $ pid
2) Sortie des résultats
La copie de code est la suivante:
11426
[dyu @ xilinuxbldsrv shell] $
3) Analyse des résultats
D'après la sortie ci-dessus, nous pouvons voir que 11426 est l'ID de processus du programme CFTestApp sous l'utilisateur racine.
4) Introduction de la commande
1. PS: affichez les informations instantanées du processus dans le système. Paramètres: -U <Code d'identification de l'utilisateur> répertorie l'état du programme appartenant à l'utilisateur et peut également être spécifié à l'aide du nom d'utilisateur. -p <code d'identification du processus> Spécifiez le code d'identification du processus et répertoriez l'état du processus. -o Spécifiez le format de sortie 2. Grep: utilisé pour trouver la ligne actuelle dans le fichier qui correspond à la chaîne. Paramètres: -v Sélection inversée, c'est-à-dire la ligne qui n'affiche aucun contenu de «chaîne de recherche». 3. SED: un éditeur de texte non interactif qui modifie les fichiers ou les fichiers exportés à partir de l'entrée standard, et ne peut traiter qu'une seule ligne de contenu à la fois. Paramètres: -N lisez la ligne d'entrée suivante et utilisez la commande suivante pour traiter la nouvelle ligne au lieu de la première commande. P Flags imprime les lignes correspondantes 4. AWK: un langage de programmation pour le traitement du texte et des données sous Linux / Unix. Les données peuvent provenir d'entrée standard, d'un ou plusieurs fichiers ou de la sortie d'autres commandes. Il prend en charge les fonctions avancées telles que les fonctions définies par l'utilisateur et les expressions régulières dynamiques, et est un puissant outil de programmation sous Linux / Unix. Il est utilisé dans la ligne de commande, mais plus comme un script. La façon dont AWK traite le texte et les données: il analyse le fichier étape par étape, de la première ligne à la dernière ligne, à la recherche de lignes de modèles spécifiques correspondant et en faisant ce que vous voulez sur ces lignes. Si aucune action de traitement n'est spécifiée, les lignes correspondantes sont affichées à la sortie standard (écran). Si aucun mode n'est spécifié, toutes les lignes spécifiées par l'opération sont traitées. Paramètres: -f fs ou champ de champ FS: Spécifie le délimiteur de fichier d'entrée, FS est une chaîne ou une expression régulière, telle que -f:.
Parfois, il est possible que le processus n'ait pas commencé. La fonction suivante consiste à vérifier si l'ID de processus existe. Si ce processus n'exécute pas la sortie:
La copie de code est la suivante:
Le processus n'existe pas.
# Vérifiez si le processus existe
Si ["- $ pid" == "-"]
Alors
{
écho "le processus n'existe pas".
}
FI
Détecter l'utilisation du processeur du processus
Lors de la maintenance des services d'application, nous rencontrons souvent un blocage commercial en raison d'un processeur excessif, ce qui entraîne une interruption commerciale. Si le CPU est trop élevé, cela peut être dû à une charge commerciale excessive ou à des cycles anormaux tels que des cycles morts. Le processeur du processus métier est surveillé en temps opportun grâce aux scripts, et le personnel de maintenance peut être informé en temps opportun lorsque l'utilisation du processeur est anormale, afin que le personnel de maintenance puisse être rapidement analysé, positionné et évité les interruptions commerciales. La fonction suivante peut obtenir l'utilisation du procédé processeur de l'ID de processus spécifié. Il a un paramètre comme ID de processus. Il utilise d'abord PS pour trouver des informations de processus, filtre% les lignes du processeur via Grep -V et trouve enfin la partie entière du pourcentage d'utilisation du CPU via AWK (s'il y a plusieurs CPU dans le système, l'utilisation du processeur peut dépasser 100%).
Listing 2. Surveillance en temps réel du procédé commercial CPU
La copie de code est la suivante:
fonction getcpu
{
Cpuvalue = `ps -p $ 1 -o pcpu | grep -v cpu | awk '{print $ 1}' | awk - f. '{print $ 1}' `
écho $ cpuvalue
}
La fonction suivante consiste à obtenir l'utilisation du CPU de ce processus via la fonction ci-dessus GETCPU, puis à utiliser l'instruction conditionnelle pour déterminer si l'utilisation du CPU dépasse la limite. S'il dépasse 80% (il peut être ajusté en fonction de la situation réelle), une alarme sera sortie, sinon des informations normales seront sorties.
Listing 3. Déterminez si l'utilisation du processeur dépasse la limite
La copie de code est la suivante:
Fonction CheckCPU
{
Pid = 1 $
CPU = `getcpu $ pid`
Si [$ CPU -GT 80]
Alors
{
Écho «L'utilisation du CPU est supérieure à 80%»
}
autre
{
écho «L'utilisation du processeur est normale»
}
FI
}
Exemple de démonstration:
1) Programme source (en supposant que l'ID de processus de CFTestApp a été interrogé ci-dessus est 11426)
La copie de code est la suivante:
CheckCPU 11426
2) Sortie des résultats
La copie de code est la suivante:
L'utilisation du CPU est de 75
L'utilisation du CPU est normale
[dyu @ xilinuxbldsrv shell] $
3) Analyse des résultats
Comme le montre la sortie ci-dessus: l'utilisation actuelle du processeur du programme CFTestApp est de 75%, ce qui est normal, et il n'y a pas de limite d'alarme de plus de 80%.
Détecter l'utilisation de la mémoire du processus
Lors de la maintenance des services d'application, il est souvent rencontré que le processus se bloque en raison d'une utilisation excessive de la mémoire, ce qui entraîne une interruption commerciale (par exemple, l'espace mémoire maximum qu'un programme 32 bits peut aborder est 4G, s'il dépasse la mémoire, la mémoire échouera et la mémoire physique est également limitée). Une utilisation excessive de la mémoire peut être due à la fuite de la mémoire, à l'accumulation de messages, etc. L'utilisation de la mémoire du processus métier peut être surveillée en temps opportun via des scripts, et les alarmes peuvent être envoyées en temps opportun lorsque l'utilisation de la mémoire est anormale (comme par SMS) pour faciliter le personnel de maintenance pour le gérer en temps opportun. La fonction suivante peut obtenir l'utilisation de la mémoire de processus de l'ID de processus spécifié. Il a un paramètre comme ID de processus, qui utilise d'abord PS pour trouver des informations de processus, filtre les lignes VSZ via Grep -V, puis prend l'utilisation de la mémoire dans les mégaoctets en divisant 1000.
Listing 4. Surveillance de l'utilisation de la mémoire des processus métier
La copie de code est la suivante:
fonction getmem
{
Memusage = `ps -o vsz -p $ 1 | grep -v vsz`
((Memusage / = 1000))
Echo $ memusage
}
La fonction suivante consiste à obtenir l'utilisation de la mémoire de ce processus via la fonction ci-dessus GetMem, puis à utiliser l'instruction conditionnelle pour déterminer si l'utilisation de la mémoire dépasse la limite. S'il dépasse 1,6 g (il peut être ajusté en fonction de la situation réelle), une alarme sera sortie, sinon des informations normales seront sorties.
Listing 5. Déterminez si l'utilisation de la mémoire dépasse la limite
La copie de code est la suivante:
mem = `getmem $ pid`
Si [$ mem -gt 1600]
Alors
{
Écho «L'utilisation de la mémoire est supérieure à 1,6 g»
}
autre
{
écho «L'utilisation de la mémoire est normale»
}
FI
Exemple de démonstration:
1) Programme source (en supposant que l'ID de processus de CFTestApp a été interrogé ci-dessus est 11426)
La copie de code est la suivante:
mem = `getMem 11426`
Echo "L'utilisation de la mémoire est $ mem m"
Si [$ mem -gt 1600]
Alors
{
Echo "L'utilisation de la mémoire est supérieure à 1,6 g"
}
autre
{
écho "L'utilisation de la mémoire est normale"
}
FI
2) Sortie des résultats
La copie de code est la suivante:
L'utilisation de la mémoire est de 248 m
L'utilisation de la mémoire est normale
[dyu @ xilinuxbldsrv shell] $
3) Analyse des résultats
D'après la sortie ci-dessus, nous pouvons voir que l'utilisation actuelle de la mémoire du programme CFTestApp est de 248 m, ce qui est normal et qu'il n'y a pas de limite d'alarme dépassant 1,6 g.
Détecter l'utilisation du traitement du processus
Lors de la maintenance des services d'application, les interruptions d'entreprise sont souvent rencontrées en raison d'une utilisation excessive des poignées. Chaque plate-forme utilise des poignées de processus avec une utilisation limitée. Par exemple, sur la plate-forme Linux, nous pouvons utiliser la commande ulimit n (Ouvrir des fichiers (-n) 1024) ou afficher le contenu de /etc/security/limits.conf pour obtenir des restrictions de traitement du processus. Si la poignée est utilisée trop élevée, la fuite de la poignée peut être due à une charge excessive, à la fuite de poignée, etc. L'utilisation de la poignée du processus commercial est surveillée en temps opportun grâce aux scripts et les alarmes peuvent être envoyées en temps opportun en cas d'anomalies (par exemple par le SMS) pour faciliter le personnel de maintenance pour le manipuler en temps opportun. La fonction suivante peut obtenir l'utilisation de la poignée de processus de l'ID de processus spécifié. Il a un paramètre comme ID de processus. Il utilise d'abord LS pour sortir les informations de la manche de processus, puis compte le nombre de poignées de sortie via WC -L.
La copie de code est la suivante:
fonction getdes
{
DES = `LS / PROC / 1 $ / FD | wc -l`
Echo $ des
}
La fonction suivante consiste à obtenir l'utilisation de la poignée de ce processus via la fonction ci-dessus GetDES, puis à utiliser l'instruction conditionnelle pour déterminer si l'utilisation de la poignée dépasse la limite. S'il dépasse 900 (il peut être ajusté en fonction de la situation réelle), une alarme sera sortie, sinon des informations normales seront sorties.
La copie de code est la suivante:
des = `getdes $ pid`
Si [$ des -gt 900]
Alors
{
écho «le nombre de DES est supérieur à 900»
}
autre
{
écho «le nombre de DES est normal»
}
FI
Exemple de démonstration:
1) Programme source (en supposant que l'ID de processus de CFTestApp est trouvé ci-dessus est 11426)
La copie de code est la suivante:
DES = `Getdes 11426`
Echo "Le nombre de DES est $ DES"
Si [$ des -gt 900]
Alors
{
Écho "Le nombre de DES est supérieur à 900"
}
autre
{
écho "le nombre de DES est normal"
}
FI
2) Sortie des résultats
La copie de code est la suivante:
Le nombre de DES est 528
Le nombre de DES est normal
[dyu @ xilinuxbldsrv shell] $
3) Analyse des résultats
D'après la sortie ci-dessus, nous pouvons voir que la poignée actuelle du programme CFTestApp est de 528, ce qui est normal, et il n'y a pas de limite d'alarme de plus de 900.
4) Introduction de la commande
WC: Statistiques le nombre d'octets, mots et lignes dans le fichier spécifié, et affiche les résultats statistiques à la sortie. Paramètres: -l compter le nombre de lignes. -c Comptez le nombre d'octets. -W Count Word Count.
Vérifiez si un port TCP ou UDP écoute
La détection des ports est souvent rencontrée dans la détection des ressources système, en particulier dans la communication réseau, la détection de l'état du port est souvent très importante. Parfois, les processus, le processeur, la mémoire, etc. peuvent être à l'état normal, mais le port est à l'état anormal et l'entreprise ne fonctionne pas normalement. La fonction suivante peut déterminer si le port spécifié écoute. Il a un paramètre qui est le port à détecter. Il utilise d'abord Netstat pour produire les informations d'occupation du port, puis filtre le nombre de sorties de ports TCP via Grep, awk, wc. La deuxième instruction consiste à sortir le nombre de moniteurs des ports UDP. Si les ports TCP et UDP sont 0, renvoyez 0, sinon retournez 1.
Listing 6. Détection de port
La copie de code est la suivante:
Écoute de la fonction
{
TcPlisteningNum = `netstat -an | grep ": 1 $" | / n
awk '$ 1 == "tcp" && $ nf == "écouter" {print $ 0}' | wc -l`
UdplisteningNum = `netstat -an | grep": 1 $ "/ n
| awk '$ 1 == "udp" && $ nf == "0.0.0.0:*" {print $ 0}' | wc -l`
((Écouternum = tcplisteningnum + udplisteningnum)))
Si [$ écoute == 0]
Alors
{
Echo "0"
}
autre
{
écho "1"
}
FI
}
Exemple de démonstration:
1) Programme source (par exemple, interrogez si le statut du port 8080 est à l'écoute)
La copie de code est la suivante:
isListen = `écoute 8080`
Si [$ IsListen -Eq 1]
Alors
{
Echo "Le port écoute"
}
autre
{
Echo "Le port n'écoute pas"
}
FI
2) Sortie des résultats
La copie de code est la suivante:
Le port écoute
[dyu @ xilinuxbldsrv shell] $
3) Analyse des résultats
D'après la sortie ci-dessus, on peut voir que le port 8080 de ce serveur Linux est à l'état d'écoute.
4) Introduction de la commande
NetStat: utilisé pour afficher les données statistiques liées aux protocoles IP, TCP, UDP et ICMP, et est généralement utilisé pour vérifier l'état de la connexion réseau de chaque port de la machine. Paramètres: -A affiche des sockets dans toutes les connexions. -N Utilisez directement l'adresse IP, pas via le serveur de noms de domaine.
La fonction suivante consiste également à détecter si un port TCP ou UDP est dans un état normal.
La copie de code est la suivante:
TCP: netStat -an | egrep $ 1 | awk '$ 6 == "écouter" && $ 1 == "tcp" {print $ 0}'
udp: netStat -an | egrep $ 1 | awk '$ 1 == "udp" && $ 5 == "0.0.0.0:*" {print $ 0}'
Introduction de la commande
Egrep: Trouvez la chaîne spécifiée dans le fichier. L'effet d'exécution d'Egrep est comme grep -e. La syntaxe et les paramètres utilisés peuvent être référés à l'instruction GREP. La différence par rapport au Grep est la méthode d'interprétation des chaînes. Egrep est interprété en utilisant une syntaxe d'expression régulière étendue, tandis que Grep utilise une syntaxe d'expression régulière de base. Les expressions régulières étendues ont des spécifications d'expression plus complètes que les expressions régulières de base.
Vérifiez le nombre de processus en cours d'exécution
Parfois, nous pouvons avoir besoin d'obtenir le nombre de départs d'un processus sur le serveur. La fonction suivante consiste à détecter le nombre de processus en cours d'exécution, tels que le nom du processus est CFTestApp.
La copie de code est la suivante:
RunNum = `ps -ef | grep -v vi | grep -v tail | grep "[/] cftestapp" | grep -v grep | wc -l
Détecter la charge du processeur du système
Lors de la maintenance du serveur, les interruptions commerciales sont parfois rencontrées en raison de la charge excessive du processeur du système (utilisation). Il peut être possible d'exécuter plusieurs processus sur le serveur. Il est normal de visualiser le processeur d'un seul processus, mais la charge du processeur de l'ensemble du système peut être anormale. La charge du processeur du système est surveillée en temps opportun grâce à des scripts, et les alarmes peuvent être envoyées en temps opportun en cas d'anomalies, ce qui facilite le personnel de maintenance à y faire face en temps opportun et à prévenir les accidents. La fonction suivante peut détecter l'utilisation du processeur système. Utilisez VMSTAT pour prendre la valeur inactive du CPU système 5 fois, prenez la valeur moyenne, puis obtenez la valeur d'occupation réelle du CPU actuel en prenant la différence à partir de 100.
La copie de code est la suivante:
fonction getyscpu
{
Cpuidle = `vmstat 1 5 | sed -n '3, $ p' / n
| awk '{x = x + $ 15} end {print x / 5}' | awk -f. '{imprimer 1 $}'
Cpunum = `echo" 100- $ cpuidle "| Colombie-Britannique
écho $ cpunum
}
Exemple de démonstration:
1) Programme source
La copie de code est la suivante:
CPU = `getyScpu`
ECHO "Le CPU système est $ CPU"
Si [$ CPU -GT 90]
Alors
{
Écho "L'utilisation du processeur système est supérieure à 90%"
}
autre
{
écho "L'utilisation du processeur système est normale"
}
FI
2) Sortie des résultats
La copie de code est la suivante:
Le processeur système est 87
L'utilisation du processeur système est normale
[dyu @ xilinuxbldsrv shell] $
3) Analyse des résultats
À partir de la sortie ci-dessus, nous pouvons voir que le taux d'utilisation actuel du CPU du système de serveur Linux est de 87%, ce qui est normal et il n'y a pas de limite d'alarme de plus de 90%.
4) Introduction de la commande
VMSTAT: Abréviation des statistiques de Meomory virtuelles, qui peuvent surveiller la mémoire virtuelle, les processus et les activités du processeur du système d'exploitation.
Paramètres: -N signifie que lorsque les informations d'en-tête sorties ne sont affichées qu'une seule fois pendant la sortie cyclique périodique.
Détecter l'espace disque du système
La détection d'espace disque du système est une partie importante de la détection des ressources du système. Pendant la maintenance du système, nous devons souvent vérifier l'utilisation de l'espace disque du serveur. Parce que certaines entreprises doivent écrire des feuilles d'appel, des journaux ou des fichiers temporaires à tout moment, si l'espace disque est épuisé, cela peut également provoquer une interruption des entreprises. La fonction suivante peut détecter l'utilisation de l'espace disque d'un répertoire dans l'espace disque du système actuel. Le paramètre d'entrée est le nom du répertoire qui doit être détecté, utilisez DF pour sortir les informations d'utilisation du disque du disque du système, puis obtenir le pourcentage d'utilisation d'espace disque d'un répertoire via le filtrage Grep et awk.
La copie de code est la suivante:
fonction getDiskspc
{
Si [$ # -ne 1]
Alors
retour 1
FI
Dossier = "1 $"
DiskSpace = `DF -K | Grep $ Folder | awk '{print $ 5}' | awk -f% '{print $ 1}'
Echo $ espace de disque
}
Exemple de démonstration:
1) Programme source (le répertoire de détection est / démarrage)
La copie de code est la suivante:
Dossier = "/ boot"
Discspace = `GetDiskspc $ Folder`
Echo "L'espace de disque du dossier System $ est $ espace de disque"
Si [$ DiskSpace -gt 90]
Alors
{
Echo "L'utilisation du disque système (dossier $) est supérieure à 90%"
}
autre
{
Echo "L'utilisation du disque système (dossier $) est normale"
}
FI
2) Sortie des résultats
La copie de code est la suivante:
L'espace disque système / démarrage est de 14%
L'utilisation du disque système (/ démarrage) est normale
[dyu @ xilinuxbldsrv shell] $
3) Analyse des résultats
Comme on peut le voir à partir de la sortie ci-dessus: actuellement, l'espace disque du répertoire / boot sur ce système de serveur Linux a été utilisé par 14%, ce qui est normal, et il n'y a pas de limite d'alarme de plus de 90%.
4) Introduction de la commande
DF: Vérifiez l'utilisation de l'espace disque du système de fichiers. Cette commande peut être utilisée pour obtenir des informations telles que l'espace que le disque dur a occupé et la quantité d'espace qui reste. Paramètres: -K s'affiche en k octets.
Résumer
Dans le cadre de la plate-forme Linux, la surveillance des scripts shell est une méthode très simple, pratique et efficace pour surveiller les serveurs et les processus, ce qui est très utile au développement du développement du système et de la maintenance des processus. Il peut non seulement surveiller les informations ci-dessus et envoyer des alarmes, mais également surveiller les journaux de processus et d'autres informations. J'espère que cet article sera utile à tout le monde.