Puesta en marcha de la Plataforma ELK para el Análisis de Contrataciones en formato OCDS#
Al final de esta sección tendremos todo lo necesario para hacer consultas y visualizaciones sobre los datos de Contrataciones en formato OCDS.
Para una mejor comprensión de esta sección se recomienda tener familiaridad básica con la terminal de comandos:
Objetivos#
Iniciar un servidor ElasticSearch con Kibana.
Cargar los datos publicados de Contrataciones en un formato sencillo de consultar.
Realizar una consulta sobre los datos.
El presente proyecto está desarrollado para poder iniciar los 3 servicios, según sea necesario de forma fácil y rápida.
Prerequisitos#
Abrir la terminal para comandos del Sistema Operativo
Descomprimir el archivo descargado y entrar a la carpeta que se acaba de crear
En la terminal:
cd ManualKibanaOCDS-master
Iniciar el Contenedor Servidor con ElasticSearch y Kibana#
Ahora podremos iniciar el servidor ejecutando el siguiente comando en la terminal:
docker-compose -f elastic-kibana.yaml up
Este comando le indica al programa Docker que debe crear un contenedor según lo indicado en el archivo
elastic-kibana.yaml
, en el mismo indicamos que ambos programas deben iniciarse.
Pasados unos minutos, depende de los recursos disponibles, deberíamos poder abrir en el navegador web la dirección http://localhost:5601/app/kibana y Kibana se mostrará disponible.
A partir de este momento ElasticSearch y Kibana están listos para ser usados. Aunque aún no tenemos datos disponibles.
Cargar los datos OCDS a ElasticSearch#
Para este proceso debemos posicionarnos en la carpeta elk-gobmx-csv-master/pipeline
, en la
terminal:
cd pipeline
Descargando los paquetes de datos#
Si queremos trabajar con el total de los contratos publicados en estándar OCDS sin importar los últimos datos publicados, lo primero que debemos hacer es asegurarnos de haber descargado el archivo de Contrataciones en formato OCDS por paquetes json publicado en el sitio datos.gob.mx
Al 2 de Septiembre de 2018 este archivo lleva por nombre
contratacionesabiertas_bulk_paquetes.json.zip
y tiene un tamaño de 310.5 MB aproximadamente.
Es importante mencionar que el formato de esta información se conoce en el estándar OCDS como recordPackages o paquete de Registros; las herramientas y código incluidas en éste manual utilizan este formato, para utilizar alguno otro como releases o releasePackages o alguna otra estructura no definida por el estándar OCDS serían necesarias modificaciones al código.
Estos archivos pueden ser bastante grandes en tamaño, es recomendable tener por lo menos 2GB libres de espacio en disco duro antes de continuar.
Ahora debemos descomprimir el archivo contratacionesabiertas_bulk_paquetes.json.zip
, esto generará múltiples archivos
.json
dentro de una carpeta:
carpeta/contratacionesabiertas_bulk_paquete1.json
carpeta/contratacionesabiertas_bulk_paquete2.json
carpeta/contratacionesabiertas_bulk_paquete3.json
...
IMPORTANTE: Debemos saber la ruta completa de esta carpeta con los archivos .json, pues será necesaria para el paso de carga.
A manera de ejemplo asumamos que los archivos fueron descargados y descomprimidos dentro de la carpeta de Descargas del sistema operativo. La ruta completa a esta carpeta debería ser 1
Linux/Ubuntu/Mac:
/home/{nombre de usuario}/Descargas
Se puede abreviar como$HOME/Descargas
Windows:
C:\Users\{nombre de usuario}\Descargas
Se puede abreviar como%HOMEPATH%\Descargas
Al confirmar esto u obtener la ruta completa de la carpeta con los archivos .json
podemos continuar.
Procesando y cargando los datos#
IMPORTANTE#
El proceso actual carga específicamente la parte compiledRelease
de cada documento OCDS, esto en
función de poder realizar el análisis sobre la ultima versión disponible de los releases OCDS, se recomienda leer los
capítulos anteriores antes de proceder
En esta misma carpeta tenemos disponible otra herramienta diseñada para la carga de los datos, que también hace uso de un contenedor Docker. Usaremos dos comandos unicamente: el primero para preparar el contenedor, el segundo para ejecutarlo.
docker build . -t logstash-sfp-compranet-ocds:latest
Con este comando Docker estará preparando el contenedor con todo lo necesario para procesar y cargar los datos.
Una vez finalizado, podemos ejecutar el proceso de carga según el sistema operativo disponible.
Linux/Ubuntu o Mac
docker run --net="host" -v $HOME/Descargas:/input logstash-sfp-compranet-ocds
Windows
docker run --net="host" -v %HOMEPATH%\Descargas:/input logstash-sfp-compranet-ocds
Este comando utilizará el contenedor preparado con anterioridad ejecutando el proceso y carga de los datos. Para mayores detalles puede consultar la documentación técnica de este proceso.
La pantalla ahora debe mostrar información del proceso. Esto puede tomar algunos minutos.
Al finalizar exitosamente deberemos ver la leyenda: Carga finalizada
y Kibana esta listo
.
Ahora podremos visitar la pagina de Kibana y consultar ver los datos cargados.
Para conocer más sobre los detalles técnicos de como logramos hacer la carga de los datos, en la siguiente sección hablaremos de como utilizamos LogStash para este proceso.
Extra: Descargando los datos OCDS directo de la API de datos.gob.mx#
Anteriormente se explicó cómo descargar el conjunto completo de los datos en OCDS mediante un sólo archivo, en esta sección presentamos una alternativa para descargar sólo los contratos que buscamos o contratos más actualizados que aún no se hayan publicado en el archivo completo, para esto usaremos la API datos.gob.mx proporcionada por el Gobierno Mexicano.
Para ver la documentación completa de la API se puede revisar la Guía básica de uso de la API donde se detallan las opciones específicas de filtrado.
Para realizar la acción de descarga y para manipular un poco los datos utilizaremos las herramientas: cURL y jq.
El comando
curl
nos permitirá descargar la información de forma automática mientras el comandojq
nos ayudará a darle un formato manejable a los datos JSON. Más adelante en este manual se incluye una breve introducción ajq
.
Se pueden instalar ambos programas de forma local, por ejemplo para Linux Ubuntu con una instrucción como:
sudo apt-get install -y curl jq
Para Windows o Mac, tendríamos que descargar los archivos ejecutables por separado, pero también tenemos la opción de usar el contenedor docker incluido en el presente código, para ello solo tenemos que ejecutar el siguiente comando de docker:
docker run --rm -it -v $HOME/Descargas:/input --entrypoint=bash logstash-sfp-compranet-ocds
Recuerda que
$HOME/
es una abreviación propia de sistemas Linux y Mac, en Windows usaremos%HOMEPATH%\
Al ejecutar éste comando obtendremos una nueva línea de comandos, que debe lucir como:
bash-4.2$
En esta [línea de comando]((https://es.wikipedia.org/wiki/Bash) ya podremos ejecutar los comandos presentados a continuación.
Para descargar los últimos 100 procesos de contratación y guardarlo en un archivo .json
:
curl https://api.datos.gob.mx/v2/contratacionesabiertas | jq -crM ".results" > contratacionesabiertas_ultimos_100.json
Hay que considerar que para conservar los archivos creados dentro del contenedor deberemos moverlos o crearlos en las carpetas compartidas entre la computadora y el contenedor. De lo contrario, estos archivos se perderán al momento de «apagar» el contenedor.
Para descargar los procesos de contratación que involucran a una unidad compradora determinada (limitado a 1000, pero se puede cambiar)
curl https://api.datos.gob.mx/v2/contratacionesabiertas?records.compiledRelease.parties.name=Servicio%20de%20Administraci%C3%B3n%20Tributaria&pageSize=1000&page=1 | jq -crM ".results" > contratacionesabiertas_SAT_1000.json
Para comprender mejor este último comando, vamos a detallarlo parte por parte:
Primero se invoca a
curl
Luego se incluye la dirección URL base de la API: https://api.datos.gob.mx/v2/contratacionesabiertas
A continuación los parámetros de filtrado:
records.compiledRelease.parties.name
: filtra por el valor de ese campo, es decir, el nombre de alguna de las partes del contrato.pageSize
: especifica cuántos resultados devolverá en cada pedidopage
: permite ir pidiendo las páginas siguientes en caso de que haya más de una.
Luego usamos el comando
jq
para extraer únicamente la parte de los resultados.Finalmente indicamos que el resultado de la operación debe ser almacenado en un archivo, es importante que este nombre de archivo represente la consulta realizada para simplificar luego el archivado.
Estos archivos deben almacenarse y tratarse de la misma forma que en la sección anterior, poniéndolos en la carpeta de descargas, para poder continuar con el próximo paso.