Search code examples
kubernetes-helmmodbustelegrafhelm3

Error on Telegraf Helm Chart update: Error parsing data


Im trying to deploy telegraf helm chart on kubernetes.

helm upgrade --install telegraf-instance -f values.yaml influxdata/telegraf

When I add modbus input plugin with holding_register i get error

[telegraf] Error running agent: Error loading config file /etc/telegraf/telegraf.conf: Error parsing data: line 49: key `name’ is in conflict with line 2fd

my values.yaml like below

## Default values.yaml for Telegraf
## This is a YAML-formatted file.
## ref: https://hub.docker.com/r/library/telegraf/tags/

replicaCount: 1

image:
  repo: "telegraf"
  tag: "1.21.4"
  pullPolicy: IfNotPresent

podAnnotations: {}

podLabels: {}

imagePullSecrets: []

args: []

env:
  - name: HOSTNAME
    value: "telegraf-polling-service"

resources: {}

nodeSelector: {}

affinity: {}

tolerations: []

service:
  enabled: true
  type: ClusterIP
  annotations: {}

rbac:
  create: true
  clusterWide: false
  rules: []

serviceAccount:
  create: false
  name:
  annotations: {}

config:
  agent:
    interval: 60s
    round_interval: true
    metric_batch_size: 1000000
    metric_buffer_limit: 100000000
    collection_jitter: 0s
    flush_interval: 60s
    flush_jitter: 0s
    precision: ''
    hostname: '9825128'
    omit_hostname: false
  processors:
    - enum:
        mapping:
          field: "status"
          dest: "status_code"
          value_mappings:
            healthy: 1
            problem: 2
            critical: 3
  inputs:
    - modbus:
        name: "PS MAIN ENGINE"
        controller: 'tcp://192.168.0.101:502'
        slave_id: 1
        holding_registers: 
          - name: "Coolant Level"
            byte_order: CDAB
            data_type: FLOAT32
            scale: 0.001
            address: [51410, 51411]
    - modbus:
        name: "SB MAIN ENGINE"
        controller: 'tcp://192.168.0.102:502'
        slave_id: 1
        holding_registers: 
          - name: "Coolant Level"
            byte_order: CDAB
            data_type: FLOAT32
            scale: 0.001
            address: [51410, 51411]
  outputs:
    - influxdb_v2:
        token: token
        organization: organisation
        bucket: bucket
        urls:
          - "url"

metrics:
  health:
    enabled: true
    service_address: "http://:8888"
    threshold: 5000.0
  internal:
    enabled: true
    collect_memstats: false

pdb:
  create: true
  minAvailable: 1

Solution

  • Problem resolved by doing the following steps

    • deleted config section of my values.yaml
    • added my telegraf.conf to /additional_config path
    • added configmap to kubernetes with the following command
      kubectl create configmap external-config --from-file=/additional_config
    
    • added the following command to values.yaml
        volumes:
          - name: my-config
            configMap:
              name: external-config
        volumeMounts:
          - name: my-config
            mountPath: /additional_config
        args:
          - "--config=/etc/telegraf/telegraf.conf"
          - "--config-directory=/additional_config"