Página 1 de 1

Monitorear Linux

NotaPublicado: 2015-09-11 12:41 @570
por lmol45
Para monitorización de CPU y unidades que disco que están conectadas y las características o propiedades de todos los dispositivos de la PC o servidor, ¿cómo se puede realizar?

Re: Linux Latinamérica: Script Perl Monitorear Consumo Real

NotaPublicado: 2015-09-13 15:31 @688
por explorer
Bienvenido a los foros de Perl en Español, lmol45.

¿De qué sistema operativo estamos hablando?

Re: Linux Latinamérica: Script Perl Monitorear Consumo Real

NotaPublicado: 2015-09-14 09:40 @444
por lmol45
Red Hat versión 5 y CentOS 6.4 para servidor. Estoy trabajando en un programa que me monitorice el estado de los dispositivos principales. Gracias de antemano por la ayuda.

Re: Linux Latinamérica: Script Perl Monitorear Consumo Real

NotaPublicado: 2015-09-14 12:42 @571
por explorer
Yo suelo usar gkrellm (y gkrellmd) para ver el estado de las máquinas en tiempo real.

Si quiero ver gráficas cada 5 minutos, uso MRTG.

En Red Hat y CentOS, suele traer una aplicación gráfica, llamada "Monitor del sistema", que puedes ejecutar desde el menú del escritorio.

Te pido que mires este documento: Linux: Monitorización de rendimiento
(Quizás el SAR sea muy duro, pero el resto de utilidades son las imprescindibles para monitorizar).

Entonces, desde Perl yo suelo llamar a algunas de estas utilidades del sistema, cuando necesito realizar un procesado de lo que estas utilidades devuelven. Si no, saca el resultado directamente en pantalla.

Por ejemplo, si quiero que en uno de los paneles tmux aparezca el estado de los discos (su espacio libre), me basta con ejecutar el comando

watch -n 3 df -aH

Eso lo que hace es ejecutar cada 3 segundos el comando df (mostrar espacio reservado/libre en los discos) de todos los dispositivos (-a) y en modo abreviado (-H).

¿Nos puedes poner un ejemplo de lo que quieres obtener? A lo mejor se resuelve con un par de comandos en la terminal.

Re: Linux Latinamérica: Script Perl Monitorear Consumo Real

NotaPublicado: 2015-09-18 09:52 @453
por lmol45
Okay, lo que necesito capturar es: RAM ocupada, RAM total, estado de CPU, nombre del SO, versión del SO, unidades de disco conectadas (espacio ocupado y espacio total). Básicamente eso. El problema es que no sé cómo tomar esos datos, para luego insertar esas bitácoras y almacenarlos en una BD. Como soy nuevo en Perl me está costando encontrar información para el desarrollo de este script debido a que los libros o páginas que he investigado no muestra sobre esta funcionalidad en Perl.

Re: Linux Latinamérica: Script Perl Monitorear Consumo Real

NotaPublicado: 2015-09-18 14:42 @654
por explorer
Toda esa información te la da Linux en su árbol /sys o /proc/sys. Solo hay que acceder como si fuera archivos normales y sacar la información.

Por ejemplo, para ver la carga del procesador haríamos esto:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/env perl
  2. my $loadavg_file = '/proc/loadavg';     # nombre del archivo virtual
  3.  
  4. open my $LOAD, '<', $loadavg_file;      # abrir archivo en lectura
  5. my $loadavg = <$LOAD>;                  # leemos la línea
  6. close $LOAD;                            # cerramos
  7.  
  8. print $loadavg;                         # y lo sacamos en pantalla
Coloreado en 0.006 segundos, usando GeSHi 1.0.8.4

Lo mismo para todos los demás parámetros del sistema:
Hay módulos específicos para acceder a partes de esta información. Por ejemplo, con Linux::stat se accede datos estadísticos del sistema (tiempo que lleva encendido, carga de cada núcleo, total de operaciones en los discos, número de interrupciones, paginación).

De forma profesional, usaríamos la llamada del sistema sysinfo(2) del propio Linux. Una forma de hacerlo es con la distribución Perl Linux::SysInfo. Para los sistemas de archivos tienes Sys::Filesystem::Linux, que deriva de Sys::Filesystem.

Para sacar estadísticas, tienes cosas como Sys::Statistics::Linux.

Tienes muchos más módulos en la rama Linux::

Re: Monitorear Linux

NotaPublicado: 2015-09-21 10:06 @462
por lmol45
Gracias, haré pruebas para generar lo que necesito. Agradezco su colaboración. Cuando concluya les mostraré el resultado para compartir este conocimiento.

Re: Monitorear Linux

NotaPublicado: 2015-10-12 11:48 @533
por lmol45
La manera que encontré de trabajar con la información de los discos.
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. sub discos() {
  2.     $comando  = `df -k`;
  3.     @recorte  = split( "\n", $comando );
  4.     $contador = split( "\n", $comando );
  5.     for ( my $i = 1; $i <= $contador - 1; $i++ ) {
  6.         my @Discos = split( " ", $recorte[$i] );
  7.         $Discos[1] = sprintf( "%.4f", $Discos[1] / 1048576 );
  8.         $Discos[2] = sprintf( "%.4f", $Discos[2] / 1048576 );
  9.         $almacenamiento = ($almacenamiento) . ("([$Discos[0] $i]-$Discos[2]/$Discos[1])");
  10.         $nroDispositivo++;
  11.     }
  12. }
  13.  
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

Re: Monitorear Linux

NotaPublicado: 2015-10-12 18:07 @797
por explorer
Esta es otra forma, por completar:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/env perl
  2. use v5.18;
  3.  
  4. sub discos() {
  5.     my @discos = split "\n", qx(df -k);
  6.  
  7.     shift @discos;                              # quitamos la cabecera
  8.  
  9.     my $i = 1;
  10.  
  11.     for my $linea (sort @discos) {
  12.    
  13.         my @columnas = split " ", $linea;
  14.  
  15.         next if $columnas[0] !~ m{/dev/};       # saltamos a la siguiente $linea si no se trata
  16.                                                 # de un dispositivo
  17.  
  18.         map { $columnas[$_] = sprintf( "%.4f", $columnas[$_] / 1E6 ) } 1..2;
  19.  
  20.         say "([$columnas[0] $i]-$columnas[2]/$columnas[1])";
  21.     }
  22.     continue {
  23.         $i++;
  24.     }
  25. }
  26.  
  27. discos();
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4