Agregaciones y búsquedas en elasticsearch

Elasticsearch

Sabemos que todas las agregaciones se ejecutan en el contexto de una búsqueda y además si queremos podemos utilizar la misma query de agregaciones para devolver una muestra de documentos utilizados para calcular dicha agregación.

Este comportamiento lo podemos modificar. Vamos a ver como.

Devolver los documentos de una query y sobre ellos aplicar una serie de agregaciones.

Esto devuelve una respuesta con:

  • documentos que cumplen la query
  • las agregaciones aplicadas a los documentos resultado de la query

Por ejemplo

GET .../_search
{
    "size" : 10,
    "query" : {
        ...
    },
    "aggs" : {
        "nombre_agg": {
            ...
        }
    }
}

Devolver los documentos de una query y aplicar un filtrado a los documentos antes de aplicar las agregaciones

Esto devuelve una respuesta con:

  • documentos que cumplen la query
  • las agregaciones aplicadas a los documentos filtrados sobre el resultado de la query

Por ejemplo

GET .../_search
{
   "size" : 10,
   "query":{
      ...
   },
   "aggs":{
      "filtro": {
         "filter": { 
            ...
         },
         "aggs": {
            "nombre_agg":{
               ...
            }
         }
      }
   }
}

Devolver los documentos de una query y aplicar a esos documentos un filtro, pero generar las agregaciones sobre los documentos devueltos por la query

Esto devuelve una respuesta con:

  • documentos filtrados que han cumplido la query
  • las agregaciones aplicadas sobre los documentos devueltos por la query

Por ejemplo

GET .../_search
{
    "size" : 10,
    "query": {
        ...
    },
    "post_filter": {    
        "term" : {
        ...
        }
    },
    "aggs" : {
        "nombre_agg": {
            ...
        }
    }
}
Anuncios

docker Cookbook, la resolución de nombres de dominio DNS en la red por defecto bridge

Docker Logo

Como ya sabemos en el fichero /etc/resolv.conf de nuestra máquina tenemos la configuración de los DNS de nuestra organización o empresa, y es lo que nos permite poder resolver los nombres de dominio y máquinas tanto de internet como de nuestra intranet.

Cuando trabajamos con contenedores docker se encarga de configurar estos ficheros en nuestros contenedores.

Comportamiento por defecto

Lo que hace por defecto si no le decimos nada es copiar el fichero /etc/resolv.conf de nuestra máquina en el nuevo contenedor, pero filtrando o eliminando todas las IPs locales.

Una vez realizado el filtrado de todas las IPs locales (es decir, ips como 127.0.1.1), si no queda ninguna entrada de un DNS válido, crea el fichero /etc/resolv.conf con las IPs de los DNS públicos de Google.

Por lo tanto seremos capaces de resolver cualquier nombre de dominio de internet, pero nunca seremos capaces de resolver los nombres de dominio de las máquinas de nuestra intranet.

Así pues si nos encontramos en esta situación, para poder resolver los nombres de dominio o nombres de máquinas de nuestra intranet dentro de un contenedor de docker debemos revisar que exista una IP válida de un DNS de nuestra organización.

Por ejemplo, si tenemos el siguiente /etc/resolv.conf

Sigue leyendo

docker Cookbook, añadir un nombre de dominio o nombre máquina en el fichero /etc/hosts de un contenedor docker

Docker Logo

La opción –add-host

Existen ocasiones donde el nombre de una máquina o el nombre de un dominio no se encuentra en nuestros DNS. En estos casos lo normal es añadir una entrada en nuestro fichero /etc/hosts del sistema operativo.

Cuando trabajamos con contenedores esto lo realizaremos con la opción –add-host al ejecutar el contenedor.

Por ejemplo:

$ sudo docker run -it --name prueba --add-host my-domain.com:127.0.0.1 ubuntu bash
root@9840971d73ef:/# ping my-domain.com
PING my-domain.com (127.0.0.1) 56(84) bytes of data.
64 bytes from localhost (127.0.0.1): icmp_seq=1 ttl=64 time=0.033 ms
64 bytes from localhost (127.0.0.1): icmp_seq=2 ttl=64 time=0.038 ms
...

docker Cookbook, borrar todas las imagenes en estado dangling

Docker Logo

Cuando utilizamos docker terminaremos viendo imágenes que no están siendo utilizadas y que terminan ocupando espacio.

