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:
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.