Oct 262015
 

Instalación de SiLK

En primer lugar, para obtener el paquete de instalación debemos rellenar el formulario en la página http://lucidworks.com/products/silk/#download_form. Una vez enviado el formulario, recibiremos en la dirección de email que hemos introducido un mensaje con el enlace para la descarga.

El paquete descargado en nuestro caso se llama SiLK-1.5.zip y ocupa 290 Mb

Para realizar la instalación, basta con descomprimir el fichero zip en un directorio de nuestra elección. Una vez descomprimido, podemos ver que el paquete contiene tres directorios, para cada uno de los componentes principales de SiLK:

  • solr-4.10.3 – El motor de búsqueda solr
  • solrWriterForLogStash – Una versión de LogStash que procesa los ficheros de log de accesos del servidor web, y los almacena en un índice solr
  • banana – Es el front-end que presenta el resultado del proceso estadístico del los datos almacenados en solr en forma de gráficos y tablas en un navegador web

Instalación de Java

El motor de búsqueda solr utilizado por SiLK se ejecuta en una máquina virtual Java, por lo que debemos disponer de un entorno de ejecución de Java (JRE) previamente instalado y operativo. Alternativamente podemos instalar el kit de desarrollo de java (JDK), que además del JRE, contiene también un compilador y otras herramientas.

En un sistema Linux Debian, la instalación se puede realizar fácilmente con el comando apt-get:

A continuación comprobamos la versión de java instalada con la opción “-version”:

Configuración y ejecución de solr

El motor de búsqueda solr de ejemplo incluido en el paquete SiLK se ejecuta con los comandos:

Con esto, solr comienza a ejecutarse y queda a la espera de conexiones en el puerto 8983. Desde un navegador web, accedemos a la url “http://SERVIDOR:8983/solr”, y accedemos al frontend de solr:

SiLK-sample-collections

Como podemos ver, la instancia de solr ya contiene la definición de algunas colecciones de ejemplo. Entre ellas:

  • La colección “logstash_logs” es una colección vacía, preparada para que logstash almacene en ella los logs de acceso.
  • La colección “banana-int” es una colección vacía, preparada para almacenar en ella los paneles de control que se generen en banana.

Configuración y ejecución de LogStash

El componente LogStash de SiLK se encuentra en el directorio  “SiLK-1.5/solrWriterForLogStash/logstash_deploy”

Para ejecutar logstash, debemos preparar previamente un fichero de configuración “logstash_apache.conf” con tres secciones: input, filter y output.

Sección input

En esta sección se indican los ficheros de entrada a logstash.

Sección filter

Sección output

Con este fichero de configuración, podemos ejecutar logstash con los comandos:

Típicamente, el fichero que se especifica en la sección input del fichero de configuración es un fichero de log de accesos “vivo”, sobre el que apache está registrando las solicitudes de acceso que se van recibiendo. Cuando logstash termina de procesar el contenido del fichero, continúa ejecutándose, y va procesando los nuevos registros conforme apache los va escribiendo en el fichero.

Si lo que queremos es procesar un fichero de log y que logstash finalice su ejecución cuando termine de procesarlo, deberemos cambiar la configuración de la sección input para que los datos a procesar se lean desde stdin:

y ejecutar logstash de la siguiente forma:

Configuración de banana

Para acceder a banana, basta con visitar desde un navegador la url:

si todo funciona correctamente, veremos el panel de control por defecto “Basic Dashboard with Pointers”:

banana-basic-dashboard

Si estamos utilizando una instancia de solr que se ejecuta en otro servidor, o en un puerto distinto del puerto por defecto 8983, deberemos editar el fichero de configuración :

En dicho fichero, deberemos especificar la url de acceso a solr, incluyendo el nombre completo del servidor y el puerto en el que da servicio.

A continuación podemos comenzar a definir y configurar paneles en los que se presentarán de forma gráfica las estadísticas que nos interesa obtener. Para no partir de cero, podemos descargar de github algunos ejemplos.

 Publicado por en 11:20 am
Sep 132015
 

A diferencia de otros lenguajes de programación, como C++ o Java, PHP es un lenguaje interpretado. Esto significa que cada vez que se ejecuta un script escrito en PHP, el intérprete debe convertir las sentencias contenidas en el código fuente del script en sentencias de bajo nivel directamente ejecutables por la máquina.

En el caso de un servidor web, los scripts que generan el código HTML de las páginas que son entregadas a los clientes pueden ser ejecutados cientos o miles de veces cada día. Para evitar que el intérprete tenga que ejecutarse cada vez, es habitual implementar un mecanismo por el cual el opcode generado la primera vez que se invoca al script se guarda, y es reutilizado en sucesivas ejecuciones del mismo script.

Hasta la versión 5.4 de PHP, este mecanismo de cache estaba implementado por distintas extensiones, de entre las cuales la más popular es probablemente APC (Alternate oPcode Cache). La versión 5.5 de PHP incluye en la distribución base el “Zen opcode cache”, que sustituye a la extensión APC.

En este artículo se exponen las características de esta nueva implementación, y la manera de configurarla.

Seguir leyendo »

 Publicado por en 3:33 pm
Jul 112015
 

