Porque Kibana te permite analizar que archivos se han solicitado y/o servido de tu web, lo que te aporta una visión diferentes respecto al análisis por medio de recolección de datos por scripts de javascript como Analytics.
¿Cuál es la ventaja de analizar logs?
Los logs son simplemente el registro de todas las solicitudes y errores que se realizan a tu servicio web (Apache/Nginx por ejemplo), por lo tanto, los logs te aportan una visión muy veraz respecto a que es lo que pasa a nivel de archivos solicitados y/o servidos, independientemente de si se ha llegado a cargar del todo la petición en el navegador del cliente, o si se está ejecutando javascript en el cliente. Es también una forma muy veraz de ver que errores se están generando al intentar servir datos a los navegadores. Y no olvidar que cuando pasa algo con un portal respecto al comportamiento, un posible hackeo, caídas, es un buen sitio por donde empezar a indagar por donde van los tiros.
Hay 3 programas necesarios:
Logstash: Permite recolectar de un servidor o varios, los logs que queremos almacenar y posteriormente analizar.
ElasticSearch: Es un motor de búsqueda que permite hacer búsquedas de forma rápida en grandes volúmenes de datos y que a su vez, es fácilmente escalable.
Kibana: Es la herramienta para visualizar los datos a través de un entorno web, permitiendo generar dashboards y exportar CSVs con datos.
En mi caso la instalación la estoy realizando en un Debian Little Endian. Algunos comandos pueden variar para tu entorno pero por lo general no deberías tener demasiados problemillas.
Para empezar toca abrir un terminal con ssh y actualizar los repositorios con el comando sudo apt-get update
Nuestra versión Logstash 2.4 requiere Java 7 así que tocará instalarlo antes. Podemos comprobar nuestra versión de Java con el comando java -version
Si te aparece «java version «1.7.xxx» entonces perfecto. Si no toca instalarlo.
Añadir los repositorios oficiales de Java:
echo "deb http://ppa.launchpad.net/webupd8team/java/ubuntu xenial main" | \ sudo tee /etc/apt/sources.list.d/webupd8team-java.list echo "deb-src http://ppa.launchpad.net/webupd8team/java/ubuntu xenial main" | \ sudo tee -a /etc/apt/sources.list.d/webupd8team-java.list
Añadir la firma pública del repositorio:
sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys EEA14886
Actualizar los repositorios: sudo apt-get update
Instalamos Java: sudo apt-get install oracle-java8-installer
Cuando nos aparezca
Do you want to continue? [Y/n] root@vps234889:/var/www/public#
pulsamos «Y»
Después en la ventana <Ok>:
Ahora en <Yes>:
Y finalmente comprobamos si tenemos Java instalado ejecutando java -version
Si nos aparece algo parecido a
java version "1.8.0_101" Java(TM) SE Runtime Environment (build 1.8.0_101-b13) Java HotSpot(TM) 64-Bit Server VM (build 25.101-b13, mixed mode)
Entonces querrá decir que lo tenemos instalado correctamente.
Nota: Logstash requiere mínimo Java 7 (java version «1.>=7.X_XXX» ).
Descargar e instalar la firma pública de los repositorios de elastic
wget -qO - https://packages.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -
Añadimos el repositorio a nuestro listado de repositorios (usualmente está en /etc/apt/source.list):
echo "deb https://packages.elastic.co/logstash/2.4/debian stable main" | sudo tee -a /etc/apt/sources.list
Actualizamos los repositorios: sudo apt-get update
Instalamos Logstash: sudo apt-get install logstash
Si te aperece:
Reading package lists... Done Building dependency tree Reading state information... Done The following NEW packages will be installed: logstash 0 upgraded, 1 newly installed, 0 to remove and 75 not upgraded. Need to get 84.8 MB of archives. After this operation, 143 MB of additional disk space will be used. Get:1 https://packages.elastic.co/logstash/2.4/debian/ stable/main logstash all 1:2.4.0-1 [84.8 MB] Fetched 84.8 MB in 9s (9,222 kB/s) Selecting previously unselected package logstash. (Reading database ... 43721 files and directories currently installed.) Preparing to unpack .../logstash_1%3a2.4.0-1_all.deb ... Unpacking logstash (1:2.4.0-1) ... Processing triggers for systemd (215-17+deb8u4) ... Setting up logstash (1:2.4.0-1) ... Processing triggers for systemd (215-17+deb8u4) ...
Entonces es que todo ha ido bien.
La configuración de Logstash se podría clasificar en 3 bloques principales:
Descargar e instalar la firma pública de los repositorios de elastic si no la tenemos ya.
wget -qO - https://packages.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -
Añadimos el repositorio a nuestro listado de repositorios si no lo tenemos ya añadido (usualmente está en /etc/apt/source.list):
echo "deb https://packages.elastic.co/logstash/2.4/debian stable main" | sudo tee -a /etc/apt/sources.list
Actualizamos los repositorios: sudo apt-get update
Instalamos Logstash: sudo apt-get -y install elasticsearch
Todos los parámetros de Elasticsearch se definen en un sólo archivo que está usualmente en /etc/elasticsearch/elasticsearch.yml. Como nuestra configuración de Elasticsearch es muy simple ya que sólo usaremos una máquina para almacenar la información, y sólo queremos que se acceda a Elasticsearh desde la propia máquina, simplemente tenemos que modificar una línea.
Abrimos el archivo con el editor Nano sudo nano /etc/elasticsearch/elasticsearch.yml y con Ctrl + W buscamos «network.host» y sustituimos:
# network.host: 192.168.0.1
por
network.host: localhost
Guardamos el archivo con Ctrl + O e Intro.
De este modo limitamos el acceso a Elasticsearch haciendo que sólo acepte conexiones desde propia máquina, ya que Logstash, quien va a enviar los datos a ElasticSearch se encuentra en la misma máquina en nuestro caso.
Sólo queda comprobar que todo está bien, para lo cual paramos con service elasticsearch stop y arrancamos de nuevo Elastichsearch con service elasticsearch start . Si no aparece ningún mensaje de error estupendo. Ahora para estar seguros de que funciona si ejecutas
curl http://localhost:9200
debería de aparecerte un mensaje de Elasticsearch.
Si ElasticSearch te devuelve el error de:
curl: (7) Failed to connect to localhost port 9200: Connection refused
Es que posiblemente intentas instalar ElasticSearch en una máquina de menos de 2gb de RAM libres. Con sudo journalctl –unit elasticsearch podrás ver que Java te dice no tiene memoria suficiente:
Oct 30 14:18:21 vps.ovh.net elasticsearch[16875]: Java HotSpot(TM) 64-Bit Server VM warning: INFO: os::commit Oct 30 14:18:21 vps.ovh.net elasticsearch[16875]: # Oct 30 14:18:21 vps.ovh.net elasticsearch[16875]: # There is insufficient memory for the Java Runtime Environ Oct 30 14:18:21 vps.ovh.net elasticsearch[16875]: # Native memory allocation (mmap) failed to map 2060255232 Oct 30 14:18:21 vps.ovh.net elasticsearch[16875]: # An error report file with more information is saved as: Oct 30 14:18:21 vps.ovh.net elasticsearch[16875]: # /tmp/hs_err_pid16875.log Oct 30 14:18:21 vps.ovh.net systemd[1]: elasticsearch.service: main process exited, code=exited, status=1/FAI Oct 30 14:18:21 vps.ovh.net systemd[1]: Unit elasticsearch.service entered failed state.
Como un servidor se puede reiniciar por cualquier motivo es importante asegurarnos que cuando el servidor vuelva a arrancar, Elasticsearch también lo haga, lo cual podemos configurar simplemente ejecutando:
sudo update-rc.d elasticsearch defaults 95 10
Antes de nada debemos instalar la firma pública del repositorio oficial de Kibana 5:
wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -
Si no tienes el paquete apt-transport-https debes instalarlo con
sudo apt-get install apt-transport-https
Actualizamos con sudo apt-get update y añadimos el repositorio de Kibana 5:
echo "deb https://artifacts.elastic.co/packages/5.x/apt stable main" | sudo tee -a /etc/apt/sources.list.d/elastic-5.x.list
Volvemos a actualizar sudo apt-get update e instalamos Kibana 5 con
sudo apt-get install kibana
Vamos a comprobar que arranca correctamente asegurandonos que está detenido sudo service kibana stop y arrancándolo nuevamente con sudo service kibana start.
Vamos a configurar que Kibana arranque con el encendido/reinicio del servidor con:
sudo update-rc.d kibana defaults 95 10
Kibana 5 limita por defecto el acceso a sólo localhost, es decir, que sólo la propia máquina puede acceder a Kibana, que es nuestra caso ya que el servidor web que usaremos está en el mismo servidor.
Es necesario instalar un servidor web para poder autentificar a los usuarios que acceden al panel. En nuestra caso vamos a instalar Nginx.
Lo instalamos ejecutando:
sudo apt-get install nginx apache2-utils
Creamos un archivo simple con los usuarios y contraseñas que queremos usar autenticar:
sudo htpasswd -c /etc/nginx/htpasswd.users usuariokibana
En este momento es en el que te pedirá una contraseña para tu usuario, que en nuestro caso es «usuariokibana».
Nota: El programa de htpasswd está incluido en el paquete «apache2-utils». Si no has instalado Nginx porque ya lo tenías en la máquina deberás instalar el paquete para poder generar un archivo de claves sudo apt-get install apache2-utils .
Ahora vamos a configurar el sitio web en nuestro servidor web, en este caso Nginx. En Nginx se configura en la ruta «/etc/nginx/sites-available/» cada una de las webs que quieres servir. Por lo tanto vamos a empezar a crear nuestro archivo de configuración. Con sudo nano /etc/nginx/sites-available/kibana creas el archivo. Copia el código de abajo (Shift + Insert para pegar) :
server { listen 80; server_name nombredetudominio.com; auth_basic "Restricted Access"; auth_basic_user_file /etc/nginx/htpasswd.userkibana; location / { proxy_pass http://localhost:5601; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection 'upgrade'; proxy_set_header Host $host; proxy_cache_bypass $http_upgrade; } }
En la línea «server_name nombredetudominio.com» debes indicar el dominio que quieres usar para acceder a tu Kibana 5. Recuerda que las DNSs de tu dominio deberán apuntar a la ip pública del servidor donde estés montando tu Kibana.
Nota: Con Cloudflare puedes gestionar las DNSs de tu dominio gratis. Hay algunos proveedores de dominios en los cuales no es gratuito.
Para habilitar tales webs se debe crear un enlace simbólico en «/etc/nginx/sites-enabled/» hacia el archivo que define el sitio web en «/etc/nginx/sites-available/» lo cual se hace con el comando
sudo ln -s /etc/nginx/sites-available/kibana /etc/nginx/sites-enabled/kibana
Ya sólo queda reiniciar el servicio de Nginx con sudo service nginx restart
Ahora si accedes a nombredetudominio.com te debería pedir un usuarios y una contraseña y posteriormente te deberia de aparecer la siguiente imagen:
Efectivamente, aún no aparece ningún dato ni nada. Eso es porque aún lo le está llegando nada, pero está todo listo para empezar a recibir datos. Para ello, vamos a configurar las fuentes de datos que ElasticSearch va a almacenar y posteriormente Kibana 5 nos permitirá analizar.
Te dejo seguir la aventura con ayuda de las siguientes rutas:
https://www.elastic.co/guide/en/logstash/current/config-examples.html
https://www.elastic.co/guide/en/logstash/current/advanced-pipeline.html
El comando ./logstash -f /etc/logstash/conf.d/01-input-nginxLocal.conf te permite comprobar si la sintaxis de tu archivo de configuración es correcto.
Si tuvieras alguna duda escríbeme un comentario y ampliaré este punto o el que sea necesario. ¡Un saludo!
Helium 10 Código Descuento Si quieres empezar a vender en Amazon o ya lo estás…
Llevo casi 2 años trabajando con Amazon Vendor. A continuación te mostraré algunas ventajas, desventajas…