1.GET _index_template 查看所有索引模版
GET /_cat/shards 查看所有分片大小及分布(在哪个节点)
GET _cat/nodes?v 简单查看节点信息
GET _cat/indices?v&h=index,store.size&s=index 查看索引大小(?v:展示表头;h:选择展示的列;s:按字段排序)
2.如果有索引中的文档需要删除,可以执行如下命令:
POST /.ds-logs-nm-dlptest-2023.08.22-000001/_delete_by_query
{
"query": {
"match": {
"data_stream.namespace": "dlptest"
}
}
}
3.在进行watcher配置时如果有立即触发的需求,可以执行如下命令:
PUT _watcher/watch/80224e90-b02f-431a-8ac3-51f992b1de7f/_execute
中间数字是watcher的id:
4.
简单语法:
1、全文检索:直接写搜索的单词 如:搜索‘id’,搜索字符A;
2、单字段的全文检索:在搜索单词之前加上字段名和冒号,比如如果知道单词 Riven(用户名) 肯定出现在 user字段,可以写作 user:Riven;
3、单字段的精确检索:在搜索单词前后加双引号,比如 user:"Riven";
4 、多个检索条件的组合:可以使用 NOT, AND 和 OR 来组合检索,注意必须是大写。比如 user:("Riven" OR "riven") AND NOT mesg:BUG;
这个搜索的全意是: 精确搜索字段值为"Riven" 、"riven"并且mesg字段值不能为BUG的信息
5、字段是否存在:exists:user 表示要求 user 字段存在,missing:user 表示要求 user 字段不存在;
6、通配符:用 ? 表示单字母,* 表示任意个字母。比如 fir?t mess*;
7、正则:需要比通配符更复杂一点的表达式,可以使用正则。比如 mesg:/mes{2}ages?/。注意 ES 中正则性能很差,而且支持的功能也不是特别强大,尽量不要使用;
8、近似搜索:用 ~ 表示搜索单词可能有一两个字母写的不对;
9、范围搜索:对数值和时间,ES 都可以使用范围搜索,比如:size:>300,date:["now-6h" TO "now"} 等。其中,[] 表示端点数值包含在范围内,{} 表示端点数值不包含在范围内;
复杂语法:
1.在kibana查询中有以下保留字符/特殊字符:+ - && || ! () {} [] ^" ~ * ? : \ 以上字符当作值搜索的时候需要用\转义
例如在web端查询rdlog.tp-link.com的时候,如果不加双引号,查询结果会包含含有rdlog.tp和link.com的内容
在es的json格式查询或者watcher的条件匹配查询中,可以使用match_phrase将该字段强制看作一个整体来进行查询
2.bool查询
需求
查询考试成绩是60分或90分的女生。
查询条件应该这么写 sex == '女' && ( score == 60 || score ==90 );
先看下bool的语法
{
"query": {
"bool": {
"must": [{},...], //相当于AND
"must_not": [{},...], //相当于NOT
"should": [{},...] //相当于OR
}
}
}
在ES中的实现
方式一:
在bool查询的must 中再嵌套一层bool来做should过滤。
GET stu/_search
{
"query": {
"bool": {
"must": [
{"term": {"sex": {"value": "女"}}},
{
"bool": {
"should": [
{"term": {"score": {"value": "60"}}},
{"term": {"score": {"value": "90"}}}
]
}
}
]
}
}
}
方式二:
使用 minimum_should_match 选项,至少匹配一项should子句。
GET stu/_search
{
"query": {
"bool": {
"must": [
{"term": {"sex": {"value": "女"}}}
],
"should": [
{"term": {"score": {"value": "60"}}},
{"term": {"score": {"value": "90"}}}
],
"minimum_should_match": 1
}
}
}
注意:
must 和 should 的条件并列组合时,参数 minimum_should_match 默认值为0 (即 should 的条件可以都不满足)。这也是 must 和 should 组合查询时,should 失效的原因。
should下有多个条件时,我们必须设置 minimum_should_match = 1 才能实现 或 操作。
实际上在watcher中,查询条件时按顺序匹配的,即must中如果由两个match的话,会按从上到下顺序匹配
3.match和match_phrase
match类似全文搜索
GET /my_index/address/_search
{
query: {match:"hello world"}
}
句子中包含hello或world的都会被搜索出,比如下面的句子都会被搜索到:
1.hello tom, do you know me
2.see the world
match_phrase类似精确搜索
GET /my_index/address/_search
{
query: {match_phrase:"hello world"}
}
也就是说hello world 必须相邻才能被搜索出来,比如下面的句子:
1.Hello World tom, do you know me // 能搜到
2.see the world // 搜不到
3.Hello tom // 搜不到
match查询属于全文查询,在查询时,ES会先分析查询字符串,然后根据分词构建查询。
match_phrase在查询时也会先分析查询字符串,然后对这些词项进行搜索,不同的是match_phrase查询只会保留包含全部查询字符串的文档
5.
6.
因近期mes组有新增异常日志监控告警的需求,对elk的付费功能watcher进行了学习
watcher可以定时扫描日志并将异常情况以webhook、机器人、邮件等方式进行告警,综合考量邮件报警最适合公司现有状况,因此对相关的配置及配置文件进行记录
watcher是一个付费功能,我们的破解版是可以正常使用的,如果是免费版需要安装第三方插件
1.首先要对服务器的配置文件进行更改,集群中的所有服务器都需要更改,否则邮件发送功能不会生效
在配置文件中新增以下内容:
红框中的内容可以根据实际情况进行修改,我这里是参考了官方文档(https://www.elastic.co/guide/en/elasticsearch/reference/7.14/actions-email.html)和内销配置进行设置的
profile:使用什么工具发送邮件,公司使用的是outlook
from:指定发送邮件的邮箱
host:邮件服务器域名
port:邮件服务端口
2.为了保证安全,发邮件的邮箱的密码不能写在配置文件中,需要通过以下命令保存在服务器中:
/usr/share/elasticsearch/bin/elasticsearch-keystore add xpack.notification.email.account.exchange_account.smtp.secure_password
集群中所有服务器都配置好后,依此重启服务器,发送邮件的功能就可以正常使用了
3.接下来到前端进行条件配置,确定触发了什么情况才发送邮件
4.配置文件如下,有一些简单的注释说明:
{
"trigger": {
"schedule": {
"interval": "1m"#检查频率,1m指每分钟检查一次
}
},
"input": {
"search": {
"request": {
"search_type": "query_then_fetch",
"indices": [
"logs-ts-fluentd*"#指定要检查的索引名称
],
"rest_total_hits_as_int": true,
"body": {
"size": 0,
"query": {
"bool": {
"must": [#must指其中的条件要同时满足,如果是should的话只需满足一个即可,二者也可结合使用
{
"match": {
"message": "MONITOR"
}
},
{
"match": {
"container.log.tag": "cf3c3820378e0ed73950962235ffbac1"#指定容器的tag值,尝试过使用容器的英文名称,无法生效
}
},
{
"range": {#每次检查的时间范围:从现在到过去的一分钟内
"@timestamp": {
"gte": "now-1m",
"lte": "now"
}
}
}
]
}
}
}
}
}
},
"condition": {
"compare": {
"ctx.payload.hits.total": {
"gte": 1#条件值,1指只要查询到一条满足前面筛选条件的日志就执行后面的操作
}
}
},
"actions": {#操作配置,以邮件告警为例
"send_email": {
"email": {
"profile": "outlook",
"to": [
"[email protected]"
],
"subject": "PD_AMAZON异常报警",
"body": {
"html": "请到elk平台查看异常"
}
}
}
}
}
6.如果一个节点需要较长时间的停机,不适用于滚动重启中的操作,此时建议在停机前先将该节点上的索引先迁移到其他节点,避免直接关闭节点导致的数据重新分配是大量的io操作对集群负载产生影响:
1.使用分配过滤器将数据从目标节点迁移:
在dev tools中运行
PUT _cluster/settings
{
"transient": {
"cluster.routing.allocation.exclude._name": "target-node-name"
}
}
2.按照滚动重启中的步骤操作,直至关闭目标节点
3.确保集群运行状况为yellow或green
4.重新将节点加入集群,将索引重新分配:
PUT _cluster/settings
{
"transient": {
"cluster.routing.allocation.exclude._name": null
}
}
标签:查询,搜索,query,日志,should,match,must From: https://www.cnblogs.com/zhongbangxin/p/17998758