# Avro Parser Plugin The `Avro` parser creates metrics from a message serialized with Avro. The message is supposed to be encoded as follows: | Bytes | Area | Description | | ----- | ---------- | ------------------------------------------------ | | 0 | Magic Byte | Confluent serialization format version number. | | 1-4 | Schema ID | 4-byte schema ID as returned by Schema Registry. | | 5- | Data | Serialized data. | ## Configuration ```toml [[inputs.kafka_consumer]] ## Kafka brokers. brokers = ["localhost:9092"] ## Topics to consume. topics = ["telegraf"] ## Maximum length of a message to consume, in bytes (default 0/unlimited); ## larger messages are dropped max_message_len = 1000000 ## Avro data format settings data_format = "avro" ## Url of the schema registry; exactly one of schema registry and ## schema must be set avro_schema_registry = "http://localhost:8081" ## Schema string; exactly one of schema registry and schema must be set #avro_schema = """ # { # "type":"record", # "name":"Value", # "namespace":"com.example", # "fields":[ # { # "name":"tag", # "type":"string" # }, # { # "name":"field", # "type":"long" # }, # { # "name":"timestamp", # "type":"long" # } # ] # } #""" ## Measurement string; if not set, determine measurement name from ## schema (as ".") # avro_measurement = "ratings" ## Avro fields to be used as tags; optional. # avro_tags = ["CHANNEL", "CLUB_STATUS"] ## Avro fields to be used as fields; if empty, any Avro fields ## detected from the schema, not used as tags, will be used as ## measurement fields. # avro_fields = ["STARS"] ## Avro fields to be used as timestamp; if empty, current time will ## be used for the measurement timestamp. # avro_timestamp = "" ## If avro_timestamp is specified, avro_timestamp_format must be set ## to one of 'unix', 'unix_ms', 'unix_us', or 'unix_ns' # avro_timestamp_format = "unix" ## Used to separate parts of array structures. As above, the default ## is the empty string, so a=["a", "b"] becomes a0="a", a1="b". ## If this were set to "_", then it would be a_0="a", a_1="b". # avro_field_separator = "_" ## Default values for given tags: optional # tags = { "application": "hermes", "region": "central" } ``` ### `avro_timestamp` and `avro_timestamp_format` By default the current time at ingestion will be used for all created metrics; to set the time using the Avro message you can use the `avro_timestamp` and `avro_timestamp_format` options together to set the time to a value in the parsed document. The `avro_timestamp` option specifies the field containing the time value. If it is not set, the time of record ingestion is used. If it is set, the field may be any numerical type: notably, it is *not* constrained to an Avro `long` (int64) (which Avro uses for timestamps in millisecond or microsecond resolution). However, it must represent the number of time increments since the Unix epoch (00:00 UTC 1 Jan 1970). The `avro_timestamp_format` option specifies the precision of the timestamp field, and, if set, must be one of `unix`, `unix_ms`, `unix_us`, or `unix_ns`. If `avro_timestamp` is set, `avro_timestamp_format` must be as well. ## Metrics One metric is created for each message. The type of each field is automatically determined based on the schema.