Volvemos a la carga hablando de Cacti. Una plataforma de la que hemos hablado largo y tendido, que nos permite fijar la atención en nuestros sistemas administrados. En esta ocasión vamos a ver como crear una gráfica que nos muestre la evolución de los hilos o threads, si utilizamos su termino anglosajón, de un proceso dado.

Antes de nada, aclaremos conceptos.

¿Qué es un thread respecto a un proceso?

Ambos, tanto los procesos y los hilos, son secuencias independientes de ejecución. La diferencia principal es que los threads (del mismo proceso) se ejecutan en un espacio de memoria compartido, mientras que los procesos, propiamente dichos, se ejecutan en espacio de memoria separados. Un proceso puede contener uno o más hilos.

Caso práctico

Primero de todo tenemos que obtener el número total de hilos de un proceso. Para ellos vamos a utilizar varios programas, concatenados por tuberías o pipes. Con ‘ps’ y una serie de parámetros obtendremos todos los procesos con sus respectivos hilos asociados. Con ‘grep’, filtraremos para obtener solamente la información de un único proceso y sus hilos. Por último, con ‘wc’, nos devolverá el número total.

A modo de ejemplo obtendremos el número de hilos del proceso Apache, llamado en Centos 7, ‘httpd’, como sigue:

1 2 [ root @ servcentos01 ~ ] # ps -eTf | grep httpd | grep -v grep | wc -l 9 [root@servcentos01 ~]# ps -eTf | grep httpd | grep -v grep | wc -l 9

Si sólo utilizamos un único filtro, sin contar los procesos, el resultado es el siguiente:

1 2 3 4 5 6 7 8 9 10 apache 422 422 1363 0 10 : 20 ? 00:00:00 / usr / sbin / httpd -DFOREGROUND root 1363 1363 1 0 mar28 ? 00:03: 16 / usr / sbin / httpd -DFOREGROUND root 6791 6791 6074 0 10 : 27 pts / 1 00:00:00 grep --color =auto httpd apache 18096 18096 1363 0 10 :02 ? 00:00:00 / usr / sbin / httpd -DFOREGROUND apache 18158 18158 1363 0 10 :02 ? 00:00:00 / usr / sbin / httpd -DFOREGROUND apache 18273 18273 1363 0 10 :02 ? 00:00:00 / usr / sbin / httpd -DFOREGROUND apache 18306 18306 1363 0 10 :02 ? 00:00:00 / usr / sbin / httpd -DFOREGROUND apache 19372 19372 1363 0 10 :04 ? 00:00:00 / usr / sbin / httpd -DFOREGROUND apache 20232 20232 1363 0 10 :05 ? 00:00:00 / usr / sbin / httpd -DFOREGROUND apache 20533 20533 1363 0 10 :05 ? 00:00:00 / usr / sbin / httpd -DFOREGROUND apache 422 422 1363 0 10:20 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND root 1363 1363 1 0 mar28 ? 00:03:16 /usr/sbin/httpd -DFOREGROUND root 6791 6791 6074 0 10:27 pts/1 00:00:00 grep --color=auto httpd apache 18096 18096 1363 0 10:02 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND apache 18158 18158 1363 0 10:02 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND apache 18273 18273 1363 0 10:02 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND apache 18306 18306 1363 0 10:02 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND apache 19372 19372 1363 0 10:04 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND apache 20232 20232 1363 0 10:05 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND apache 20533 20533 1363 0 10:05 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND

Ok. Ya tenemos la línea de comandos necesaria para obtener la información que necesitamos.

Imaginemos que tenemos un servidor central con Cacti, conectados a decenas de servidores. De los cuales obtenemos información. En uno de los servidores monitorizados, debemos tener instalado previamente Cacti, en su fichero de configuración ubicado, en /etc/snmp/snmpd.conf (que abremos creado previamente, con la línea más arriba indicada), debemos añadir las siguientes líneas:

1 extend httpd / usr / local / bin / httpd_stats.sh extend httpd /usr/local/bin/httpd_stats.sh

En la línea anterior indicamos donde se ubica el script con la línea que hemos comentado antes.

Además, para que funcione correctamente, debemos también añadir esta línea:

1 view systemview included .1 80 view systemview included .1 80

Una vez hecho esto, guardamos y volvemos a la consola de comandos. Reiniciamos el servicio:

1 systemctl restart snmpd systemctl restart snmpd

Ahora, para que servidor central sepa leer correctamente los datos del script, debemos de ubicar la “uid” de snmp. De esta manera:

1 snmptranslate -On NET-SNMP-EXTEND-MIB::nsExtendOutLine. \" httpd \" .1 snmptranslate -On NET-SNMP-EXTEND-MIB::nsExtendOutLine.\"httpd\".1

En mi caso, con el resultado:

1 .1.3.6.1.4.1.8072.1.3.2.4.1.2.5.104.116.116.112.100.1 .1.3.6.1.4.1.8072.1.3.2.4.1.2.5.104.116.116.112.100.1

Ahora, para poder gráficar correctamente en Cacti la información obtenida. Vamos a utilizar una plantilla que he creado yo, reciclando algunas que monitorizan otros procesos. Los podéis consultar y usar libremente desde mi repositorio en GitHub.

Una vez descargados, los debemos importar desde la plataforma Cacti. Concretamente desde “Importar/Exportar”, tal y como se muestra en la imagen:

Una vez importado sólo debemos añadir la gráfica al host en cuestión. Y tras pasar unos minutos podemos ver el resultado:

Lo dejamos aquí. Espero que en algún momento la información aquí relatada os sea de utilidad. Nos vamos leyendo ^.^

Fuentes consultadas:

Sourceforge.net – Extending snmpd using shell scripts

Circulos Meos – Monitoring php-fpm threads with Cacti