使用KIBANA查询ES中的数据
在搜索时,一定要选择合理的时间范围,这个时间范围是基于创建索引模式时选择的时间字段。比如@timestamp。
另外一个小提示:默认情况下,搜索结果列表的上方会显示一个柱状图。可以点击左下角的小箭头,查看其他的信息,比如搜索结果对应的ES请求主体等。
Elasticsearch查询语句语法
查询语句包含一系列词语(term)和操作符。一个词语可以是一个单词,比如INFO。
也可以是双引号包围的一个短语,比如"INFO make",这种情况下会搜索这整个短语,按照单词在短语中的顺序。
指定字段名称
默认情况下,会在所有字段中匹配要搜索的词语。或者我们也可以指定要搜索的字段。比如以下查询:
- 查询
message字段中包含INFO单词的记录:message:INFO - 查询
message字段中包含INFO make短语的记录:message:"INFO make"。 在这个例子中,如果搜索message:"make INFO"就会提示未找到结果,因为message字段并不包含make INFO这个短语。(稍微注意搜索栏的输入内容和ES查询请求中语句的差别) - 查询
message字段中包含test或inform的记录:message:(test OR inform)。 如果省掉了OR,也就是message:(test inform),则使用设置的default_operator的值(其默认值为OR)。 - 查询所有
mes开头的字段中包含trust的记录:mes\*:trust。*通配符前需要加反斜杠\。 这里有一个问题,搜索kafka.\*:trsutlog会报错,因为这里匹配的字段的数据类型,有字符串类型,数值类型,和未知类型。对于数值类型的字段,我们只能使用数字来搜索,使用字母等就会报错。所以kafka.\*:17432195就有结果了。 再比如,当我们尝试查询beat.\*:5.1.2时就成功了,因为匹配的beat.hostname和beat.version字段都是字符串类型的。 - 查询
message字段值非空的记录:_exists_:message。
使用通配符
通配符搜索适用于单个单词中,使用?替换单个字符,*替换零个或多个字符。比如:tags:trust* OR tes?的查询结果如下。注意这个查询中的tes?是用于匹配所有字段的内容。如果要限定tags字段,则应该查询tags:(trust* OR tes?)。
另外,使用通配符查询是很占用内存的。
正则表达式
比如查询tags:/trust*/。具体正则表达式语法参考:www.elastic.co/guide/en/el…
模糊操作符
可以搜索相似的词语,比如trsut~,同样会匹配trust。
取值范围
范围可以是日期,数值,或者字符串字段的范围。闭区间:[min TO max];开区间:{min TO max};也可以结合在一起:[min TO max}。
- 日期:
date:[2012-01-01 TO 2012-12-31] - 数值:
count:[1 TO 5] - 字符串:
tag:{alpha TO omega} - 不指定最小值或最大值:
count:[10 TO *],也可以写成count:>=10date:{* TO 2012-12-31}: date在2012-12-31之前(这个我测试了,查不到预想的结果)
Boolean操作符
比如ERROR WARNING +INFO -DEBUG:
WARNING和ERROR可选,只是提高了相关性。+INFO表示一定要包含INFO单词。-DEBUG表示一定不能包含DEBUG单词。
如果使用AND,OR和NOT操作符(也写作&&,||,!),则可以转化成:
WARNING OR ERROR AND INFO AND NOT DEBUG- 不正确的转化:
(WARNING OR ERROR) AND INFO AND NOT DEBUG。这种情况下,必须至少匹配WARNING和ERROR中一个。
保留字符
如果要匹配保留字符,则需要在字符前加反斜杠\。保留字符包括: + - = && || > < ! ( ) { } [ ] ^ " ~ * ? : \ /。比如:要搜索(1+1)=2,则使用语句\(1\+1\)\=2。
不过,<和>是无法转义的,它们总是会创建一个范围查询。
参考链接
ES文档:www.elastic.co/guide/en/el…
星期六, 26. 八月 2017 05:58下午