Durante el proceso de operación y mantenimiento del servidor, a menudo es necesario monitorear varios recursos del servidor, como: monitoreo de carga de CPU, monitoreo de uso de disco, monitoreo de números de proceso, etc., para alarmar de inmediato cuando se produce una anormalidad en el sistema y notifique al administrador del sistema. Este artículo presenta varios requisitos de monitoreo comunes y la redacción de scripts de shell en los sistemas Linux.
Directorio de artículos:
1.Linux usa shell para verificar si el proceso existe
2. Linux usa Shell para detectar la utilización de procesos de la CPU
3. Linux usa Shell para detectar el uso de la memoria de proceso
4. Linux usa shell para detectar el uso del mango de proceso
5.Linux usa shell para ver si un puerto TCP o UDP está escuchando
6.Linux usa shell para ver el número de procesos de ejecución
7. Linux usa Shell para detectar la carga de CPU del sistema
8. Linux usa shell para detectar el espacio del disco del sistema
9. Resumen
Compruebe si el proceso existe
Al monitorear un proceso, generalmente necesitamos obtener la identificación del proceso. La ID del proceso es el identificador único del proceso, pero a veces múltiples procesos con el mismo nombre del proceso pueden ejecutarse bajo diferentes usuarios en el servidor. La función GetPID a continuación ofrece la función de obtener la ID de proceso del nombre de proceso especificado en el usuario especificado (actualmente, solo considerando comenzar un proceso con este nombre de proceso bajo este usuario). Tiene dos parámetros: el nombre de usuario y el nombre del proceso. Primero utiliza PS para encontrar información del proceso y filtra el proceso requerido a través de GREP, y finalmente encuentra el valor de identificación del proceso a través de SED y AWK (esta función puede modificarse de acuerdo con las condiciones reales, como filtrar otra información, etc.).
Listado 1. Monitoreo del proceso
La copia del código es la siguiente:
función getpid #user #name
{
Psuser = $ 1
Psname = $ 2
pid = `ps -u $ psuser | grep $ psname | grep -v grep | grep -v vi | grep -v dbx/n
| grep -v cola | Grep -v Start | Grep -V Stop | Sed -n 1p | Awk '{imprimir $ 1}' `
Echo $ pid
}
Demostración de muestra:
1) Programa de origen (por ejemplo, encuentre la ID de proceso del usuario como root y el nombre del proceso es cftestapp)
La copia del código es la siguiente:
Pid = `getpid root cftestapp`
Echo $ pid
2) Salida de resultados
La copia del código es la siguiente:
11426
[dyu@xilinuxbldsrv shell] $
3) Análisis de resultados
De la salida anterior, podemos ver que 11426 es la ID de proceso del programa CFTestApp bajo el usuario root.
4) Introducción al comando
1. PS: Ver información de proceso instantáneo en el sistema. Parámetros: -U <Código de identificación del usuario> Enumera el estado del programa que pertenece al usuario, y también se puede especificar utilizando el nombre de usuario. -P <Código de identificación del proceso> Especificar el código de identificación del proceso y enumerar el estado del proceso. -o especifique el formato de salida 2. Grep: se usa para encontrar la línea actual en el archivo que coincida con la cadena. Parámetros: -v selección inversa, es decir, la línea que no muestra contenido de 'cadena de búsqueda'. 3. SED: un editor de texto no interactivo que edita archivos o exportó archivos desde la entrada estándar, y solo puede procesar una línea de contenido a la vez. Parámetros: -n lea la siguiente línea de entrada y use el siguiente comando para procesar la nueva línea en lugar del primer comando. P La bandera P Impresa líneas coincidentes 4. AWK: un lenguaje de programación para procesar texto y datos en Linux/Unix. Los datos pueden ser de la entrada estándar, uno o más archivos o la salida de otros comandos. Admite funciones avanzadas, como funciones definidas por el usuario y expresiones regulares dinámicas, y es una poderosa herramienta de programación en Linux/Unix. Se usa en la línea de comando, pero más como un script. La forma de procesar texto y datos de AWK: escanea el archivo paso a paso, desde la primera línea hasta la última línea, buscando filas de patrones específicos coincidentes y haciendo lo que desea en esas líneas. Si no se especifica ninguna acción de procesamiento, las filas coincidentes se muestran a la salida estándar (pantalla). Si no se especifica ningún modo, se procesan todas las filas especificadas por la operación. Parámetros: -f FS o Field -Sparator FS: Especifica el delimitador del archivo de entrada, FS es una cadena o una expresión regular, como -f :.
A veces es posible que el proceso no haya comenzado. La siguiente función es verificar si existe la ID del proceso. Si este proceso no ejecuta la salida:
La copia del código es la siguiente:
El proceso no existe.
# Compruebe si el proceso existe
if ["-$ pid" == "-"]
Entonces
{
Echo "El proceso no existe".
}
FI
Detectar la utilización del proceso de la CPU
Al mantener los servicios de aplicación, a menudo encontramos el bloqueo comercial debido a la CPU excesiva, lo que resulta en la interrupción comercial. Si la CPU es demasiado alta, puede deberse a una carga comercial excesiva o ciclos anormales como ciclos muertos. La CPU del proceso comercial se monitorea de manera oportuna a través de los scripts, y el personal de mantenimiento puede notificarse de manera oportuna cuando la utilización de la CPU es anormal, por lo que el personal de mantenimiento puede analizarse, posicionar y evitar las interrupciones comerciales. La siguiente función puede obtener la utilización del proceso de la CPU de la ID de proceso especificada. Tiene un parámetro como ID del proceso. Primero utiliza PS para encontrar información de proceso, filtra %de filas de CPU a través de GREP -V, y finalmente encuentra la parte entera del porcentaje de utilización de la CPU a través de AWK (si hay CPU múltiples en el sistema, la utilización de la CPU puede exceder el 100 %).
Listado 2. Monitoreo en tiempo real de la CPU de proceso comercial
La copia del código es la siguiente:
función getCPU
{
Cpuvalue = `ps -p $ 1 -O PCPU | GREP -V CPU | Awk '{imprimir $ 1}' | Awk - F. '{imprimir $ 1}' `
Echo $ cpuvalue
}
La siguiente función es obtener la utilización de la CPU de este proceso a través de la función GetCPU anterior, y luego usar la declaración condicional para determinar si la utilización de la CPU excede el límite. Si excede el 80% (se puede ajustar de acuerdo con la situación real), se emitirá una alarma, de lo contrario, se generará información normal.
Listado 3. Determinar si la utilización de la CPU excede el límite
La copia del código es la siguiente:
función checkcpu
{
PID = $ 1
cpu = `getcpu $ pid`
Si [$ CPU -GT 80]
Entonces
{
Echo "El uso de la CPU es mayor al 80%"
}
demás
{
echo "El uso de la CPU es normal"
}
FI
}
Demostración de muestra:
1) Programa fuente (suponiendo que la ID de proceso de CftestApp se haya consultado anteriormente es 11426)
La copia del código es la siguiente:
Checkcpu 11426
2) Salida de resultados
La copia del código es la siguiente:
El uso de la CPU es de 75
El uso de la CPU es normal
[dyu@xilinuxbldsrv shell] $
3) Análisis de resultados
Como se puede ver en la salida anterior: el uso actual de la CPU del programa CFTestApp es del 75%, lo cual es normal, y no hay un límite de alarma de más del 80%.
Detectar el uso de la memoria del proceso
Al mantener los servicios de aplicación, a menudo se encuentra que el proceso se bloquea debido al uso excesivo de la memoria, lo que resulta en la interrupción comercial (por ejemplo, el espacio de memoria máximo que un programa de 32 bits puede abordar es 4G, si excede la memoria, la memoria fallará y la memoria física también es limitada). El uso excesivo de la memoria puede deberse a la fuga de memoria, la acumulación de mensajes, etc. El uso de la memoria del proceso de negocio se puede monitorear de manera oportuna a través de scripts, y las alarmas se pueden enviar de manera oportuna cuando el uso de la memoria es anormal (como a través de SMS) para facilitar el personal de mantenimiento para manejarlo de manera oportuna. La siguiente función puede obtener el uso de la memoria del proceso de la ID de proceso especificada. Tiene un parámetro como ID de proceso, que primero usa PS para encontrar información del proceso, filtra las líneas VSZ a través de GREP -V y luego toma el uso de la memoria en megabytes dividiendo 1000.
Listado 4. Monitoreo del uso de la memoria del proceso comercial
La copia del código es la siguiente:
función getMem
{
MemUSAGE = `PS -O VSZ -P $ 1 | GREP -V VSZ`
((MemUsage /= 1000))
Echo $ MEMUSAGE
}
La siguiente función es obtener el uso de la memoria de este proceso a través de la función anterior GetMem, y luego usar la declaración condicional para determinar si el uso de la memoria excede el límite. Si excede 1.6g (se puede ajustar de acuerdo con la situación real), se emitirá una alarma, de lo contrario, se emitirá información normal.
Listado 5. Determinar si el uso de la memoria excede el límite
La copia del código es la siguiente:
mem = `getMem $ pid`
Si [$ MEM -GT 1600]
Entonces
{
Echo "El uso de la memoria es mayor que 1.6g"
}
demás
{
Echo "El uso de la memoria es normal"
}
FI
Demostración de muestra:
1) Programa fuente (suponiendo que la ID de proceso de CftestApp se haya consultado anteriormente es 11426)
La copia del código es la siguiente:
mem = `getMem 11426`
echo "El uso de la memoria es $ mem M"
Si [$ MEM -GT 1600]
Entonces
{
echo "El uso de la memoria es mayor que 1.6g"
}
demás
{
echo "El uso de la memoria es normal"
}
FI
2) Salida de resultados
La copia del código es la siguiente:
El uso de la memoria es de 248 m
El uso de la memoria es normal
[dyu@xilinuxbldsrv shell] $
3) Análisis de resultados
De la salida anterior, podemos ver que el uso de memoria actual del programa CFTestApp es de 248 m, lo cual es normal y no hay límite de alarma superior a 1.6 g.
Detectar el uso del manejo del proceso
Al mantener los servicios de aplicación, las interrupciones comerciales a menudo se encuentran debido al uso excesivo de mangos. Cada plataforma utiliza manijas de proceso con uso limitado. Por ejemplo, en la plataforma Linux, podemos usar el comando ULIMIT N (abrir archivos (-n) 1024) o ver el contenido de /etc/security/limits.conf para obtener restricciones de manejo de procesos. Si el mango se usa demasiado alto, la fuga de mango puede deberse a una carga excesiva, la fuga de mango, etc. El uso del mango del proceso comercial se monitorea de manera oportuna a través de los scripts, y las alarmas se pueden enviar de manera oportuna en caso de anormalidades (como a través de SMS) para facilitar el personal de mantenimiento para manejarlo de manera oportuna. La siguiente función puede obtener el uso del manejo del proceso de la ID de proceso especificada. Tiene un parámetro como ID del proceso. Primero usa LS para emitir la información del manejo del proceso, y luego cuenta el número de manijas de salida a través de WC -L.
La copia del código es la siguiente:
Función getDes
{
Des = `ls/proc/$ 1/fd | WC -L`
Echo $ des
}
La siguiente función es obtener el uso del mango de este proceso a través de la función anterior GetDes, y luego usar la declaración condicional para determinar si el uso del mango excede el límite. Si excede los 900 (se puede ajustar de acuerdo con la situación real), se emitirá una alarma, de lo contrario, se emitirá información normal.
La copia del código es la siguiente:
des = `getdes $ pid`
Si [$ des -gt 900]
Entonces
{
Echo "El número de DES es mayor que 900"
}
demás
{
Echo "El número de DES es normal"
}
FI
Demostración de muestra:
1) Programa de origen (suponiendo que la ID de proceso de CftestApp se encuentra anteriormente es 11426)
La copia del código es la siguiente:
des = `getdes 11426`
echo "El número de des es $ des"
Si [$ des -gt 900]
Entonces
{
Echo "El número de DES es mayor que 900"
}
demás
{
Echo "El número de DES es normal"
}
FI
2) Salida de resultados
La copia del código es la siguiente:
El número de DES es 528
El número de DES es normal
[dyu@xilinuxbldsrv shell] $
3) Análisis de resultados
De la salida anterior, podemos ver que el mango actual del programa CFTestApp es 528, lo cual es normal, y no hay límite de alarma de más de 900.
4) Introducción al comando
WC: Estadísticas El número de bytes, palabras y líneas en el archivo especificado, y muestra los resultados estadísticos para la salida. Parámetros: -l cuenta el número de filas. -C contar el número de bytes. -W Count Word Count.
Verifique si un puerto TCP o UDP está escuchando
La detección de puertos a menudo se encuentra en la detección de recursos del sistema, especialmente en la comunicación de red, la detección de estado del puerto a menudo es muy importante. A veces, los procesos, la CPU, la memoria, etc. pueden estar en el estado normal, pero el puerto está en estado anormal y el negocio no funciona normalmente. La siguiente función puede determinar si el puerto especificado está escuchando. Tiene un parámetro que es el puerto a detectar. Primero utiliza NetStat para generar la información de ocupación del puerto y luego filtra el número de salida de puertos TCP a través de GREP, AWK, WC. La segunda declaración es generar el número de monitores de los puertos UDP. Si los puertos TCP y UDP son 0, devuelva 0, de lo contrario, regrese 1.
Listado 6. Detección de puertos
La copia del código es la siguiente:
función de escucha
{
TcplisteningNum = `netstat -an | Grep ": $ 1" | /norte
AWK '$ 1 == "tcp" && $ nf == "escuchar" {imprimir $ 0}' | WC -L`
UdplisteningNum = `netstat -an | grep": $ 1 " /n
| AWK '$ 1 == "UDP" && $ NF == "0.0.0.0:*" {imprima $ 0}' | WC -L`
((Escucharnum = tcplisteningNum + udplisteningNum))
if [$ audingnum == 0]
Entonces
{
Echo "0"
}
demás
{
Echo "1"
}
FI
}
Demostración de muestra:
1) Programa fuente (por ejemplo, consulte si el estado del puerto 8080 está escuchando)
La copia del código es la siguiente:
islisten = `escuchando 8080`
Si [$ islisten -eq 1]
Entonces
{
Echo "El puerto está escuchando"
}
demás
{
Echo "El puerto no está escuchando"
}
FI
2) Salida de resultados
La copia del código es la siguiente:
El puerto está escuchando
[dyu@xilinuxbldsrv shell] $
3) Análisis de resultados
De la salida anterior, se puede ver que el puerto 8080 de este servidor Linux está en el estado de escucha.
4) Introducción al comando
NetStat: se utiliza para mostrar datos estadísticos relacionados con los protocolos IP, TCP, UDP e ICMP, y generalmente se usa para verificar el estado de conexión de red de cada puerto de la máquina. Parámetros: -A Muestra enchufes en todas las conexiones. -N use la dirección IP directamente, no a través del servidor de nombres de dominio.
La siguiente función también es detectar si un puerto TCP o UDP está en un estado normal.
La copia del código es la siguiente:
tcp: netstat -an | egrep $ 1 | awk '$ 6 == "escuchar" && $ 1 == "tcp" {imprimir $ 0}'
UDP: NetStat -an | Egrep $ 1 | Awk '$ 1 == "UDP" && $ 5 == "0.0.0.0:*" {imprima $ 0}'
Introducción al comando
EGREP: busque la cadena especificada en el archivo. El efecto de ejecución de EGREP es como Grep -E. La sintaxis y los parámetros utilizados se pueden referir a la instrucción GREP. La diferencia de GREP es el método de interpretar cadenas. EGREP se interpreta utilizando una sintaxis de expresión regular extendida, mientras que GREP usa sintaxis de expresión regular básica. Las expresiones regulares extendidas tienen especificaciones de expresión más completas que las expresiones regulares básicas.
Verifique el número de procesos de ejecución
A veces es posible que necesitemos obtener la cantidad de arranque de un proceso en el servidor. La siguiente función es detectar el número de procesos de ejecución, como el nombre del proceso es cftestapp.
La copia del código es la siguiente:
Runnum = `ps -ef | GREP -V VI | grep -v cola | Grep "[ /] cftestapp" | GREP -V GREP | WC -L
Detectar la carga de la CPU del sistema
Al mantener el servidor, a veces se encuentra la interrupción comercial debido a la carga de CPU (utilización) excesiva del sistema. Es posible ejecutar múltiples procesos en el servidor. Es normal ver la CPU de un solo proceso, pero la carga de la CPU de todo el sistema puede ser anormal. La carga de la CPU del sistema se monitorea de manera oportuna a través de los scripts, y las alarmas se pueden enviar de manera oportuna en caso de anormalidades, lo que facilita al personal de mantenimiento a tratarlo de manera oportuna y prevenir accidentes. La siguiente función puede detectar el uso de la CPU del sistema. Use VMStat para tomar el valor inactivo de la CPU del sistema 5 veces, tome el valor promedio y luego obtenga el valor de ocupación real de la CPU actual tomando la diferencia de 100.
La copia del código es la siguiente:
función getScpu
{
Cpuidle = `vmstat 1 5 | sed -n '3, $ p' /n
| Awk '{x = x + $ 15} end {imprimir x/5}' | Awk -f. '{imprimir $ 1}'
Cpunum = `echo" 100- $ cpuidle "| BC`
echo $ cpunum
}
Demostración de muestra:
1) Programa de origen
La copia del código es la siguiente:
cpu = `getScpu`
echo "La CPU del sistema es de $ CPU"
Si [$ CPU -GT 90]
Entonces
{
Echo "El uso de la CPU del sistema es mayor al 90%"
}
demás
{
echo "El uso de la CPU del sistema es normal"
}
FI
2) Salida de resultados
La copia del código es la siguiente:
La CPU del sistema es 87
El uso de la CPU del sistema es normal
[dyu@xilinuxbldsrv shell] $
3) Análisis de resultados
De la salida anterior, podemos ver que la tasa de utilización actual de la CPU del sistema de servidor Linux es del 87%, lo cual es normal, y no hay un límite de alarma de más del 90%.
4) Introducción al comando
VMStat: Abreviatura de estadísticas de meomoria virtual, que pueden monitorear la memoria virtual, los procesos y las actividades de la CPU del sistema operativo.
Parámetros: -n significa que cuando la información del encabezado salida se muestra solo una vez durante la salida cíclica periódica.
Detectar el espacio del disco del sistema
La detección de espacio en disco del sistema es una parte importante de la detección de recursos del sistema. Durante el mantenimiento del sistema, a menudo necesitamos verificar el uso del espacio en el disco del servidor. Debido a que algunas empresas necesitan escribir hojas de llamadas, registros o archivos temporales en cualquier momento, si el espacio de disco está agotado, también puede causar interrupción comercial. La siguiente función puede detectar el uso del espacio en disco de un directorio en el espacio de disco actual del sistema. El parámetro de entrada es el nombre del directorio que debe detectarse, usar DF para generar la información de uso del espacio del disco del sistema y luego obtener el porcentaje de uso del espacio del disco de un directorio a través del filtrado GREP y AWK.
La copia del código es la siguiente:
función getDiskspc
{
Si [$# -ne 1]
Entonces
Devolver 1
FI
Carpeta = "$ 1 $"
Diskspace = `df -k | grep $ carpeta | awk '{imprimir $ 5}' | awk -f% '{imprimir $ 1}'
Echo $ diskspace
}
Demostración de muestra:
1) Programa de origen (el directorio de detección es /arranque)
La copia del código es la siguiente:
Carpeta = "/Boot"
Diskspace = `getDiskspc $ carpeta`
Echo "El espacio de disco de carpeta de System $ es $ Diskspace%"
Si [$ diskspace -gt 90]
Entonces
{
Echo "El uso del disco del sistema ($ carpeta) es mayor al 90%"
}
demás
{
echo "El uso del disco del sistema ($ carpeta) es normal"
}
FI
2) Salida de resultados
La copia del código es la siguiente:
El espacio del disco del sistema /arranque es del 14%
El uso del disco del sistema (/arranque) es normal
[dyu@xilinuxbldsrv shell] $
3) Análisis de resultados
Como se puede ver en la salida anterior: actualmente, el 14% ha utilizado el espacio de disco del directorio /arranque en este sistema de servidor Linux, que es normal, y no hay un límite de alarma de más del 90% de uso.
4) Introducción al comando
DF: Verifique el uso del espacio del disco del sistema de archivos. Este comando se puede utilizar para obtener información como cuánto espacio ha ocupado el disco duro y cuánto espacio queda. Parámetros: -k se muestra en k bytes.
Resumir
Según la plataforma Linux, la monitorización de script de Shell es un método muy simple, conveniente y efectivo para monitorear servidores y procesos, lo cual es muy útil para el desarrollo del sistema de desarrollo y mantenimiento de procesos. No solo puede monitorear la información anterior y enviar alarmas, sino también monitorear registros de procesos y otra información. Espero que este artículo sea útil para todos.