Al principio no tendremos este tipo de imágenes, pero según vayamos utilizando imágenes de docker o creando imágenes propias terminaremos viéndolas. Estas imágenes las identificaremos por el nombre del repositorio y del tag, que serán

<none>:<none>

y que las veremos lanzando el comando docker images.

$ docker images
REPOSITORY                                         TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
...
<none>                                             <none>              47a4e50d9b35        18 hours ago        669.6 MB
<none>                                             <none>              8e2393b52fd9        18 hours ago        669.6 MB
<none>                                             <none>              8fb173d5c23c        18 hours ago        669.6 MB
<none>                                             <none>              19cb9c21f160        21 hours ago        669.5 MB
<none>                                             <none>              9cf1c0068503        21 hours ago        669.5 MB
<none>                                             <none>              27c02a9fda80        21 hours ago        669.5 MB
<none>                                             <none>              b2d384eb6f23        6 days ago          669.5 MB
<none>                                             <none>              ae0dbc713400        6 days ago          669.5 MB
...

Como vemos por el nombre del repository y del tag tenemos imágenes en estado dangling.

Listado de todas la imágenes en estado dangling

Si queremos ver solamente las imágenes en estado danglin lo podemos hacer con un simple comando.

$ docker images -f "dangling=true"

Borrar todas las imágenes en estado dangling

Y para liberar y recuperar el espacio ocupado por esta imágenes lo haremos igualmente con un comando de docker.

$ docker rmi $(docker images -f "dangling=true" -q)

Referencia

Este artículo lo hemos basado en What are Docker : images?

Una nueva actualización de CloseToYou permite entrar en modo “Ocultar mi ubicación”

icono-closetoyou

Desde hace unas semana CloseToYou se ha actualizado y entre las novedades trae dos que son realmente interesantes y que están relacionadas con la privacidad de los usuarios.

Hasta ahora todas las personas a las que dábamos permiso de ver nuestra ubicación podían verla en cualquier momento.

Ahora con esta actualización podemos en cualquier momento ocultar nuestra ubicación a todos los usuarios a los que dimos permisos, o bien podemos elegir quienes no queremos que nos vean.

Así nos resulta fácil activar CloseToYou solo cuando salimos de ruta, y desactivar CloseToYou cuando hemos llegado a nuestro destino.

Esta nueva funcionalidad es una de las más demandadas a CloseToYou y por fin en esta actualización la han implementado.

Para utilizar esta nueva funcionalidad solo tenemos que actualizar CloseToYou a la versión 0.0.3 desde Google Play

disponible-google-play

y seguir los siguientes pasos.

Sigue leyendo

El mecanismo de heartbeat en kafka 0.9

Kafka

Es el mecanismo seguido por Apache Kafka 0.9 para determinar si un consumidor no se encuentra disponible, bien por un fallo en la aplicación, por un fallo de red o por un fallo de la máquina donde se está ejecutnado.

Recordemos que un grupo de consumidores comienzan a consumir mensajes de los topics en los que se ha subscrito. Cada topic suele estar formado por 1 log de varias particiones cada uno, y el broker que hace de coordinador del grupo, le asigna a cada consumidor una sola partición de un topic.

Por ejemplo si 3 consumidores se subscriben a un topic de 5 particiones, cada consumidor estará consumiendo mensaje de 1 sola partición. Nunca podremos tener más de un consumidor consumiendo más de 1 partición de un mismo topic.

En el ejemplo podríamos tener:

Sigue leyendo

Utilización del comando netcat en un script de shell para verificar si Zookeeper esta levantado y operativo

Linux

Zookeeper dispone de una serie de comandos que podemos enviarle para obtener datos sobre su estado, estadísticas sobre su rendimiento y clientes conectado, etc.

Estos comandos son enviados directamente a Zookeeper, por lo que podemos utilizar el comando netcat para hacer un script de shell y verificar si esta levantado y operativo.

Para ello le enviaremos a Zookeeper el comando ruok, y él nos responderá con un imok.

Otros comandos que le podemos enviar a Zookeeper son:

  • kill, apaga el servidor
  • ruok, para verificar su estado. En el caso de estar todo correcto nos devolvería imok
  • stat, devuelve estadísticas sobre su rendimiento y los clientes conectados
  • etc

Script para comprobar si Zookeeper esta levantado y operativo

Sigue leyendo