Endline in json serializer

When using data_format=‘json’ in output.file plugin I see empty lines between each metric,
data_format=‘influx’ doesn’t generate those empty lines what seems to be inconsistent.

I thought about posting issue on github but first wanted to ask about purpose of this endline.

related code:
json.go line 30:
serialized = append(serialized, ‘\n’)

The newline is for framing the JSON documents so you can parse them one at a time, there are some subtle issues with this but in general it works:

{"fields":{"usage_guest":0,"usage_guest_nice":0,"usage_idle":74.75000000000023,"usage_iowait":0,"usage_irq":0,"usage_nice":0,"usage_softirq":1.1249999999999982,"usage_steal":0,"usage_system":24.0000000000002,"usage_user":0.12499999999997513},"name":"cpu","tags":{"cpu":"cpu-total"},"timestamp":1523382234}
{"fields":{"usage_guest":0,"usage_guest_nice":0,"usage_idle":74.718397997495,"usage_iowait":0,"usage_irq":0,"usage_nice":0,"usage_softirq":0.8760951188986009,"usage_steal":0,"usage_system":24.280350438046813,"usage_user":0.12515644555696204},"name":"cpu","tags":{"cpu":"cpu-total"},"timestamp":1523382236}
{"fields":{"usage_guest":0,"usage_guest_nice":0,"usage_idle":74.53183520599293,"usage_iowait":0,"usage_irq":0,"usage_nice":0,"usage_softirq":0.9987515605492931,"usage_steal":0,"usage_system":24.21972534332085,"usage_user":0.2496878901373233},"name":"cpu","tags":{"cpu":"cpu-total"},"timestamp":1523382238}

If you are seeing more than one newline so there is a blank line, then that would be a bug, however I’m not seeing this.

Sorry for misleading info. This endline is not an issue in file output but in kafka output:

Data in file output:

{"fields":{"time_active":320.130000000001,"time_guest":0,"time_guest_nice":0,"time_idle":30990.75,"time_iowait":15.23,"time_irq":0,"time_nice":0,"time_softirq":6.54,"time_steal":0,"time_system":156.78,"time_user":141.58},"name":"cpu","tags":{"cpu":"cpu0","host":"osboxes"},"timestamp":1523395650}
{"fields":{"usage_active":2.335025380706573,"usage_guest":0,"usage_guest_nice":0,"usage_idle":97.66497461929343,"usage_iowait":0,"usage_irq":0,"usage_nice":0,"usage_softirq":0,"usage_steal":0,"usage_system":1.1167512690358365,"usage_user":1.218274111675353},"name":"cpu","tags":{"cpu":"cpu0","host":"osboxes"},"timestamp":1523395650}
{"fields":{"time_active":401.0099999999984,"time_guest":0,"time_guest_nice":0,"time_idle":30513.38,"time_iowait":12.33,"time_irq":0,"time_nice":0,"time_softirq":8.41,"time_steal":0,"time_system":218.14,"time_user":162.13},"name":"cpu","tags":{"cpu":"cpu1","host":"osboxes"},"timestamp":1523395650}
{"fields":{"usage_active":2.192066805835998,"usage_guest":0,"usage_guest_nice":0,"usage_idle":97.80793319416401,"usage_iowait":0,"usage_irq":0,"usage_nice":0,"usage_softirq":0,"usage_steal":0,"usage_system":1.6701461377867164,"usage_user":0.5219206680581819},"name":"cpu","tags":{"cpu":"cpu1","host":"osboxes"},"timestamp":1523395650}
{"fields":{"time_active":292.1399999999994,"time_guest":0,"time_guest_nice":0,"time_idle":31019.22,"time_iowait":12.15,"time_irq":0,"time_nice":0,"time_softirq":3.64,"time_steal":0,"time_system":146.5,"time_user":129.85},"name":"cpu","tags":{"cpu":"cpu2","host":"osboxes"},"timestamp":1523395650}
{"fields":{"usage_active":1.515151515129801,"usage_guest":0,"usage_guest_nice":0,"usage_idle":98.4848484848702,"usage_iowait":0.10101010101012113,"usage_irq":0,"usage_nice":0,"usage_softirq":0,"usage_steal":0,"usage_system":0.909090909091144,"usage_user":0.5050505050504441},"name":"cpu","tags":{"cpu":"cpu2","host":"osboxes"},"timestamp":1523395650}
{"fields":{"time_active":319.4900000000016,"time_guest":0,"time_guest_nice":0,"time_idle":31020.96,"time_iowait":12.69,"time_irq":0,"time_nice":0,"time_softirq":3.03,"time_steal":0,"time_system":176.68,"time_user":127.09},"name":"cpu","tags":{"cpu":"cpu3","host":"osboxes"},"timestamp":1523395650}
{"fields":{"usage_active":3.048780487833283,"usage_guest":0,"usage_guest_nice":0,"usage_idle":96.95121951216672,"usage_iowait":0,"usage_irq":0,"usage_nice":0,"usage_softirq":0,"usage_steal":0,"usage_system":2.235772357722706,"usage_user":0.8130081300809708},"name":"cpu","tags":{"cpu":"cpu3","host":"osboxes"},"timestamp":1523395650}
{"fields":{"time_active":1332.8300000000017,"time_guest":0,"time_guest_nice":0,"time_idle":123544.32,"time_iowait":52.41,"time_irq":0,"time_nice":0.01,"time_softirq":21.64,"time_steal":0,"time_system":698.11,"time_user":560.66},"name":"cpu","tags":{"cpu":"cpu-total","host":"osboxes"},"timestamp":1523395650}
{"fields":{"usage_active":2.2715671260828127,"usage_guest":0,"usage_guest_nice":0,"usage_idle":97.72843287391719,"usage_iowait":0.025523226135773555,"usage_irq":0,"usage_nice":0,"usage_softirq":0,"usage_steal":0,"usage_system":1.4803471158752652,"usage_user":0.7656967840732429},"name":"cpu","tags":{"cpu":"cpu-total","host":"osboxes"},"timestamp":1523395650}

