¿Qué es Telegraf Gateway, Para qué sirve y cómo usarlo?
Casi siempre se da que los sistemas de monitoreo se encuentran en otras redes diferentes a los sistemas que debemos monitorear, en algunos casos, se da que esos servidores no tienen acceso a Internet o hacia otras redes, con lo cual, la solución para poder monitorear puede ser sacando esa data a través de un proxy o bien, usando a Telegraf como un proxy o mejor dicho, como un gateway.
¿Qué es Telegraf Gateway?
Telegraf Gateway es un rol que le podemos dar a una instancia de Telegraf para que él mismo escuche y tome peticiones y desde ahí las reenvíe a un InfluxDB.
¿Para qué sirve?
Veamos la arquitectura para entender un poco mejor para qué sirve poner una instancia de Telegraf como gateway:
Lo que básicamente vemos acá es que en vez de conectar todos los Telegaf que monitorean nuestros servidores hacia InfluxDB directamente, primero mandamos esa data a otro Telegraf, que hará de Gateway y desde ahí, enviar todos los datos a InfluxDB.
Este escenario es muy común en escenarios donde se pretende monitorear multiples servidores en multiples redes o que tienen requerimientos específicos como que no deben tener salida a Internet o hacia otras redes si no es a través de un proxy o en este caso un gateway especifico.
¿Cómo usarlo?
Bueno, para usarlo es bastante sencillo, Telegraf Gateway no es más que la misma instancia de Telegraf que ya probablemente conoces, pero con plugins específicos para darle este rol.
Así que vamos a ver como se ve un archivo de configuración para un Telegraf Gateway, vean que el plugin que vamos a usar es el influxdb_listener, que básicamente lo que hace es simular que es un InfluxDB y una vez que Telegraf este corriendo, comenzará a aceptar data de cada uno de los endopoints que estemos monitoreando.
Por supuesto, también necesitamos el plugin de salida, en este caso, va a apuntar y enviará cada 10 segundos, todos los datos que otros Telegraf le manden hacia InfluxDB.
[[inputs.influxdb_listener]]
service_address = ":8086"
read_timeout = "10s"
write_timeout = "10s"
max_body_size = "500MiB"
max_line_size = "64KiB"
database_tag = "telegraf"
[[outputs.influxdb_v2]]
## The URLs of the InfluxDB cluster nodes.
##
## Multiple URLs can be specified for a single cluster, only ONE of the
## urls will be written to each interval.
## urls exp: http://127.0.0.1:9999
urls = ["localhost:8086"]
## Token for authentication.
token = "$INFLUX_TOKEN"
## Organization is the name of the organization you wish to write to; must exist.
organization = "$INFLUX_ORG"
## Destination bucket to write into.
bucket = "telegraf"
Ahora bien, veamos como se ve la configuración de Telegraf que usamos para monitorear CPU de un servidor:
[agent]
interval = "10s"
round_interval = true
metric_batch_size = 1000
metric_buffer_limit = 10000
# collection_jitter = "3s"
flush_interval = "10s"
# flush_jitter = "5s"
# precision = ""
# debug = false
# quiet = false
# logfile = "/var/log/telegraf/telegraf.log"
# logfile_rotation_interval = "0d”
# logfile_rotation_max_size = "1MB”
# logfile_rotation_max_archives = 5
# hostname = ""
[[outputs.influxdb]]
urls = ["http://another-telegraf:8086"]
database_tag = "telegraf"
exclude_database_tag = true
[[inputs.cpu]]
percpu = true
totalcpu = true
collect_cpu_time = false
report_active = false
Acá 👆🏼, se puede ver qué tenemos el plugin de CPU y el de salida, que normalmente es hacia un InfluxDB, en este caso es hacia al Telegraf Gateway.
Una vez que ambas instancias este corriendo, veremos que el endpoint comienza a escribir hacia el gateway:
2021-03-29T14:04:49Z I! Starting Telegraf 1.18.0
2021-03-29T14:04:49Z I! Loaded inputs: cpu
2021-03-29T14:04:49Z I! Loaded aggregators:
2021-03-29T14:04:49Z I! Loaded processors:
2021-03-29T14:04:49Z I! Loaded outputs: influxdb
2021-03-29T14:04:49Z I! Tags enabled: host=my-server
2021-03-29T14:04:49Z I! [agent] Config: Interval:10s, Quiet:false, Hostname:"Ignacios-MacBook-Pro.local", Flush Interval:10s
2021-03-29T14:04:49Z D! [agent] Initializing plugins
2021-03-29T14:04:49Z D! [agent] Connecting outputs
2021-03-29T14:04:49Z D! [agent] Attempting connection to [outputs.influxdb]
2021-03-29T14:04:49Z D! [agent] Successfully connected to outputs.influxdb
2021-03-29T14:04:49Z D! [agent] Starting service inputs
2021-03-29T14:04:59Z D! [outputs.influxdb] Buffer fullness: 0 / 10000 metrics
2021-03-29T14:05:09Z D! [outputs.influxdb] Wrote batch of 9 metrics in 2.926167ms
2021-03-29T14:05:09Z D! [outputs.influxdb] Buffer fullness: 0 / 10000 metrics
Y él gateway a su vez manda hacia InfluxDB.
2021-03-29T14:03:01Z I! Starting Telegraf 1.18.0
2021-03-29T14:03:01Z I! Loaded inputs: influxdb_listener
2021-03-29T14:03:01Z I! Loaded aggregators:
2021-03-29T14:03:01Z I! Loaded processors:
2021-03-29T14:03:01Z I! Loaded outputs: influxdb_v2
2021-03-29T14:03:01Z I! Tags enabled: host=Ignacios-MacBook-Pro.local
2021-03-29T14:03:01Z I! [agent] Config: Interval:10s, Quiet:false, Hostname:"Ignacios-MacBook-Pro.local", Flush Interval:10s
2021-03-29T14:03:01Z D! [agent] Initializing plugins
2021-03-29T14:03:01Z W! [inputs.influxdb_listener] Use of deprecated configuration: 'max_line_size'; parser now handles lines of unlimited length and option is ignored
2021-03-29T14:03:01Z D! [agent] Connecting outputs
2021-03-29T14:03:01Z D! [agent] Attempting connection to [outputs.influxdb_v2]
2021-03-29T14:03:01Z D! [agent] Successfully connected to outputs.influxdb_v2
2021-03-29T14:03:01Z D! [agent] Starting service inputs
2021-03-29T14:03:01Z I! [inputs.influxdb_listener] Started HTTP listener service on :8086
2021-03-29T14:03:14Z D! [outputs.influxdb_v2] Wrote batch of 18 metrics in 2.273641s
2021-03-29T14:03:14Z D! [outputs.influxdb_v2] Buffer fullness: 9 / 10000 metrics
Para ir cerrando
Como pueden ver, es muy sencillo y este tipo de arquitecturas nos pueden ayudar a monitorear grande cantidad de servidores, pero también nos puede ayudar a tener un ambiente más seguro, ya que no necesitamos poner credenciales en cada Telegraf que va a monitorear cada uno de nuestros servidores, sino que lo hacemos solo en uno, en el gateway.
Contame, ¿lo has probado? ¿Funcionó? ¿Tienes alguna duda? no dudes en dejar un comentario aquí abajo.
Créditos imagen de portada: Saish Menon