Configurar Linode Longview

Una de las herramientas más útiles que tiene Linode (y una de las razones más importantes por las que me decidí a usarlo en lugar de otras VPS de 5 dólares) es Longview.

Longview es un agente que se instala en nuestro server y nos va a proveer métricas muy útiles para monitoreo y diagnóstico de problemas, a las cuales vamos a acceder directamente desde el panel de Linode.

La instalación es muy simple, solo necesitamos acceder a nuestro server por SSH para instalar el agente y modificar algunos archivos.

Instalar el agente

Lo primero que vamos a tener que hacer es instalar el agente en nuestro server. Por el momento Longview es soportado en las siguientes distros:

La forma más fácil de instalar el agente es yendo a nuestro panel de linode, la pestaña Longview y click en "Add Client"

Esto nos va a abrir una nueva sección donde se nos va a informar que el cliente está esperando data, y se abre un popup con la instrucción para instalarlo automáticamente:

También está la opción de instalarlo manualmente, pero la forma automática funciona muy bien. Y después de todo, tiene sentido confiar en la empresa que nos provee el server para esto.

Entonces, para instalar nos logueamos a nuestro server por SSH y corremos la instrucción que nos provee Linode:

curl -s https://lv.linode.com/LONGVIEW_KEY | sudo bash

El instalador va a encontrar si en nuestro server estamos corriendo Apache, Nginx y MySQL (o MariaDB) y nos ofrecerá hacer un update de las configuraciones de dichos servicios para que el agente muestre datos. Yo le dije que sí a todo, pero finalmente tuve que realizar algunos retoques a mano para que todo quede andando.

Configurar Nginx

Tenemos que habilitar nginx_status para que linode tome los datos, asegurándonos de no dejar la url pública, por lo que lo hacemos solo accesible a nivel local. Para esto creamos un nuevo vhosts, agregando un archivo /etc/nginx/sites-available/longview con el siguiente contenido:

server {
        listen 127.0.0.1:80;
        server_name 127.0.0.1;

        location /nginx_status {
                stub_status on;
                allow 127.0.0.1;
                deny all;
        }
}

Una vez hecho esto, lo agregamos a los sitios disponibles agregando el link simbólico en la carpeta sites-enabled:

ln -s /etc/nginx/sites-available/longview /etc/nginx/sites-enabled/longview

Validamos que esté todo ok:

$ nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

Y reiniciamos nginx:

service nginx restart

Configurar Apache

En Apache tenemos que configurar el mod status, vamos a /etc/apache2/mods-available/status.conf (es probable que ya exista el archivo, sino lo creamos) y lo dejamos mas o menos así:

<IfModule mod_status.c>
        # Allow server status reports generated by mod_status,
        # with the URL of http://servername/server-status
        <VirtualHost *:8080>
            <Location /server-status>
                SetHandler server-status
                Require local
            </Location>
        </VirtualHost>
        Listen 8080
        # Keep track of extended status information for each request
        ExtendedStatus On

        <IfModule mod_proxy.c>
                # Show Proxy LoadBalancer status in mod_status
                ProxyStatus On
        </IfModule>
</IfModule>

Dos detalles importantes de la config: Como yo tengo configurado Nginx como reverse proxy y Apache escuchando en el puerto 8080, puse esos valores acá. Y el otro detalle importante es el require local, para que solo se pueda acceder localmente a la página de status.

Una vez hecho esto, nos quedan 3 cosas:

Habilitar el mod

a2enmod status

Validar que todo esté OK

$ apache2ctl configtest 
Syntax OK

Reiniciar Apache

service apache2 restart

Configurar MySQL

Para que longview pueda tomar datos de mysql necesita un usuario, por lo que nos vamos a loguear a MySQL (como root o un usuario con permisos suficientes para crear usuarios) y creamos el usuario de longview:

CREATE USER 'linode-longview'@'localhost' IDENTIFIED BY 'contraseña_mysql';
flush privileges;

Configurar el agente Longview

El último paso es configurar el agente de longview. Nos vamos a /etc/linode/longview.d y ahi creamos (o editamos, si ya existen) 3 archivos:

Apache.conf:

location http://127.0.0.1:8080/server-status?auto

(Nuevamente, remarco el tema del puerto no standard de mi instalación de apache)

Nginx.conf:

location http://127.0.0.1/nginx_status

MySQL.conf:

username linode-longview
password contraseña_mysql

(donde "contraseña_mysql" es la contraseña que utilizamos al crear el usuario de MySQL).

Y eso es todo, solo nos queda reiniciar longview

service longview restart

Y en cuanto el cliente empieza a recibir data, vamos a ver las métricas de nuestro server:

Espero les resulte útil, es una gran herramienta y muy sencilla de instalar. Pueden chequear las guías oficiales acá: https://www.linode.com/docs/platform/longview/