Docker: TIG Telegraf+InfluxDB+Grafana
2020-02-13
Índice
En un anterior articulo expliquó la forma de instalar TIG (Telegraf+ InfluxDB+Grafana), puedes ir creando los contenedores de forma individual pero esta vez vamos a crear un stack sobre Docker y lo desplegaremos con docker-compose.
Preparativos
Docker
Debes de tener instalado docker en tu sistema, si aun no lo has hecho, abre una terminal y escribe el siguiente codigo
sudo apt-get update
sudo curl -sSL https://get.docker.com | sh
Para evitar errores de permisos, añade tu usuario al grupo docker
usermod -aG docker <your_user>
Docker-compose
Instala pip
sudo apt install python3-pip
Instala docker-compose
sudo pip3 install docker-compose
Y para comprobar que todo ha ido bien, ejecutamos
docker-compose --version
Despliegue
Creamos el fichero docker-compose.yml
y pegamos el siguiente código
version: '3.5'
services:
influxdb:
image: influxdb
environment:
- INFLUXDB_DB=telegraf
- INFLUXDB_USER=telegraf
- INFLUXDB_USER_PASSWORD=xxxxxxx
volumes:
- influxdb:$PWD/var/lib/influxdb
ports:
- "8086:8086"
networks:
- backend
labels:
- "container_group=TIG"
telegraf:
image: telegraf
volumes:
- $PWD/conf/telegraf.conf:/etc/telegraf/telegraf.conf:ro
links:
- influxdb
networks:
- backend
labels:
- "container_group=TIG"
grafana:
image: grafana/grafana
environment:
- GF_SERVER_ROOT_URL=http://192.168.2.3
- GF_SECURITY_ADMIN_PASSWORD=xxxxxxxx
- GF_INSTALL_PLUGINS=grafana-clock-panel,grafana-simple-json-datasource,grafana-worldmap-panel,raintank-worldping-app,jdbranham-diagram-panel
- GF_USERS_ALLOW_SIGN_UP=false
- GF_SECURITY_DISABLE_GRAVATAR=true
- GF_SERVER_DOMAIN=ejemplo.com
volumes:
- grafana:$PWD/var/lib/grafana
networks:
- backend
ports:
- 3000:3000
labels:
- "container_group=TIG"
networks:
backend:
volumes:
grafana:
influxdb:
Pon los valores que se correspondan con tu configuración como el nombre de la base de datos, contraseñas, etc.
Configurar Telegraf
Si queremos personalizar el agente Telegraf podemos entrar en la shell del contenedor y editar el fichero de configuración /etc/teleggraf/telegraf.conf
O bien podemos crear un fichero de configuración y presentarlo como un volumen, para ello en el fichero docker-compose.yml
escribimos:
volumes:
- $PWD/conf/telegraf.conf:/etc/telegraf/telegraf.conf:ro
Y creamos una carpeta llamada conf
y dentro creamos el fichero telegraf.con
con el siguiente contenido:
###############################################################################
# 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://influxdb: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]]
Desplegando
Una vez configurado el agente de Telegraf, solo queda levantar el stack.
docker-compose up -d
Con esto ya hemos terminado, si utilizas portainer puedes ver el stack desplegado
Tambión vemos los contenedores que hemos creado y como forman parte de la misma red
Referencia
Espero que te haya gustado, pasa un buen día… 🐧