La distribución base del intérprete PHP incluye un función json_decode que hace muy sencillo el proceso de ficheros en formato JSON. Pero esta función trabaja sobre un string que debe haber sido completamente en memoria. Esto puede ser un problema si se trabaja con ficheros de varios cientos de megabytes, o incluso de más de un gigabyte, como es el caso en determinados escenarios (por ejemplo, cuando se procesan datos geográficos en formato GeoJSON). En este artículo se explica el uso de una librería “jsonstreamingparser” para PHP, que permite procesar los objetos contenidos en el fichero conforme se van leyendo, evitando un consumo excesivo de los recursos de memoria disponibles. Seguir leyendo »

 Publicado por en 7:04 pm
Jul 052015
 

HTTPS es un protocolo seguro para la encriptación de la información intercambiada entre un navegador y un servidor web.

Tradicionalmente, ha sido recomendable implementar HTTPS en sitios web que ofrecen funcionalidad adicional a usuarios registrados, tales como tiendas online y otros sitios web de comercio electrónico. En este tipo de sitios, la información que envía el cliente al servidor, y la que recibe del mismo, puede contener contraseñas, números de tarjetas de crédito, y en general datos confidenciales que deben ser encriptados.

Más recientemente, existe una campaña liderada por Google para implementar la encriptación HTTPS en todo tipo de sitios web. Google ha reconocido que el uso de HTTPS en un sitio web es una señal que mejora (aunque débilmente) el posicionamiento del sitio en los resultados de búsqueda.

En este artículo vamos a explicar una manera sencilla de implementar este protocolo en un sitio WordPress, utilizando la red de entrega de contenidos Cloudflare.

Seguir leyendo »

 Publicado por en 9:39 am
Jun 042015
 

En el sitio web del Australian Bureau of Statistics hay disponibles para su descarga un buen número de ficheros en formato shapefile que contienen la divisiones geográficas del territorio australiano utilizadas para la generación de estadísticas, y su correspondencia con las áreas administrativas a distintos niveles: estados, áreas locales de gobierno (condados, municipios,…) y con las áreas postales.

Seguir leyendo »

 Publicado por en 10:46 am
Abr 272015
 

Una de las operaciones más frecuentes durante el desarrollo de un proyecto en el que se utiliza un sistema de control de versiones, es la de revisar las diferencias entre un fichero en el área de trabajo, y la última versión del mismo fichero guardada en el repositorio.

Por otra parte, una herramienta gráfica que presente de forma visual las diferencias entre dos versiones de un fichero de texto puede hacer mucho más cómoda la comparación.

En este artículo se explica la manera de realizar esta y otras operaciones similares en un proyecto que utiliza el sistema de control de versiones git.

Seguir leyendo »

 Publicado por en 7:50 am
Mar 272015
 

La ubicación de un servidor web en relación con la ubicación de los usuarios que acceden al mismo puede influir decisivamente en el tiempo de carga efectivo de las páginas. Si la audiencia del un sitio es internacional, los usuarios que acceden desde América o Australia a un servidor ubicado en España o Alemania tendrán una impresión peor que la de los usuarios que acceden desde Europa.

Este problema se puede evitar utilizando un servicio de entrega de contenido distribuído, conocido habitualmente como CDN (Content Delivery Network).

En este artículo comentamos las características de un servicio de este tipo, poniendo como ejemplo la configuración de un sitio WordPress para hacer uso del CDN CloudFlare

Seguir leyendo »

 Publicado por en 3:45 pm
Mar 272015
 

En un servidor linux, es habitual encontrar ciertos procesos que se ejecutan periódicamente, mediante entradas en cron. Algunos tienen una periodicidad de un mes, una semana o un día, pero otros deben ser ejecutados en períodos de tiempo mucho más cortos, de uno o dos minutos.

En ocasiones, el tiempo de ejecución de estos procesos puede ser muy variable, y eventualmente puede ocurrir que un proceso esté todavía ejecutándose cuando llega el momento de volver a ejecutar dicho proceso. Esto puede provocar problemas graves, dependiendo del tipo de tarea que lleva a cabo el proceso.

En este artículo se explica cómo detectar esta circunstancia, y evitar que un mismo proceso se ejecute más de una vez concurrentemente.

Seguir leyendo »

 Publicado por en 10:24 am
Mar 242015
 

En artículos anteriores hemos resaltado la importancia de reducir el tiempo que tarda en cargarse completamente una página web en el navegador del usuario. Por una parte, la impresión de los usuarios es mucho más favorable si el contenido de la página aparece rápidamente en pantalla. Pero además, el tiempo total de carga de la página es un factor que los principales motores de búsqueda, incluido Google, tienen en cuenta en sus algoritmos de posicionamiento.

A menudo, lo que más influye en el tiempo total de carga de una página es la descarga y el procesamiento recursos externos. De entre ellos, las librerías javascript y las hojas de estilo CSS utilizadas por la página tienen con frecuencia un impacto considerable.

En nuestro anterior artículo sobre “Cómo reducir el tiempo de carga de una página web con javascript asíncrono” ya hemos explicado la manera de realizar la carga del código javascript externo de manera que no bloquee la presentación de la página.

En este artículo veremos las opciones existentes para cargar del mismo modo las reglas de estilo CSS contenidas en un recurso externo.

Seguir leyendo »

 Publicado por en 6:42 pm
Mar 232015
 

En muchos lenguajes de programación existe una función sleep() que permite suspender la ejecución del programa durante un cierto tiempo, sin consumir CPU. Habitualmente, esta función se utiliza en un bucle, a la espera de que cierto recurso necesario para continuar la ejecución esté disponible.

En javascript no existe la función sleep(), pero se puede utilizar setTimeout para programar la ejecución de una función al cabo de un cierto tiempo.

Seguir leyendo »

 Publicado por en 12:19 pm