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)
dondocker
0 comments (http://dondocker.com/tratamiento-los-logs-contenedores-docker/#respond)
Driver
Descripcin
http://dondocker.com/tratamientoloslogscontenedoresdocker/
Tipo
1/9
21/11/2016
TratamientodeloslogsconcontenedoresDockerDonDocker
none
Bsico
json-file
Bsico
syslog
Sistema operativo
journald
Sistema operativo
gelf
Recolectores
fluentd
Recolectores
awslogs
Nube
splunk
Nube
etwlogs
Sistema operativo
gcplogs
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.
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]
>_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>
>_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.
>_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
"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/)
En "Docker"
En "Docker"
En "Docker"
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
mi
parte,
Website
es el
tratamiento
Message
de
los
logs.
En
SEND
mi
experiencia
ha
sido
muy
comn
desarrollar
aplicaciones
sin
SEARCH...
tan
siquiera
repara
en
ENTRADAS RECIENTES
ese
factor.
Es
muy
comn
que
los
frameworks
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