使用grafana 7.2和elasticsearch 7.5.1。
一切都在openshift中启动和运行。elasticsearch数据源配置正确,并创建了一个非常简单的 Jmeter 板。
从同样在openshift中运行的springboot服务中,我使用fluentd将日志发送到elasticsearch。
elasticsearch中存储的文档如下(取自grafana“日志”结果面板):
编辑:根据@karan shah的建议,我添加了通过fluentd发送给elastichsearch的原始日志:
{
"onpay":{
"traceId":"9999",
"inout":"OUT",
"startTime":"2020-10-01T10:13:43.806+0200",
"finishTime":"2020-10-01T10:13:43.827+0200",
"executionTime":21.0,
"entrySize":124.0,
"exitSize":124.0,
"differenceSize":0.0,
"user":"pgallello",
"methodPath":"http://localhost:8083/api/serviceEntryPoint",
"errorMessage":null,
"className":"com.myorganization.mypackage.MyController",
"methodName":"serviceTemplateEntryPoint"
}
}
它是一个elasticsearch文档,带有一个字段“message”,这是我要将 Jmeter 板放在其中的字段。注意两点:
现场用红色表示:行刑时间。
字段源只有一个[object]值。
问题1:
我需要做的(我没有得到)是棘手的部分:我需要得到一个直方图,显示每个间隔的executiontime字段值的平均值。
遵循官方文档,特别是这个来自grafana的官方视频,我应该能够将de group by field更改为average,并从字段选择器中选择@value。不幸的是,@value没有出现在那里(可能 _source = [object Object]
有什么事吗?)
问题2:
另一个疑问是查询字段是否以这种格式有效,或者访问executiontime字段的方法是什么,executiontime字段位于elasticsearch文档的message字段中。在一种等级制度中 message -> onpay -> executionTime
.
fluentd配置文件:
<source>
@type forward
port 24224
bind "0.0.0.0"
</source>
<filter onpayapp.**>
@type parser
key_name "onpayapp"
reserve_data true
<parse>
@type "json"
</parse>
</filter>
<match onpay.**>
@type copy
<store>
@type "elasticsearch"
host "elasticdb"
port 9200
logstash_format true
logstash_prefix "applogs"
logstash_dateformat "%Y%m%d"
include_tag_key true
type_name "app_log"
tag_key "@log_name"
flush_interval 1s
<parse>
@type json
</parse>
<buffer>
flush_interval 1s
</buffer>
</store>
<store>
@type "stdout"
</store>
</match>
1条答案
按热度按时间nukf8bse1#
目前,在消息字段中,整个json都是一个字符串。所以elastic不能对它进行任何数学运算。您需要做的是使用fluentd将日志行解析为json,这样在弹性文档中,json中的每个字段(如logger和level)都是弹性文档的一部分。一旦你有了这个弹性,你就可以自动解释executiontime是number,并使它可以用于聚合。在那之后,你将在你的grafana下拉列表中看到这个字段。
在这里,您可以了解有关源字段的更多信息。
把你原来的日志行也添加到这个问题中,我认为这可能有助于理解你想要摄取什么,以便对可能的fluentd配置提出建议。
根据提供的其他信息更新了答案
为了简单起见,我使用docker安装程序来运行和解析问题中提供的日志模式。
fluentd配置
我使用了http输入,所以它允许我 curl ,但您可以切换回转发器。我已经删除了过滤器,因为我假设您的源代码已经是json,所以您不需要将其解析为json。如果通过管道处理了多种类型的数据,则可以添加匹配模式。
流畅的docker图像
docker compose您可以选择只运行elasticsearch的一个节点。我已经运行了这个设置。
curl 试验
ElasticSearch结果
一旦你得到所有的json键,elastic将自动Map大多数字段,并允许根据字段类型进行搜索、聚合等。如果需要,可以从kibana索引管理更改字段类型和格式。