dj-wasabi.telegraf
dj-wasabi.telegraf
- dj-wasabi.telegraf
Estado de construcción:
Este rol instalará y configurará Telegraf.
Telegraf es un agente escrito en Go para recolectar métricas del sistema en el que se ejecuta, o de otros servicios, y escribirlas en InfluxDB.
Los objetivos de diseño son tener una mínima huella de memoria con un sistema de módulos para que los desarrolladores de la comunidad puedan agregar fácilmente soporte para recolectar métricas de servicios bien conocidos (como Hadoop, Postgres o Redis) y APIs de terceros (como Mailchimp, AWS CloudWatch o Google Analytics).
(https://github.com/influxdb/telegraf)
Requisitos
Sistemas compatibles
Este rol es compatible con los siguientes sistemas:
- Red Hat
- Debian
- Ubuntu
- Contenedor Docker
- (Open)Suse
- Windows (Mejor esfuerzo)
- FreeBSD (Mejor esfuerzo)
- ArchLinux (solo modo "en línea")
Así que necesitarás uno de esos sistemas.. :-) Por favor, envía Pull Requests o sugerencias si deseas usar este rol en otros sistemas.
InfluxDB
Necesitarás una instancia de InfluxDB ejecutándose en algún lugar de tu red. O uno de los otros tipos de salida que se encuentran en https://github.com/influxdata/telegraf/#output-plugins
Docker
Docker necesita estar instalado en el host destino. Puedo recomendar estos roles para instalar Docker:
Esto solo es necesario cuando la configuración se requiere para un Telegraf dentro de un contenedor Docker (Cuando telegraf_agent_docker: True
).
Actualización
0.7.0
Hubo un problema:
Si configuro un telegraf_plugins_extra, ejecuto ansible, borro el plugin y ejecuto ansible de nuevo, el plugin permanece en la máquina.
Variables de rol
Variables específicas de Ansible
Especificando la versión a instalar:
telegraf_agent_version
: La versión de Telegraf a instalar. Sitelegraf_agent_package_state
está configurado comolatest
, entonces esta propiedad y valor se ignoran. Predeterminado:1.10.0
Cómo se debe instalar Telegraf
. Hay 4 métodos para instalar Telegraf
en el host destino:
- A través del gestor de paquetes, como
yum
,apt
ozypper
("repo"); - A través de una descarga del sitio
https://dl.influxdata.com/
("en línea"); - Ya proporcionado y disponible en el host destino, pero no aún instalado/configurado ("fuera de línea");
- Ya instalado en el host destino o hecho manualmente, pero no aún configurado ("manual");
Esto se puede configurar estableciendo telegraf_agent_package_method
en uno de los valores apropiados (repo
, online
, offline
o manual
).
Paquete Telegraf
Estas propiedades configuran cómo y qué paquete será instalado.
telegraf_agent_package
: El nombre del paquete de Telegraf a instalar. Cuandotelegraf_agent_package_method
está configurado comoonline
ooffline
, necesita tener la ruta completa del archivo. Ejemplo:telegraf_agent_package: /tmp/telegraf.rpm
. Predeterminado:telegraf_agent_package: telegraf
.telegraf_agent_package_method
: El método de instalación a usar. Puede elegir entre:repo
,offline
oonline
.telegraf_agent_package_state
: Si el paquete debe estar comopresent
olatest
. Cuando se establece enlatest
,telegraf_agent_version
será ignorado. Predeterminado:present
Configuración del proceso del agente Telegraf.
telegraf_agent_interval
: El intervalo configurado para enviar datos al servidor. Predeterminado:10
telegraf_agent_debug
: Ejecutar Telegraf en modo de depuración. Predeterminado:False
telegraf_agent_round_interval
: Redondea el intervalo de recolección al 'intervalo' Predeterminado: Truetelegraf_agent_flush_interval
: Intervalo de limpieza de datos predeterminado para todas las salidas. Predeterminado: 10telegraf_agent_flush_jitter
: Variar el intervalo de limpieza por una cantidad aleatoria. Predeterminado: 0telegraf_agent_aws_tags
: Configurar las etiquetas de AWS ec2 en la sección de etiquetas de Telegraf Predeterminado:False
telegraf_agent_aws_tags_prefix
: Definir un prefijo para las etiquetas de AWS ec2. Predeterminado:""
telegraf_agent_collection_jitter
: Variar la recolección por una cantidad aleatoria. Predeterminado: 0 (desde v0.13)telegraf_agent_metric_batch_size
: El tamaño del lote de métricas del agente. Predeterminado: 1000 (desde v0.13)telegraf_agent_metric_buffer_limit
: El límite del búfer de métricas del agente. Predeterminado: 10000 (desde v0.13)telegraf_agent_quiet
: Ejecutar Telegraf en modo silencioso (solo mensajes de error). Predeterminado:False
(desde v0.13)telegraf_agent_logfile
: El nombre del archivo de registro del agente. Predeterminado: '' (significa registrar en stdout) (desde v1.1)telegraf_agent_hostname
: El nombre de host del agente. Predeterminado:ansible_fqdn
telegraf_agent_omit_hostname
: No establecer la etiqueta "host" en el agente. Predeterminado:False
(desde v1.1)
Variables específicas de rol de Docker:
telegraf_agent_docker
: Instalar Telegraf como un contenedor docker. Predeterminado:False
telegraf_agent_docker_name
: Nombre del contenedor docker. Predeterminado:telegraf
telegraf_agent_docker_network_mode
: Modo de red del contenedor docker. Predeterminado:bridge
telegraf_agent_docker_restart_policy
: Política de reinicio del contenedor docker. Predeterminado:unless-stopped
telegraf_agent_docker_image_version
: La versión de la imagen de Docker de Telegraf que se utilizará. Predeterminado, el valor contiene el valor dado paratelegraf_agent_version
. Se puede establecer enlatest
para obtener la etiquetalatest
actual para la imagen de Docker proporcionada.telegraf_uid_docker
: Sobrescribir el id de usuario. Predeterminado:995
telegraf_gid_docker
: Sobrescribir el id de grupo. Predeterminado:998
Referencia completa de configuración del agente: https://github.com/influxdata/telegraf/blob/master/docs/CONFIGURATION.md#agent-configuration.
Información adicional
ansible_fqdn problemático para obtener el nombre de host
Información adicional sobre: ansible_fqdn problemático para obtener el nombre de host #105
Describir el error
En algunos nodos, estoy obteniendo nombres de host extraños, principalmente localhost.localdomain. Esos nodos muestran una configuración adecuada en hostnamectl. He visto que estás usando 'ansible_fqdn' como predeterminado.
Parece que ansible_fqdn y ansible_hostname pueden dar resultados diferentes, y a veces incluso resultados muy extraños, ya que a veces hacen llamadas DNS (que no están bajo mi control en esos casos) para inferir esos nombres.
Propuesta de solución
En mi playbook, he añadido este parámetro:
telegraf_agent_hostname: "{{ ansible_nodename }}"
Configurando etiquetas
Puedes establecer etiquetas para el host que ejecuta telegraf:
telegraf_global_tags:
- tag_name: some_name
tag_value: some_value
Especificando una salida. El predeterminado se establece en localhost, deberás especificar el servidor influxdb correcto:
telegraf_agent_output:
- type: influxdb
config:
- urls = ["http://localhost:8086"]
- database = "telegraf"
tagpass:
- cpu = ["cpu0"]
La configuración se imprimirá línea por línea en la configuración, por lo que también puedes usar:
config:
- # Imprimir una línea de documentación
y se imprimirá en el archivo de configuración.
Especificaciones de Docker
Imagen de Docker
Se utiliza la imagen oficial de Influxdata Telegraf. telegraf_agent_version
se traducirá a la etiqueta de la imagen.
Montajes de Docker
Por favor ten en cuenta que el contenedor Docker monta tu sistema entero (solo lectura) para monitorear el host de Docker Engine desde dentro del contenedor. Para ser precisos:
- /etc/telegraf:/etc/telegraf:ro
- /:/hostfs:ro
- /etc:/hostfs/etc:ro
- /proc:/hostfs/proc:ro
- /sys:/hostfs/sys:ro
- /var/run:/var/run:ro
Más información: https://github.com/influxdata/telegraf/blob/master/docs/FAQ.md.
Ejemplo de configuración de Docker
telegraf_agent_docker: True
# Forzar modo de red del host, para que se puedan recopilar métricas de tráfico del host de Docker Engine.
telegraf_agent_docker_network_mode: host
# Forzar una etiqueta de imagen específica.
telegraf_agent_version: 1.10.0-alpine
telegraf_plugins_default:
- plugin: cpu
config:
- percpu = true
- plugin: disk
tagpass:
- fstype = [ "ext4", "xfs" ]
tagdrop:
- path = [ "/etc", "/etc/telegraf", "/etc/hostname", "/etc/hosts", "/etc/resolv.conf" ]
- plugin: io
- plugin: mem
- plugin: system
- plugin: swap
- plugin: netstat
- plugin: processes
- plugin: docker
config:
- endpoint = "unix:///var/run/docker.sock"
- timeout = "5s"
Variables específicas de Windows
NOTA
Soporte para Windows es un esfuerzo conjunto (no tengo la posibilidad de probar/verificar cambios en la gran cantidad de instancias de Windows disponibles). Las PR específicas para Windows serán casi inmediatamente fusionadas, a menos que alguien pueda proporcionar un mecanismo de prueba de Windows a través de Travis u otro servicio para Pull Requests.
telegraf_win_install_dir
: El directorio donde se instalará Telegraf.telegraf_win_logfile
: La ubicación del archivo de registro de Telegraf.telegraf_win_include
: El directorio que contendrá toda la configuración de plugins.
Variables específicas de openSUSE
telegraf_zypper_baseurl
: La URL al repositorio de openSUSE que alberga Telegraf (por ejemplo, para openSUSE Leap: "http://download.opensuse.org/repositories/devel:/languages:/go/openSUSE_Leap_{{ ansible_distribution_version }}/"). Si esto no se especifica, se usará un repositorio predeterminado.
Variables específicas de MacOS
NOTA
El soporte para MacOS es, al igual que el soporte para Windows, un esfuerzo conjunto y no está oficialmente soportado.
telegraf_mac_user
: Telegraf se ejecutará como este usuario (necesario ya que ejecutar cosas como otros usuarios usando brew es problemático).
Información adicional
Hay dos propiedades que son similares, pero se usan de manera diferente. Son:
telegraf_plugins_default
telegraf_plugins_extra
telegraf_plugins_default
Con la propiedad telegraf_plugins_default
se establece para usar el conjunto predeterminado de plugins de Telegraf. Puedes reemplazarlo con más plugins, que deberían estar habilitados por defecto.
telegraf_plugins_default:
- plugin: cpu
config:
- percpu = true
- plugin: disk
- plugin: io
- plugin: mem
- plugin: system
- plugin: swap
- plugin: netstat
Cada agente de telegraf tiene estos como una configuración predeterminada.
telegraf_plugins_extra
El segundo parámetro telegraf_plugins_extra
se puede usar para agregar plugins específicos a los objetivos del servidor. Es un hash en lugar de una lista, para que puedas combinar valores de múltiples archivos de variables. A continuación se muestra un ejemplo de cómo usar este parámetro para servidores de bases de datos MySQL:
cat group_vars/mysql_database
telegraf_plugins_extra:
mysql:
config:
- servers = ["root:{{ mysql_root_password }}@tcp(localhost:3306)/"]
Hay una opción para eliminar archivos de plugins extra en /etc/telegraf/telegraf.d si no fueron generados por este playbook con la variable telegraf_plugins_extra_exclusive
.
Opciones del plugin Telegraf:
tags
: Un par clave/valor de etiquetas que se aplican a las mediciones de un input específico. Pueden usarse en cualquier etapa para mejor filtrado, por ejemplo en las salidas.tagpass
: (agregado en Telegraf 0.1.5) nombres de etiquetas y matrices de cadenas que se utilizan para filtrar métricas por el plugin actual. Cada cadena en la matriz se prueba como una coincidencia exacta con el nombre de la etiqueta, y si coincide, la métrica se emite.tagdrop
: (agregado en Telegraf 0.1.5) Lo inverso de tagpass. Si una etiqueta coincide, la métrica no se emite. Esto se prueba en las métricas que han pasado la prueba de tagpass.interval
: Qué tan a menudo recoger esta métrica. Los plugins normales usan un solo intervalo global, pero si un plugin particular debe ejecutarse menos o más a menudo, puedes configurarlo aquí.filter.name
: Como cuando hay un filtro extra que necesita ser configurado, comogrok
para un pluginlogparser
.filter.config
: La configuración extra para el filtro - en el ejemplo defilter.name
-grok
. (Ver ejemplo a continuación)sub_inputs
: Si el input requiere otros sub-inputs, puedes agregarlos aquí (ver ejemplo a continuación).
Un ejemplo podría verse así:
telegraf_plugins_default:
- plugin: disk
interval: 12
tags:
- diskmetrics = "true"
tagpass:
- fstype = [ "ext4", "xfs" ]
- path = [ "/opt", "/home" ]
Si deseas definir procesadores, simplemente puedes usar la variable telegraf_processors
.
Un ejemplo podría verse así:
telegraf_processors:
- processor: rename
- processor: rename.replace
config:
- tag = "level"
- dest = "LogLevel"
Cuando quieras hacer uso del filtro grok
para el analizador de logs:
telegraf_plugins_extra:
logparser:
plugin: logparser
config:
- files = ["/var/log/messages"]
- from_beginning = false
filter:
name: grok
config:
- patterns = ["invoked oom-killer"]
Cuando quieras incluir sub-inputs con su propia configuración:
sqs:
plugin: cloudwatch
config:
- region = "eu-west-1"
- access_key = "foo"
- secret_key = "bar"
- period = "1m"
- delay = "2m"
- interval = "1m"
- namespace = "AWS/SQS"
- statistic_include = ["average"]
sub_inputs:
metrics:
- names = [
"ApproximateAgeOfOldestMessage",
"ApproximateNumberOfMessagesVisible",
]
metrics.dimensions:
- name = "QueueName"
- value = "*"
Dependencias
No hay dependencias
Ejemplo de Playbook
- hosts: servers
roles:
- { role: dj-wasabi.telegraf }
Molecule
Este rol está configurado para ser probado con Molecule. Puedes encontrar más información sobre Molecule en esta página: https://werner-dijkerman.nl/2016/07/10/testing-ansible-roles-with-molecule-testinfra-and-docker/
Licencia
BSD
Información del autor
Por favor, házmelo saber si tienes problemas. ¡Las Pull Requests también son aceptadas! :-)
correo: ikben [ en ] werner-dijkerman . nl
ansible-galaxy install dj-wasabi.telegraf