Añadir gráficas de threads en Cacti

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. [root@servcentos01 ~]# ps -eTf | grep httpd | grep -v grep | wc -l
  2. 9

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

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

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

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

  1. 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

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

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