Monitorización de docker con Grafana

En este post explicaré la instalación y configuración de un stack TIG (Telegraf, InfluxDB, Grafana) para la monitorización de los host de docker, como de sus contenedores. 

Aquí tenéis el esquema:

Resultado de imagen de grafana influxdb

Primero, creamos la ruta, de no existir, /Aplicaciones/docker/tic/

mkdir /Aplicaciones/docker/tic

Ejecutamos el siguiente comando, para crear y desplegar el contenedor de influxdb:

docker run -d --name influxdb -e INFLUXDB_DB=telegraf \
-e INFLUXDB_USER=telegraf -e INFLUXDB_USER_PASSWORD=TelegrafPassword \
-e INFLUXDB_ADMIN_ENABLED=true -v influxdb:/var/lib/influxdb \
-p 8083:8083 -p 8086:8086 --restart=always influxdb

Ejecutamos el siguiente comando, para crear y desplegar el contenedor de grafana:

docker run -d --name grafana \
-e GF_SERVER_ROOT_URL=http://url_del_servidor:3000 \
-e GF_SECURITY_ADMIN_PASSWORD=g_8)j*4Cv5cdwZ] \
-e GF_INSTALL_PLUGINS=grafana-clock-panel,grafana-simple-json-datasource,grafana-worldmap-panel,raintank-worldping-app,jdbranham-diagram-panel,natel-influx-admin-panel \
-e INFLUXDB_ADMIN_ENABLED=true \
-e GF_USERS_ALLOW_SIGN_UP=false \
-e GF_SECURITY_DISABLE_GRAVATAR=true \
-e GF_SERVER_DOMAIN=nuestro_dominio \
-v grafana:/var/lib/grafana \
-p 3000:3000 \
--restart=always \
grafana/grafana

Accedemos a grafana, con la url Http://ip_del_servidor:3000

El usuario es admin y la contraseña g_8)j*4Cv5cdwZ] (Se la hemos indicado en el comando de docker)

Pulsamos en Add data source

Pulsamos en InfluxDB

En url, introducimos la ip del servidor y el puerto 8086. En Access, seleccionamos Browser:

En InfluxDB Details, introducimos, en Database, telegraf. User, telegraf y Password TelegrafPassword

Pulsamos en Save & Test

Si la BDD está funcionando correctamente y tiene conectividad, nos indicará lo siguiente:

Pulsamos en Dashboards -> Manage -> Import

En Grafana.com Dashboard, introducimos 1443 y pulsamos load

Dejamos los datos, tal como se muestra en la captura de pantalla y pulsamos import

Ya tenemos el dashboard mostrando datos

Repetimos los pasos, para tener el Dashboard de métricas de docker

Pulsamos en Dashboards -> Manage -> Import

En Grafana.com Dashboard, introducimos 1150 y pulsamos load

Dejamos los datos, tal como se muestra en la captura de pantalla y pulsamos import

Ya veremos el Dashboard de los contenedores, mostrando los datos de telegraf

Ahora, en cada servidor de docker, usaremos un contenedor telegraf, para mandar las estadísticas de Grafana.

Creamos la ruta /Aplicaciones/telegraf, para dejar el fichero de configuración:

mkdir -p /Aplicaciones/telegraf/;cat << EOF > /Aplicaciones/telegraf/Dockerfile_telegraf

FROM telegraf

LABEL maintaner="Sergio Perez "

LABEL description="Imagen de telegraf, para métricas docker"

LABEL org.label-schema.build-date="20190123"

ADD telegraf.conf /etc/telegraf/

EOF

Creamos el fichero de configuración de telegraf:

cat << EOF > /Aplicaciones/telegraf/telegraf.conf

###############################################################################

# CONFIGURATION #

###############################################################################
[global_tags]

[agent]

interval = "10s"

round_interval = true

metric_batch_size = 1000

metric_buffer_limit = 10000

collection_jitter = "0s"

flush_interval = "10s"

flush_jitter = "0s"

debug = false

quiet = false

hostname = "" # opcional

omit_hostname = false

###############################################################################

# OUTPUT PLUGINS #

###############################################################################

[[outputs.influxdb]]

urls = ["http://ip_servidor_telegraf:8086"]

database = "telegraf"

retention_policy = ""

write_consistency = "any"

timeout = "5s"

username = "telegraf"

password = "TelegrafPassword"

###############################################################################

# INPUT PLUGINS #

###############################################################################

# CPU

######

[[inputs.cpu]]

percpu = false

totalcpu = true

fielddrop = ["time_*"]

# DISK

#######

[[inputs.disk]]

ignore_fs = ["tmpfs", "devtmpfs", "none"]

[[inputs.diskio]]

# Kernel

########

[[inputs.kernel]]

# Memory

#########

[[inputs.mem]]

# NET

######
[[inputs.net]]

interfaces = ["eth0"]

# Netstat

#########
[[inputs.netstat]]

# Processes

############

[[inputs.processes]]

# System

#########

[[inputs.system]]

# Read metrics about docker containers

[[inputs.docker]]

## Docker Endpoint

## To use TCP, set endpoint = "tcp://[ip]:[port]"

## To use environment variables (ie, docker-machine), set endpoint = "ENV"

endpoint = "unix:///var/run/docker.sock"

## Set to true to collect Swarm metrics(desired_replicas, running_replicas)

gather_services = false

## Only collect metrics for these containers, collect all if empty

container_names = []

## Containers to include and exclude. Globs accepted.

## Note that an empty array for both will include all containers

container_name_include = []

container_name_exclude = []

## Container states to include and exclude. Globs accepted.

## When empty only containers in the "running" state will be captured.

# container_state_include = []

# container_state_exclude = []

## Timeout for docker list, info, and stats commands

timeout = "5s"

## Whether to report for each container per-device blkio (8:0, 8:1...) and

## network (eth0, eth1, ...) stats or not

perdevice = true

## Whether to report for each container total blkio and network stats or not

total = false

## Which environment variables should we use as a tag

##tag_env = ["JAVA_HOME", "HEAP_SIZE"]

## docker labels to include and exclude as tags. Globs accepted.

## Note that an empty array for both will include all labels as tags

docker_label_include = []

docker_label_exclude = []

EOF

Para qué en grafana, aparezca el nombre del servidor y no el nombre autogenerado por docker, editamos el fichero /Aplicaciones/telegraf/telegraf.conf y cambios la línea:

hostname = «» # opcional por hostname = «NombreServidor» # opcional

Creamos la imagen, con el siguiente comando:

docker build -t telegraf -f /Aplicaciones/telegraf/Dockerfile_telegraf /Aplicaciones/telegraf/.

Creamos y ejecutamos el contenedor, con el comando:

docker run -d --name telegraf \

-v /var/run/docker.sock:/var/run/docker.sock \

--restart=always telegraf:latest

Dentro de grafana, con en el DashBoard Métricas Host’s Docker, veremos las métricas de los contenedores:

Sólo tendremos que desplegar el contenedor de telegraf, en cada servidor de docker, para tener las estadísticas tanto del servidor, como de los contenedores. 

http://pbs.twimg.com/media/DXxZPHrWkAA8NyC.jpg

Dejar una contestacion

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.