dj-wasabi.telegraf

dj-wasabi.telegraf

Estado de construcción:

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. Si telegraf_agent_package_state está configurado como latest, 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 o zypper ("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. Cuando telegraf_agent_package_method está configurado como online o offline, 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 o online.
  • telegraf_agent_package_state: Si el paquete debe estar como present o latest. Cuando se establece en latest, 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: True
  • telegraf_agent_flush_interval: Intervalo de limpieza de datos predeterminado para todas las salidas. Predeterminado: 10
  • telegraf_agent_flush_jitter: Variar el intervalo de limpieza por una cantidad aleatoria. Predeterminado: 0
  • telegraf_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 para telegraf_agent_version. Se puede establecer en latest para obtener la etiqueta latest 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

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, como grok para un plugin logparser.
  • filter.config: La configuración extra para el filtro - en el ejemplo de filter.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

Acerca del proyecto

Installing and configuring Telegraf

Instalar
ansible-galaxy install dj-wasabi.telegraf
Licencia
mit
Descargas
787.8k
Propietario
DevOps Engineer, Technical reviewer Packt Pub / Manning / BPB Online / O'Reilly Media