es的DSL语句查询

定义DSL

官方文档:https://www.elastic.co/guide/en/kibana/7.14/api.html

  • elasticsearch 提供了基于json的完整query DSL (domain specifc languge领域特定语言)来定义查询

查看es的全部索引信息及表头

GET http://10.11.0.1:9200/_cat/indices?v

查看单个索引信息

GET http://10.11.0.1:9200/ingress_access_2022.11.22

全文检索-match查询

POST http://10.11.0.1:9200/ingress_access_2022.11.22/_search
{
    "query": {
        "match": {
           "upstream_status": 500 
        }
    }
}

#查询状态码为500的

完全匹配-match_phrse查询

POST http://10.11.0.1:9200/ingress_access_2022.11.22/_search
{
    "query": {
        "match_phrase": {
           "env_name": "test"
        }
    }
}
#查询环境名为test精确查找

全量查询-match_all

POST http://10.11.0.1:9200/ingress_access_2022.11.22/_search
{
    "query": {
        "match_all": {}
    }
}

分页查询

POST http://10.11.0.1:9200/ingress_access_2022.11.22/_search
{
    "query": {
        "match_all": {}
    }
    "size": 7
    "from": 28
}

#size:每页显示多少条数据默认值为10
#from:指定跳过数据偏移量的大小,默认为0,默认看第一页
       查询指定页码的from值=(页码 - 1)* 每页数据大小

查看对象的指定字段

POST http://10.11.0.1:9200/ingress_access_2022.11.22/_search
{
    "query": {
        "match_all": {}
    },
    "_source": ["status","uri"]
}

"_source"用于查看返回指定的字段

查询包含指定字段的文档

POST http://10.11.0.1:9200/ingress_access_2022.11.22/_search
{
    "query": {
        "exists": {
            "field": "env_name"
        }
    }
}
#exists:判断字段是否存在,若存在返回改文档,若不存在不返回 

基于字段进行排序sort

POST http://10.11.0.1:9200/ingress_access_2022.11.22/_search
{
	"query": {
		"match_all": {}
	},
	"sort": {
		"bytes_sent": {
			"order": "asc"
		}	
	}		
}
#sort 基于指定的字段进行排序,此处为:"bytes_sent";针对_source来进行排序
 order 指定排序规则asc升序;desc降序

多条件查询-bool

#布尔查询可以匹配多个条件查询:"must"(必须是) , "must_not"(不是) , "should" (条件满足其一即可), 
POST http://10.11.0.1:9200/ingress_access_2022.11.22/_search
{
	"query": {
		"bool": {
			"must": [
                {
                    "match": {
                        "status": 500
                    }
                },
                {
                    "match": {
                        "env_id": "kiku.cn"
                    }
                }
            ]
        }           
    }
}  

#布尔值查询区条件区间range基于范围进行过滤:
gt:大于
lt:小于
gte:大于等于
lte:小于等于
POST http://10.11.0.1:9200/ingress_access_2022.11.22/_search
{
	"query": {
       "bool": {
           "filter": {
               "range":{
                   "status":{
                       "gt": 500,
                       "lt": 600
                   }
               }
           }              
       }
    }
} 


##综合环境为dev4.everjiankang.cn,状态500-600之间
POST http://10.11.0.1:9200/ingress_access_2022.11.22/_search
{
	"query": {
       "bool": {
           "must": [
               {
                   "match": {
                       "env_id": "kiku.cn"
                   }
               }
           ],
           "filter": {
               "range":{
                   "status":{
                       "gt": 500,
                       "lt": 600
                   }
               }
           }              
       }
    }
}

精确匹配值查询

POST http://10.11.0.1:9200/ingress_access_2022.11.22/_search
{
	"query": {
		"terms": {
			"status": [
				500,
				504
			]
		}
	}
}

#精确匹配数字,布尔值等。match是全文检索

聚合查询

POST http://10.11.0.1:9200/ingress_access_2022.11.22/_search
{
    "aggs": {
        "uri": {
            "terms":{
                "field": "uri.keyword"
            }
        }
    },
    "size": 0
}

基于uri进行聚合
基于uri.keyword进行分组
#"terms"基于什么进行分组
#"max"基于什么取最大值
#"min"统计最小值的
#"avg"统计平均值



{
    "query": {
       "bool": {
           "must": [
               {
                   "match_phrase": {
                       "env_id": "kiku.cn"
                   }
               }
           ],
           "filter": {
               "range":{
                   "status":{
                       "gte": 500,
                       "lt": 600
                   }
               }
           }         
       }
    },
    "aggs": {
        "uri": {
            "terms":{
                "field": "uri.keyword"
                "size": 200
            }
        }
    },
    "size": 0
}

正则表达式用法

https://www.elastic.co/guide/en/elasticsearch/reference/7.14/query-dsl-regexp-query.html

把5xx数据发送到企业微信

企业微信参考官网:https://developer.work.weixin.qq.com/document/path/91770

#通过es的api接口查询前一天5xx访问情况
upload_file=`5xx_log`.csv
##取除数据
make_info() {
  ##设置每天的日志变量
  year=`date -d last-day +%Y`
  month=`date -d last-day +%m`
  date=`date -d last-day +%d`
  ##需要统计的es集群的ip文件
  ip=`cat es-ip.txt`
  #把个各集群的数据请求集合到log.txt中
  for i in $ip
  do
    curl --location --request POST --X POST http://$i:9200/nginx_${year}.${month}.${date}/_search \
    --header 'User-Agent: Apipost client Runtime/+https://www.apipost.cn/' \
    --header 'Content-Type: application/json' \
    --data '{
        "query": {
           "bool": {
               "filter": {
                   "range":{
                       "status":{
                           "gte": 500,
                           "lt": 600
                       }
                   }
               }
           }
        },
        "aggs": {
            "uri": {
                "terms":{
                    "field": "uri.keyword",
                    "size": 200
                }
            }
        },
        "size": 100
    }'>> log.txt
  done
  ##把json格式变成txt输出
  cat log.txt|jq '.aggregations.uri.buckets[]|.key,.doc_count'|sed -n "N;s/\n/  /p"|awk -F '"' '{print $2","$3}'|grep -E '^/api'|column -t > $upload_file
  ##删除json格式的文档
  rm -f log.txt
}

#往微信中发送消息
sent_wechat() {
   ##机器人信息
   url="https://qyapi.weixin.qq.com/cgi-bin/webhook"
   key="机器人的key"
   # post 参数
   upload="-H 'Content-Type:multipart/form-data' -F 'filename=@$upload_file;type=application/octet-stream' $url/upload_media?key=$key&type=file"
   # 获取临时素材id
   media_id=`curl -s -X POST $upload|jq -r .media_id`
   ###发送
   curl 'https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key='$key'' \
      -H 'Content-Type: application/json' \
      -d '
   {
       "msgtype": "file",
       "file": {
                   "media_id": "'$media_id'"
       }
   }'
}

make_info
sent_wechat
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值