Data on kafka:

{"fields":{"time_active":320.130000000001,"time_guest":0,"time_guest_nice":0,"time_idle":30990.75,"time_iowait":15.23,"time_irq":0,"time_nice":0,"time_softirq":6.54,"time_steal":0,"time_system":156.78,"time_user":141.58},"name":"cpu","tags":{"cpu":"cpu0","host":"osboxes"},"timestamp":1523395650}

{"fields":{"usage_active":2.335025380706573,"usage_guest":0,"usage_guest_nice":0,"usage_idle":97.66497461929343,"usage_iowait":0,"usage_irq":0,"usage_nice":0,"usage_softirq":0,"usage_steal":0,"usage_system":1.1167512690358365,"usage_user":1.218274111675353},"name":"cpu","tags":{"cpu":"cpu0","host":"osboxes"},"timestamp":1523395650}

{"fields":{"time_active":401.0099999999984,"time_guest":0,"time_guest_nice":0,"time_idle":30513.38,"time_iowait":12.33,"time_irq":0,"time_nice":0,"time_softirq":8.41,"time_steal":0,"time_system":218.14,"time_user":162.13},"name":"cpu","tags":{"cpu":"cpu1","host":"osboxes"},"timestamp":1523395650}

{"fields":{"usage_active":2.192066805835998,"usage_guest":0,"usage_guest_nice":0,"usage_idle":97.80793319416401,"usage_iowait":0,"usage_irq":0,"usage_nice":0,"usage_softirq":0,"usage_steal":0,"usage_system":1.6701461377867164,"usage_user":0.5219206680581819},"name":"cpu","tags":{"cpu":"cpu1","host":"osboxes"},"timestamp":1523395650}

{"fields":{"time_active":292.1399999999994,"time_guest":0,"time_guest_nice":0,"time_idle":31019.22,"time_iowait":12.15,"time_irq":0,"time_nice":0,"time_softirq":3.64,"time_steal":0,"time_system":146.5,"time_user":129.85},"name":"cpu","tags":{"cpu":"cpu2","host":"osboxes"},"timestamp":1523395650}

{"fields":{"usage_active":1.515151515129801,"usage_guest":0,"usage_guest_nice":0,"usage_idle":98.4848484848702,"usage_iowait":0.10101010101012113,"usage_irq":0,"usage_nice":0,"usage_softirq":0,"usage_steal":0,"usage_system":0.909090909091144,"usage_user":0.5050505050504441},"name":"cpu","tags":{"cpu":"cpu2","host":"osboxes"},"timestamp":1523395650}

{"fields":{"time_active":319.4900000000016,"time_guest":0,"time_guest_nice":0,"time_idle":31020.96,"time_iowait":12.69,"time_irq":0,"time_nice":0,"time_softirq":3.03,"time_steal":0,"time_system":176.68,"time_user":127.09},"name":"cpu","tags":{"cpu":"cpu3","host":"osboxes"},"timestamp":1523395650}

{"fields":{"usage_active":3.048780487833283,"usage_guest":0,"usage_guest_nice":0,"usage_idle":96.95121951216672,"usage_iowait":0,"usage_irq":0,"usage_nice":0,"usage_softirq":0,"usage_steal":0,"usage_system":2.235772357722706,"usage_user":0.8130081300809708},"name":"cpu","tags":{"cpu":"cpu3","host":"osboxes"},"timestamp":1523395650}

{"fields":{"time_active":1332.8300000000017,"time_guest":0,"time_guest_nice":0,"time_idle":123544.32,"time_iowait":52.41,"time_irq":0,"time_nice":0.01,"time_softirq":21.64,"time_steal":0,"time_system":698.11,"time_user":560.66},"name":"cpu","tags":{"cpu":"cpu-total","host":"osboxes"},"timestamp":1523395650}

{"fields":{"usage_active":2.2715671260828127,"usage_guest":0,"usage_guest_nice":0,"usage_idle":97.72843287391719,"usage_iowait":0.025523226135773555,"usage_irq":0,"usage_nice":0,"usage_softirq":0,"usage_steal":0,"usage_system":1.4803471158752652,"usage_user":0.7656967840732429},"name":"cpu","tags":{"cpu":"cpu-total","host":"osboxes"},"timestamp":1523395650}

I have fixed it on my own (ugly way):

 245 func (k *Kafka) Write(metrics []telegraf.Metric) error {                                                                                                                                                        
 246     if len(metrics) == 0 {                                                                                                                                                                                      
 247         return nil                                                                                                                                                                                              
 248     }                                                                                                                                                                                                           
 249                                                                                                                                                                                                                 
 250     for _, metric := range metrics {                                                                                                                                                                            
 251         buf, err := k.serializer.Serialize(metric)                                                                                                                                                              
 252         if err != nil {                                                                                                                                                                                         
 253             return err                                                                                                                                                                                          
 254         }                                                                                                                                                                                                       
 255                                                                                                                                                                                                                 
 256         // remove endline from the end
 257         if buf[len(buf)-1] == '\n' {
 258             buf = buf[:len(buf)-1]
 259         }

Is this mostly an issue when using kafka-console-consumer.sh?

Yes, I use this consumer and see this behavior.