elk通过脚本监控查询语句,查询5分钟内包含关键字或关键词语日志条数

搭建好elk后,又增加了新的日志监控需求。目前有两种方式,一种是Logstash安装zabbix插件,但是服务器是离线的,而且安装后采集的不统一,因为本地部署的是logstash伪集群。所以研究了半天,采用curl查询脚本,获取es数据,然后通过zabbix获取并告警。全量脚本如下:

#! /bin/bash
result=`curl -s -H "Content-Type: application/json" -XGET -u "elastic:密码" http://172.16.58.104:9200/gdums-gnete-*/_search?pretty -d '{ "size":0,
   "query": {
    "bool": {
     "filter": [
       {
         "range": {
           "@timestamp": {
             "gte": "now-5m/m",
             "lte": "now/m"
           }
         }
       },
       {
         "match":{
           "newmessage": "OutOfMemoryError"
         }
       }
     ]
   }
 }
}'|sed 's/,/\n/g'|grep "value"|awk '{print $3}'`
echo $result

其中,设置'size':0表示不返回数据详情。sed 's/,/\n/g'|grep "value"|awk '{print $3}'这段是用来拿到total这个值,其它返回值不需要。

"gte": "now-5m/m", "lte": "now/m" 是用来限制取日志时间,取最近5分钟,当然也有天的配置例如:now-1d/d就是一天前。

参考知识点

1、范围查询的符号

2、关于时间的数学表达式(date-math)

Elasticsearch中时间可以表示为now, 也就是系统当前时间, 也可以是以||结尾的日期字符串表示.

在日期之后, 可以选择一个或多个数学表达式:

  • +1h —— 加1小时;
  • -1d —— 减1天;
  • /d —— 四舍五入到最近的一天.

下面是Elasticsearch支持数学表达式的时间单位:

说明: 假设系统当前时间now = 2023-10-01 12:00:00 :

  • now+1h: now的毫秒值 + 1小时, 结果是: 2023-10-01 13:00:00.
  • now-1h: now的毫秒值 - 1小时, 结果是: 2023-10-01 11:00:00.
  • now-1h/d: now的毫秒值 - 1小时, 然后四舍五入到最近的一天的起始, 结果是: 2023-10-01 00:00:00.
  • 2023.10.01||+1M/d2023-10-01的毫秒值 + 1月, 再四舍五入到最近一天的起始, 结果是: 2023-11-01 00:00:00

 ---补充内容,关键词语

词语和单个关键字存在差异,要想完整匹配,需要将match替换成match_phrase:

match和match_phrase的区别如下:
  • match查询用于搜索包含指定词汇的文档,根据类型分词或者不分词。
  • match_phrase查询用于完整匹配指定短语,不分词,按照短语顺序匹配。
  • match查询结果中的字段可以包含查询词汇的任意一个词,而match_phrase查询结果中的字段必须包含完整的查询短语。
  • match查询结果的数量可能比match_phrase查询结果多。
#! /bin/bash
result=`curl -s -H "Content-Type: application/json" -XGET -u "elastic:密码" http://172.16.58.104:9200/gdums-gnete-*/_search?pretty -d '{ "size":0,
   "query": {
    "bool": {
     "filter": [
       {
         "range": {
           "@timestamp": {
             "gte": "now-5m/m",
             "lte": "now/m"
           }
         }
       },
       {
         "match_phrase":{
           "newmessage": "config failed"
         }
       }
     ]
   }
 }
}'|sed 's/,/\n/g'|grep "value"|awk '{print $3}'`
echo $result
posted @   元宵不如汤圆  阅读(50)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示