Está en la página 1de 9

21/11/2016

TratamientodeloslogsconcontenedoresDockerDonDocker

(http://dondocker.com)

DON DOCKER.

INICIO (HTTP://DONDOCKER.COM/)
BLOG (HTTP://DONDOCKER.COM/#LATEST-NEWS)
PRECIOS (HTTP://DONDOCKER.COM/#PRECIOS-CAAS)
TODAS LAS ENTRADAS (HTTP://DONDOCKER.COM/2016/)
CONTACTAR (HTTP://DONDOCKER.COM/#CONTACT-US)

Contenedores Docker como servicio. Infraestructura de servidores virtuales

dondocker

octubre 30, 2016

0 comments (http://dondocker.com/tratamiento-los-logs-contenedores-docker/#respond)

TRATAMIENTO DE LOS LOGS CON CONTENEDORES DOCKER


Una de las facetas ms olvidadas dentro de los sistemas y las aplicaciones, al menos por mi parte, es el tratamiento de los logs. En mi experiencia ha sido muy comn
desarrollar aplicaciones sin tan siquiera repara en ese factor.
Es muy comn que los frameworks o las libreras dispongan de soluciones ms o menos potentes. Claro que si no piensas en esto y tu aplicacin empieza a tener cierta
envergadura la cosa se complica y te puedes pasar horas buscando en logs de gigas a ver por que a tu cliente x no le ha cobrado el servicio y.
En el caso de los contenedores Docker el problema puede ser el mismo o incluso peor, debido a que la filosofa del uso de los microservicios es atomizar cada recurso y eso
conlleva que vas a tener muchas ms fuentes de datos.
Como ya sabemos Docker tiene una orden para mostrarnos los logs por pantalla. Pero que pasa si tienes, digamos, 20 contenedores como revisar que ha pasado en un
momento dado. Pues para ello tenemos lo que se conoce como loggin drivers. Con ello vamos a poder gestionar la forma en la que queremos administrar nuestros logs.
Bsicamente se trata de poder usar algn sistema independiente de la mquina en la que se ejecuta el o los contenedores y poder filtrar rpidamente. Nativamente y en la
versin actual Docker cuenta con muchos driver:

Driver

Descripcin

http://dondocker.com/tratamientoloslogscontenedoresdocker/

Tipo

1/9

21/11/2016

TratamientodeloslogsconcontenedoresDockerDonDocker

none

Suprime la salida de mensajes por parte del contenedor

Bsico

json-file

Este es por defecto y suele usar para desarrollo. No recomendado en produccin

Bsico

syslog

Usa el estandar syslog y puede enviar los datos por TCP

Sistema operativo

journald

Es un formato muy usado en linux que usa el jornalist del sistema

Sistema operativo

gelf

Utiliza el fomrato GELF y junto a Graylog y Logstash es una buena solucin

Recolectores

fluentd

Fluentd es un sistema colector de datos os tremendamente especifico

Recolectores

awslogs

Usa el sistema de logs de Amazon CloudWatch

Nube

splunk

Sistema colector de ddatos que usa HTTP

Nube

etwlogs

Usado para mquinas windows

Sistema operativo

gcplogs

Usa el sistema de la nube de Google GCL

Nube

La clasificacin de los drivers no es muy exacta y en la pgina de docker no existe, es una interpretacin. Dicho esto nos vamos a centrar en un tipo el recolector por la
siguiente razn el resto o ya tienen un interfaz ya creado, como el caso de los sistemas de nube, o son demasiado sencillos como bsicos.

Gestin de logs con Fluentd


Como avance el la tabla anterior FluentD es un sistema colector de datos muy eficiente. Aunque es una aplicacin open source dispone de una versin de pago que ofrece una
solucin completa para la gestin total de los datos.
La funcin de FluentD es por un lado filtrar los logs, por otro generar un buer para que el envo y recogida de datos tenga una cadencia continua y por ltimo enrutar o
enviar los datos.
Esto quiere decir que con FluentD no vamos a poder ni almacenar y buscar en los logs. Pero la buena noticia es que FluentD dispone de infinidad de plugins que nos permiten
comunicar el envo de datos a otras herramientas como Elasticsearch o MongoDB que almacenan los logs y luego podemos buscar eventos.

Por tanto la idea es utilizar el driver de FluentD y enviar los datos a un servidor de Elasticsearch que almacene todos los eventos que ocurran. Luego para mostrar la
informacin de manera legible es posible que necesitemos un frontal web como Kibana o similar.
Adems de la opcin del driver, con Docker cada uno dispone de una opciones propias que para el caso de FluentD son:
fluentd-address: especifica el servidor que va a recoger los datos, por defecto [localhost:24224]
tag: Es la etiqueta por el que se conocern los mensajes de este contenedor.
fluentd-buer-limit: especifica el tamao mximo del buer para el log, por defecto [8MB]
fluentd-retry-wait: indica el retras inicial antes de enviar datos, por defecto. [1000ms]
fluentd-max-retries: este es el nmero mximo de conexiones [1073741824]
fluentd-async-connect: si se bloquea o no la conexin al arranque [false]

Arranque de los contenedores


Para indicarle a Docker que use este sistema de recopilacin de datos deberamos usar el siguiente comando.

>_dockerrundti\logdriver=fluentd\logoptfluentdaddress=ipfluentd:24224\logopttag=docker.{{.Name}}\alpinesh

http://dondocker.com/tratamientoloslogscontenedoresdocker/

2/9

21/11/2016

TratamientodeloslogsconcontenedoresDockerDonDocker

Con esto arrancaramos una imagen alpine con el colector de fluentd. Pero necesitaros que ese colector est arrancado para disponer de los datos. Para ello vamos a
arrancar una imagen con FluentD con la siguiente configuracin:

#test.conf
<source>
@typeforward
</source>

<matchdocker.**>
@typestdout
</match>

Ahora arrancamos la mquina as

>_dockerrundnameelasticsearchelasticsearch:2
>_dockerrunitrmp24224:24224v$PWD/test.conf:/fluentd/etc/test.conflinkelastic:elasticsearcheFLUENTD_CONF=test.conffluent/f
luentd:latestsh
$>fluentgeminstallfluentpluginsecureforward
$>fluentgeminstallfluentpluginelasticsearch
$>fluentdc/fluentd/etc/$FLUENTD_CONFp/fluentd/plugins$FLUENTD_OPT

En estos momentos ya est escuchando el acceso. Esta configuracin de test simplemente escucha y reproduce el log del otro contenedor. Para comprobarlo solo tenemos
que ejecutar cualquier accin que tenga resultado en pantalla en el contenedor a observar, por ejemplo:

#Contenedoraobservar
>_echoHolaDonDocker
#FluentdServer
2016102818:34:37+0000docker.291db667a574:{"container_name":"/drunk_ardinghelli","source":"stdout","log":"/#\u001b[6nhol\b\u001b[J\b\u001b[J
\b\u001b[Jechohola\b\b\b\bola\u001b[J\b\b\bla\u001b[J\b\ba\u001b[J\b\u001b[J\"holado\b\u001b[J\b\u001b[JDonDocker\"\u001b[H\r/#echo\"holaDonD
ocker\"\u001b[J\r","container_id":"291db667a574c21e6bb1b57a76e66a7d2bf2fd108a49852fb1415a655c94220d"}
2016102818:34:37+0000docker.291db667a574:{"container_name":"/drunk_ardinghelli","source":"stdout","log":"holaDonDocker\r","container_id":"29
1db667a574c21e6bb1b57a76e66a7d2bf2fd108a49852fb1415a655c94220d"}

Obviamente esto no tiene mucha utilidad, aunque solo con esta configuracin podramos centralizar para ver por pantalla los logs de todos los contenedores en
funcionamiento.

Conectar con Elasticsearch


Ahora necesitamos guardar los logs en algn lugar. Podemos guardarlos todos en un nico fichero pero esto dificulta el posterior filtrado y bsqueda de errores.
Por ello vamos a usar Elasticsearch como motor de almacenamiento. Para ello tenemos que cambiar la configuracin del contenedor de FluentD
No he comentado nada sobre el funcionamiento interno de FluentD pero trabaja usando plugins que no estn disponibles por defecto. Aqu est el listado de plugins que
soporta FluentD (http://www.fluentd.org/plugins)
Para este caso vamos a necesitar el plugin de Elasticsearch y otro llamado record-reformer. Este segundo nos va a permitir reescribir los logs que recibimos, para aadir
elementos o etiquetas.
La instalacin es sencilla y solo tendremos que usar el comando fluentdgem .

>_fluentgeminstallfluentpluginsecureforward
>_fluentgeminstallfluentpluginelasticsearch

Una vez instalados los plugins vamos a modificar la configuracin para enviar los datos a Elasticsearch.

http://dondocker.com/tratamientoloslogscontenedoresdocker/

3/9

21/11/2016

TratamientodeloslogsconcontenedoresDockerDonDocker

<source>
@typeforward
</source>

<match*.*>
typerecord_reformer
tagelasticsearch
facility${tag_parts[1]}
severity${tag_parts[2]}
</match>

<matchelasticsearch>
typecopy
<store>
typestdout
</store>
<store>
typeelasticsearch
logstash_formattrue
flush_interval5s#debug
hostelasticsearch
port9200
</store>
</match>

Enlnea

Desgranando un poco la configuracin vemos dos nuevos ajustes. El primero es una etiqueta <match> que va a tratar todos los datos de entrada y les va a aadir la
etiqueta elasticsearch. A continuacin volvemos a filtrar con <match> esta vez con la etiqueta elasticsearch que previamente hemos puesto. Ahora almacenamos el
resultado en 2 sitios diferentes: el primero la salida por pantalla typestdout como el que tenamos antes y el segundo lo enviamos, ahora s, a Elasticsearch. indicando la
ip y el puerto.
Para el servidor de Elasticsearch podemos usar el contenedor oficial ya que no vamos a realizar ningn cambio sobre el.

>_dockerrundnameelasticsearchelasticsearch:2
>_dockerrunitrmp24224:24224v$PWD/test.conf:/fluentd/etc/test.conflinkelastic:elasticsearcheFLUENTD_CONF=test.conffluent/f
luentd:latestsh
$>fluentgeminstallfluentpluginsecureforward
$>fluentgeminstallfluentpluginelasticsearch
$>fluentdc/fluentd/etc/$FLUENTD_CONFp/fluentd/plugins$FLUENTD_OPT

Ya tenemos el sistema en funcionamiento. Ahora podemos crear un contenedor y verificar que funciona.

>_dockerrundti\
logdriver=fluentd\
alpinesh
$>echoHOLAESTOYAQUI
$>echoHOLAESTOYAQUI
$>echoHASTALUEGO

Si vamos a la mquina de FluentD veremos por pantalla estos mensajes como mostramos antes. Para verificar que Elasticsearch est almacenado los mensajes que FluentD le
manda tendremos que hacer una peticin directa de esta forma:

http://dondocker.com/tratamientoloslogscontenedoresdocker/

4/9

21/11/2016

TratamientodeloslogsconcontenedoresDockerDonDocker

>_curlXGEThttp://IPELASTIC:9200/_all/_search
{
"took":3,
"timed_out":false,
...
"hits":{
"total":20,
"max_score":1,
"hits":[
{
"_index":"logstash2016.10.29",
"_type":"fluentd",
"_id":"AVgRMXhTf8yIYMtrE6Fr",
"_score":1,
"_source":{
"container_id":"d052e7fb4712ba4db5726a8f20aff768b94e2d5ed4efb31baba9ef0ba6e75817",
"container_name":"/hungry_yonath",
"source":"stdout",
"log":"/#\u001b[6n\r/#echo\"HOLASOYYO\"\u001b[J\r",
"facility":"d052e7fb4712",
"severity":"",
"@timestamp":"20161029T16:06:40+00:00"
}
},
...

Enlnea

Vemos el texto que hemos introducido en el contenedor hungry_yonat. Pero est claro que usar curl para obtener los datos no es una manera practica de entender que
est pasando. La solucin es usar un sistema de visualizacin grfica de datos.
Existen diferentes alternativas para visualizacin de datos con grficos, est Grafana (http://play.grafana.org/dashboard/db/big-dashboard) por ejemplo o Kibana
(https://www.elastic.co/products/kibana) que est muy optimizado para el uso junto a Elasticsearch.

"
El sistema que mejor entiende a Elasticsearch es Kibana.
"
Integracin de Kibana
Para esta prueba podemos usar el contenedor oficial de Kibana. Para ello solo hace falta arrancarlo enlazndolo con Elasticsearch.

>_dockerrunlinkelasticsearch:elasticsearchp5601:5601namekibanarmkibana:latest

Si todo est correcto podremos ir al navegador y ver la aplicacin.


No voy a explicar en profundidad como funciona o que cosas se pueden hacer con Kibana (tampoco es que sepa mucho). Lo que si voy a mostrar es como podemos ver
grficos y obtener una mnima interpretacin.
El primer filtro que va a usar Kibana a la hora de buscar va ser el indice y cuando entremos al programa no va a pedir cual va a ser ese indice. Si nos fijamos en los datos que
muestra Elasticsearch vemos que hay un campo llamado _index .

"max_score":1,
"hits":[
{
"_index":"logstash2016.10.29",
"_type":"fluentd",
"_id":"AVgRMXhTf8yIYMtrE6Fr",

Ese es el campo que va a filtrar y el formato ser logstashYYYY.MM.DD En el caso de esta instalacin yo no he tenido que completar este indice pero en instalaciones
manuales si he tenido que crear este indice.

http://dondocker.com/tratamientoloslogscontenedoresdocker/

5/9

21/11/2016

TratamientodeloslogsconcontenedoresDockerDonDocker

Una vez que hemos definido el indice podemos ir a la pantalla Discover. En como una especie de tabla con todos los registros del indice pero ubicados temporalmente.

Enlnea

Esta pantalla es algo as como ver los logs de manera grfica. Tambin se pueden filtrar por trminos o ajustar el periodo de tiempo.
Vamos a dar un paso ms all y vamos a un grfico que nos ayude a interpretar un poco mejor posibles problemas o casusticas. Dado que la informacin que estamos
almacenado es muy sencilla, a parte de la fecha y el nombre del contenedor solo nos queda un campo por el que poder filtrar que es de log . Entonce vamos a crear un
grfico de sectores para ver cuales son las palabras ms repetidas en la shell del contenedor.
Para ello, vamos a la parte de Visualice , una vez que aparezca el listado de tipos de grficos seleccionamos Piechart

http://dondocker.com/tratamientoloslogscontenedoresdocker/

6/9

21/11/2016

TratamientodeloslogsconcontenedoresDockerDonDocker

Enlnea

Luego indicamos una nueva bsqueda. Nos aparecer un grfico sin ninguna segmentacin. Para completarlo pinchermos en Splitslices a continuacin como vamos a
segmentar por uno de los campos tenemos que seleccionar Terms y en Field seleccionamos el campo por el que vamos a segmentar, en este caso log . Por ltimo le
damos al botn verde (play) y veremos el siguiente grfico:

Este grfico nos muestra la naturaleza de los mensajes de la shell y no tiene ninguna utilidad. Pero si los contenedores fueran servidores apache podramos hacer grficos de
porcentajes de errores, peticiones por minuto, errores recurrentes o bytes enviados.

http://dondocker.com/tratamientoloslogscontenedoresdocker/

7/9

21/11/2016

TratamientodeloslogsconcontenedoresDockerDonDocker

Como veis las posibilidades son enormes y todo esto facilita mucho la toma de decisiones a corto y a largo plazo. Y como siempre un grfico o dibujo es ms fcil de
entender que una tabla con cifras. Por tanto os animo a usar los drivers que tienen Docker para unificar los logs y llevarlos a otro servidor aislado del resto para evitar
problemas.
Gracias por leer el contenido y espero que sea de utilidad. Si es as comprtelo en tus redes sociales.
Un saludo.

Enlnea
Relacionado

(http://dondocker.com/orquestando-contenedoresdocker-con-docker-compose/)

(http://dondocker.com/seguridad-para-contenedoresdocker-en-produccion/)

(http://dondocker.com/servidor-de-correoelectronico-con-contenedores-docker/)

Orquestando contenedores docker con docker-compose


(http://dondocker.com/orquestando-contenedoresdocker-con-docker-compose/)

Seguridad para contenedores Docker en produccin


(http://dondocker.com/seguridad-para-contenedoresdocker-en-produccion/)

Servidor de correo electrnico con contenedores Docker


(http://dondocker.com/servidor-de-correo-electronicocon-contenedores-docker/)

En "Docker"

En "Docker"

En "Docker"

Tags:docker (http://dondocker.com/tag/docker/), elasticsearch (http://dondocker.com/tag/elasticsearch/), fluentd (http://dondocker.com/tag/fluentd/),


kibana (http://dondocker.com/tag/kibana/), logs (http://dondocker.com/tag/logs/)

SHARE ON:

(https://twitter.com/share?
(http://www.facebook.com/sharer/sharer.php?
(http://www.linkedin.com/shareArticle?
url=http://dondocker.com/tratamientos=100&p[url]=http://dondocker.com/tratamientomini=true&url=http://dondocker.com/tratamientoloslogs-

los-

los-

logs-

logs-

dondocker

contenedorescontenedorescontenedoresdocker/&related=dondocker&text=Tratamiento
docker/&p[images]
docker/&title=Tratamiento
de
RELATED ARTICLES
los

[0]=http://dondocker.com/wpde
content/uploads/2016/10/dondockerlos

logs
logslogs
(http://dondocker.com/almacenamiento-distribuido-y-persistente-con-contenedores-docker/)
con

contenedorescon

contenedores
653x435.png&p[title]=Tratamiento
contenedores
Docker)

de

Docker&source=http://dondocker.com/tratamiento-

los

los-

Almacenamiento distribuido
logs y persistente
logs- con contenedores Docker

con
contenedores(http://dondocker.com/computacion-segura-contenedores-docker/)
contenedores
docker/)
Docker&p[summary]=Una
de
las
Seguridad para contenedores
Docker en produccin. Segunda parte.
facetas

http://dondocker.com/tratamientoloslogscontenedoresdocker/

8/9

21/11/2016

TratamientodeloslogsconcontenedoresDockerDonDocker

(http://dondocker.com/seguridad-para-contenedores-docker-en-produccion/)
ms

olvidadas
dentro
de
los
Seguridad para contenedores Docker en produccin

sistemas

Enlnea

y las
LEAVE A COMMENT

aplicaciones,
al

Name

menos
por

Email

mi
parte,

Website

es el
tratamiento

Message

de
los
logs.
En

SEND

mi
experiencia

Recibir un email con los siguientes comentarios a esta entrada.

ha

Recibir un email con cada nueva entrada.

sido
muy
comn
desarrollar
aplicaciones
sin
SEARCH...

tan
siquiera
repara
en

ENTRADAS RECIENTES

ese
factor.
Es
muy

Almacenamiento distribuido y persistente con contenedores Docker (http://dondocker.com/almacenamiento-distribuido-ypersistente-con-contenedores-docker/)

comn
que

Tratamiento de los logs con contenedores Docker (http://dondocker.com/tratamiento-los-logs-contenedores-docker/)

los
frameworks

Seguridad para contenedores Docker en produccin. Segunda parte. (http://dondocker.com/computacion-segura-contenedores-

o las

docker/)

libreras
Seguridad para contenedores Docker en produccin (http://dondocker.com/seguridad-para-contenedores-docker-en-produccion/)
dispongan

http://dondocker.com/tratamientoloslogscontenedoresdocker/

9/9

También podría gustarte