我正在学习ELK,并试图为我的项目做一个POC。我正在为我的项目的样本集成日志应用KV过滤器,我可以看到很多额外的字段因此而出现,所以我尝试应用剪枝过滤器和白列某些字段。我可以看到日志在logstash服务器中打印,但日志不会进行弹性搜索。如果我删除过滤器,它将进入弹性搜索。请告知如何进一步调试此问题。
filter {
kv {
field_split => "{},?\[\]"
transform_key => "capitalize"
transform_value => "capitalize"
trim_key => "\s"
trim_value => "\s"
include_brackets => false
}
prune
{
whitelist_names => [ "App_version", "Correlation_id", "Env", "Flow_name", "host", "Instance_id", "log_level","log_thread", "log_timestamp", "message", "patient_id", "status_code", "type", "detail"]
}
}
output {
elasticsearch {
hosts => ["http://localhost:9200"]
index => "mule-%{+YYYY.MM.dd}"
#user => "elastic"
#password => "changeme"
}
stdout { codec => rubydebug }
}
我还需要两个建议,
我还尝试在初始日志中使用grok过滤器,尝试从样本日志中获取日志级别字段(时间和日志类型),并将剩余日志发送到KV过滤器。有什么参考资料请分享。这就是我为之所做的努力。但却像_grokparsefailure一样。我已通过源选项将msgbody传递到kv滤波器。
grok {
match => { "message" => "%{TIMESTAMP_ISO8601:timestamp}\s+%{LOGLEVEL:loglevel}\s+%{GREEDYDATA:msgbody}"}
overwrite => [ "msgbody" ]
}
我在示例日志中有消息字段,如下所示。当数据转到Kibana我可以看到两个消息字段标签,一个是完整日志,另一个是正确的消息(高亮显示)。这种变异会对这种情况起作用吗?我们有什么方法可以把完整的日志名称更改为其他名称吗??
[2020-02-10 11:20:07.172]信息骡子。api[[MuleRuntime]。cpuLight。04:[主要api测试]。api main。CPU_LITE@256c5cf5:[主要api测试]。主api主/处理器/0/处理器/0。事件:00000003{app_name=main api main,app_version=v1,env=Test,timestamp=2020-02-10T11:20:07.172Z,log={correlation_id=00000003,patient_id=12345678,instance_id=hospital,message=Start of System api,flow_name=main api main}
修剪滤波器误差
你的prune
过滤器在白名单中没有
@timestamp
字段,你的输出是基于日期的(%{YYYY.MM.dd}
),logstash需要输出中的@timestamp
字段来提取日期。
我已经用你的示例消息运行了你的管道,它像预期的那样工作,通过
prune
过滤器,消息被发送到elasticsearch,但它存储在名为mule-
的索引中,没有任何日期时间字段。
如果没有
prune
过滤器,您的消息将logstash收到事件时的时间作为@时间戳
,因为您没有任何日期过滤器来更改它。
如果您创建了索引
mule-*
的索引模式,其中包含一个日期时间字段,如@timemark
,您将不会在Kibana上看到索引上没有相同日期时间字段的任何文档。
格罗克误差
你的grok是错误的,你需要跳过时间戳周围的方括号。Kibana有一个grok调试器,你可以在那里尝试你的模式。
下面的grok工作,移动你的kv以跟随grok并以
msgbody
作为源。
grok {
match => { "message" => "\[%{TIMESTAMP_ISO8601:timestamp}\]\s+%{LOGLEVEL:loglevel}\s+%{GREEDYDATA:msgbody}"}
overwrite => [ "msgbody" ]
}
kv {
source => "msgbody"
field_split => "{},?\[\]"
transform_key => "capitalize"
transform_value => "capitalize"
trim_key => "\s"
trim_value => "\s"
include_brackets => false
}
只需运行它,输出仅为stdout,以查看更改
prune
过滤器所需的过滤器。
重复的消息字段
如果你把你的
kv
过滤器放在grok
之后,你就不会复制消息
字段,因为你的kv
是将你的字段大写,你将以包含完整日志的消息
字段和包含内部消息的消息
字段结束,logstash字段区分大小写。
但是,您可以使用
mutate
过滤器重命名任何字段。
mutate {
rename => ["message", "fullLogMessage"]
}
我正在尝试在Elastic 2中创建一个过滤索引别名。十、 以下是所有青少年的资料,不分性别。我只想在这个过滤器里看到雌性。 这就是我试图创建索引别名的原因: 我看了这个问题,似乎是相同的答案,但是我的JSON一定有问题。 Elasticsearch将范围和术语连接到相同的数组项
这是回应的一部分 我有联系人号码和名字 现在我的第二个查询->我正在使用术语筛选器查询上面的联系电话
像 这是我的质疑。这将作为呈现的响应 我的第一次尝试是将should的inside条件作为文本添加到一个节中
我试图过滤查询使用范围按日期,但它不工作。如果我使用gt, gte, lt, lte它返回零结果。如果我只使用gt或lt,它返回一些结果,但过滤器不工作。 我检查了uri上的数据类型http://mydomain.local:9200/logstash-2014.09.09/_mapping?pretty=true字段类型是正确的: 以下是我在ElasticSearch中索引的结果示例: 下面是我
如何在elasticsearch中使用与聚合相关的过滤器? 官方文档只给出了过滤器和聚合的小例子,没有对查询dsl进行正式描述——例如,将其与postgres文档进行比较。 通过尝试,我发现以下查询被elasticsearch接受(没有解析错误),但忽略了给定的过滤器: 有些人建议使用查询而不是过滤。但官方文件通常建议对精确值进行过滤。查询的另一个问题是:虽然过滤器提供了和,但查询不提供。 有人能