Hace unos días Netflix liberaba la herramienta que utilizan internamente para analizar el rendimiento de sus instancias: Vector. Esta herramienta no deja de ser una aplicación web que se conecta a la API de PCP para obtener las métricas. PCP es un demonio que se instala en cada una de las instancias o servidores que se quiere monitorizar.
Para hacerlo funcionar se pueden seguir varios manuales:
- Introducing Vector: Netflix’s On-Host Performance Monitoring Tool
- Taking Netflix’s Vector (Performance Monitoring Tool) For A Spin
En este último explica como compilar PCP para generar paquetes .rpm o .deb según la distribución GNU/Linux donde lo querramos instalar. Para crear el procedimiento se basa en el fichero Vagrantfile del Github de PCP. Entonces para crear nuestros paquetes y poder redistribuirlos en varias máquinas seguiremos los siguientes pasos:
RPM
Clonaremos el repositorio de PCP:
$ git clone git://git.pcp.io/pcp
Instalaremos las dependencias y compilamos con el script Makepkgs. Hay que tener en cuenta que existen dependencias obligatorias y otras opcionales. Se pueden comprobar lanzando el script ./qa/admin/check-vm. Si falla alguna de las opcionales, como la libmicrohttpd-devel, es posible que algunas funcionalidades o paquetes no se creen.
$ cd pcp $ yum -y groupinstall 'Development Tools' $ yum -y install git ncurses-devel readline-devel man libmicrohttpd-devel qt4-devel\ python26 python26-devel perl-JSON sysstat perl-TimeDate \ perl-XML-TokeParser perl-ExtUtils-MakeMaker perl-Time-HiRes \ systemd-devel bc cairo-devel cyrus-sasl-devel \ systemd-devel libibumad-devel libibmad-devel papi-devel libpfm-devel \ rpm-devel perl-Spreadsheet-WriteExcel perl-Text-CSV_XS bind-utils httpd \ python-devel nspr-devel nss-devel python-ctypes nss-tools \ perl-Spreadsheet-XLSX ed cpan valgrind time xdpyinfo rrdtool-perl $ ./Makepkgs
Una vez compilado podemos instalar los paquetes que se acaban de crear:
$ rpm -ivh pcp-*/build/rpm/*.rpm
Los servicios ya se pueden habilitar y arrancar y verificaremos que el servicio pmwebd está escuchando en el puerto 44323:
$ systemctl enable pmcd $ systemctl enable pmwebd $ systemctl start pmcd $ systemctl start pmwebd $ netstat -anp | grep ':44323' tcp 0 0 0.0.0.0:44323 0.0.0.0:* LISTEN 8970/pmwebd tcp 0 0 :::44323 :::* LISTEN 8970/pmwebd
DEB
Para generar los .deb empezaremos también clonando el repositorio, instalando las dependencias y compilando. El script Makepkgs detecta que se trata de una distribución basada en Debian y generará los paquetes .deb:
# apt-get update # apt-get install -y '^(libreadline|libpapi|libpfm4|libcoin80|libicu)-dev$' \ bc bison curl flex git g++ dpkg-dev pkg-config debhelper chrpath \ python-all python-all-dev libnspr4-dev libnss3-dev libsasl2-dev libmicrohttpd-dev libavahi-common-dev \ libqt4-dev autotools-dev autoconf gawk libxml-tokeparser-perl libspreadsheet-read-perl gdb sysv-rc-conf \ libcairo2-dev sysstat valgrind apache2 realpath unbound \ libibumad-dev libsoqt-dev libsoqt-dev-common libnss3-tools libibmad-dev x11-utils #./Makepkgs
Una vez generados los paquetes se podrán instalar, arrancar los servicios y comprobar que el demonio pmwebd esta escuchando en el puerto 44323:
# dpkg -i build/deb/*.deb # service pcp start # service pmwebd start
Instalación de Vector:
El último paso será la instalación del propio Vector. Deberemos tener instalados con antelación NodeJS ya que los instaladores se basan en el. Una vez instalado, instalaremos las herramientas bower y gulp (en Red Hat):
$ yum install nodejs npm $ npm install -g bower $ npm install -g gulp
A continuación clonaremos el repositorio de Vector en github e instalaremos las dependencias con bower. Accederemos al directorio app y arrancaremos un servidor HTTP con Python escuchando en el puerto 8080:
$ git clone https://github.com/Netflix/vector.git $ cd vector/ $ bower install $ cd app/ $ python -m SimpleHTTPServer 8080
Con un navegador apuntaríamos a http://localhost:8080 y ya aparecerá la interfaz de Vector. En el campo de host podemos poner el nombre o la IP de la máquina que queremos monitorizar. Así es como se muestran las gráficas al iniciar un Benchmark: