Aloha a tod@s, en este post voy a explicar como graficar las métricas tanto de hosts, como de contenedores de docker de una forma muy sencilla con las herramientas que están ahora de moda. En este caso va a ser un stack de TIG (Telegraf, InfluxDB, Grafana). Telegraf e InfluxDB son de influxdata, empresa que se dedica a la analítica de datos. Telegraf sería el agente que recoge los datos y se los manda a influxDB, una base de datos orientada a time series escrita en Go muy potente y escalable a la hora de realizar estas operaciones. Por último, entraría en el juego Grafana que es la herramienta para graficar por excelencia de estos tiempos. Muy fácil de configurar y que soporta varios data sources.
Para los que sepan un poco de estas cosas, se preguntarán porque no utilizar prometheus que es la otra herramienta que está pegando fuerte. Prometheus a diferencia de influxDB hace pull de los datos, por lo que si se está detrás de un Firewall, hay que abrir puertos por cada cliente y es mas engorroso. Por eso optamos por esta otra solución.
Despliegue
Montaremos todo el stack sobre docker y lo desplegaremos con docker-compose (as always). Y como proxy web utilizaremos traefik.
vim docker-compose.yml
version: '3.5' services: influxdb: image: influxdb environment: - INFLUXDB_DB=telegraf - INFLUXDB_USER=telegraf - INFLUXDB_USER_PASSWORD=TelegrafPassword volumes: - influxdb:/var/lib/influxdb ports: - "8086:8086" networks: - backend labels: - "traefik.enable=false" - "container_group=TIG" telegraf: image: telegraf volumes: - $PWD/conf/telegraf.conf:/etc/telegraf/telegraf.conf:ro links: - influxdb networks: - backend labels: - "traefik.enable=false" - "container_group=TIG" grafana: image: grafana/grafana environment: - GF_SERVER_ROOT_URL=https://grafana.example.com - GF_SECURITY_ADMIN_PASSWORD=GrafanaPassword - 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=example.com volumes: - grafana:/var/lib/grafana networks: - traefik - backend ports: - 3000:3000 labels: - "traefik.backend=tick" - "traefik.frontend.rule=Host:grafana.example.com" - "traefik.docker.network=traefik" - "traefik.port=3000" - "container_group=TIG" networks: backend: traefik: external: name: traefik volumes: grafana: influxdb:
Configurar Telegraf
Ahora hay que crear la conf te telegraf. Para esto, crear una carpeta que se llama conf
mkdir conf
Y crear un fichero que sea telegraf.conf. En el caso de que se quiera utilizar la conf por defecto, se puede generar con el siguiente comando. Pero aquí la vamos a personalizar.
Opcional:
run --rm telegraf telegraf config > ./conf/telegraf.conf
vim conf/telegraf.conf
Y añadir la configuración
############################################################################### # 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]]
Una vez configurado telegraf, solo queda levantar el stack. Para ello:
docker-compose up -d
Configurar Grafana
Con esto, ya estará todo levantado y funcionando. El siguiente paso es acceder a grafana y añadirle InfluxDB como data source. Para eso:
https://grafana.example.com
Ahora queda configurar el data source. Para ello, hay que ir a: Configuration –> data sources y add data source
Y con esto ya podrá realizar las consultas contra InfluxDB.
Dashboards
Para terminar y dejar todo ya perfecto, hay que añadir los dashboards. Esto se puede hacer manualmente creando uno y añadiendo uno a uno los gráficos y estadísticas que queramos, o se puede importar uno desde la web de grafana. Vamos a utilizar el segundo método ya que es mucho mas rápido. Para ello, hay que ir a Create –> Import y pegar el numero de dashboard que queramos. Para la los hosts utilizaremos: 1443 y para docker utilizaremos: 1150
Y automáticamente detectará el dashboard. Seleccionar el data source e importar
Y ya se podrá ver ya el dashboard con las métricas recolectadas.
Y con esto ya estaría. En el caso de que se quiera desplegar telegraf en hosts que no estén en el mismo stack, hay que desplegar solo el contenedor de telegraf y cambiar en la conf la dirección de InfluxDB.
2 comments