首页 > 其他分享 >日志

日志

时间:2024-01-31 10:56:35浏览次数:24  
标签:查询 搜索 query 日志 should match must

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

相关文章

  • 如何对混合日志进行自动化解析
    本文分享自华为云社区《【AIOps】日志分析领域难题:如何对混合日志进行自动化解析?》,作者:DevAI。AIOps智能运维,是指将AI应用于运维领域,基于已有的运维数据通过AI的方式来解决传统运维没办法解决的问题;本文聚焦在AIOps领域的日志解析子课题。现有的日志解析器(logparser)在实际......
  • springboot~logback控制日志文件大小与历史个数
    日志本地化,对于每个应用来说都是必须的,最起码第一时间日志是需要本地化的,然后从本地化的日志中再进行推送,例如通过fluentd将日志推到es里,通过kibana工具进行可视化分析。日志文件大小限制对于把日志持久化到磁盘,你需要设置它的占用空间,logback提供了保存文件大小和历史文件数量......
  • Python 在Windows上监控Linux日志
    importparamikoimporttimedefmonitor_linux_log(linux_ip,username,password,log_file):client=paramiko.SSHClient()client.set_missing_host_key_policy(paramiko.AutoAddPolicy())client.connect(linux_ip,username=username,password=passwo......
  • Mygin中间件优化及logger日志中间件
    本篇是mygin的第七篇,参照gin框架,感兴趣的可以从Mygin第一篇开始看,Mygin从零开始完全手写,在实现的同时,带你一窥gin框架的核心原理实现。目的中间件Middleware优化默认log日志中间件在上篇Mygin实现中间件Middleware中间件Middleware很生硬,完全依赖循环,如果某个中间件想要c......
  • 如何重写gorm日志(实现自定义慢sql打印)
    1.什么是gormGORM是一个流行的Go语言ORM(对象关系映射)库,用于处理数据库的CRUD(创建、读取、更新、删除)操作。它是一个开源的库,通过简洁的API使得对数据库的操作就像操作对象一样自然,无需编写大量的SQL代码。GORM支持主流的关系数据库,如MySQL、PostgreSQL、SQLite以及Mic......
  • 这些Shell分析服务器日志命令集锦,优秀!
    自己的小网站跑在阿里云的ECS上面,偶尔也去分析分析自己网站服务器日志,看看网站的访问量。看看有没有黑客搞破坏!于是收集,整理一些服务器日志分析命令,大家可以试试!1、查看有多少个IP访问:awk'{print$1}'log_file|sort|uniq|wc-l2、查看某一个页面被访问的次数:grep"/index.ph......
  • MySQL查看bin_log日志
    有这样一段业务逻辑,首先保存业务数据,然后发送报文,最后确认报文回来以后更新业务数据。伪代码大概是这样的:/***保存数据,并调用发送报文方法*/publicvoidsave(){//0.保存数据//调用send()方法send();}/***发送报文*/publicvoidsend(){/......
  • python自定义装饰器,实现轮询监控数据库,并且根据字段内容变更打印相应日志或结束循环
    使用方法可以写个whileTrue的循环监控数据,再分别定义每个状态要做什么事情注意:循环中不要写breake不要return,换成yield,把函数作为一个生成器,由装饰器控制循环代码示例importfunctoolsimporttimefromutils.log_settingimportloggerfromconfigimportsetti......
  • PostgreSQL 格式化日志输出
    PostgreSQLstderr日志记录,修改postgresql.cfg中的log_line_prefix:log_line_prefix='%m[pid=%p]%q[txid=%x]%u@%d'--输出结果如下2024-06-2017:17:52.988CEST[pid=19718][txid=0]dbausers@testLOG:statement:INSERTINTOchildVALUES(100,1,'newch......
  • ingress查看访问域名日志
    修改ingress配置文件在NginxIngress的日志中,通常不直接显示客户端请求的域名。这是因为Nginx的日志格式是可配置的,而默认配置可能没有包括显示域名的字段。通常,Nginx的日志主要关注于请求的其他方面,如客户端IP、请求类型、状态码等。如果你希望在日志中包含请求的域名,你......