I’m trying to use the valuecounter aggregator to count occurrences of certain values in my tail input (I used logparser before, but changed to tail since logparser is deprecated in Telegraf 1.8+).
It works as expected, but I want to have the output separated by tags (level: WARN, level: INFO) etc instead of multiple fields called level_WARN and level_INFO because it makes it easier to do GROUP BY, and so on.
But the valuecounter aggregator only seems to support outputting to new fields. So I tried the converter processor, but it seems that only works with raw data and not counts output by the valuecounter.
Any clues on how I should proceed?
This is my telegraf config.
[[inputs.tail]]
files = [
"/data/rocketmq/logs/rocketmqlogs/broker_default.log",
"/data/rocketmq/logs/rocketmqlogs/broker.log",
"/data/rocketmq/logs/rocketmqlogs/namesrv_default.log",
"/data/rocketmq/logs/rocketmqlogs/namesrv.log",
"/data/rocketmq/logs/rocketmqlogs/remoting.log",
"/data/rocketmq/logs/rocketmqlogs/rocketmq_client.log",
"/data/rocketmq/logs/rocketmqlogs/stats.log",
"/data/rocketmq/logs/rocketmqlogs/storeerror.log",
"/data/rocketmq/logs/rocketmqlogs/store.log",
"/data/rocketmq/logs/rocketmqlogs/tools_default.log",
"/data/rocketmq/logs/rocketmqlogs/transaction.log",
]
data_format = "grok"
grok_patterns = ["%{MQ_LOG_GENERIC}"]
grok_custom_patterns = '''
MQ_LOG_GENERIC %{TIMESTAMP_ISO8601:timestamp} %{LOGLEVEL:level} %{WORD:class} -%{GREEDYDATA:data:drop}
'''
[[aggregators.valuecounter]]
period = "10s"
drop_original = false
fields = ["level", "class"]
namepass = ["tail"]
# Tried using this, but seems to only work with the tail raw output (for example reading the "level" field)
[[processors.converter]]
[processors.converter.fields]
tag = ["class_*", "level_*"]
This is the error message I got when I tried to use the converter processor:
Sep 04 08:32:40 rocketmq1.testcluster.local telegraf[16064]: 2018-09-05T02:32:40Z E! [serializers.influx] could not serialize metric: "tail,class_NettyServerCodecThread_1=2,host=rocketmq1.testcluster.local,level_INFO=2,path=/data/rocketmq/logs/rocketmqlogs/namesrv.log": no serializable fields; discarding metric
Example input data:
2018-08-29 16:55:14,014 INFO RocketmqClient - RebalanceService service end
I want to be able to use queries like these to get the data out:
SELECT mean("level") AS "mean_level" FROM "mq"."autogen"."tail" WHERE time > now() - 1h GROUP BY time(:interval:), "level" FILL(null)