欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Elasticsearch Kibana 基本查询语法

程序员文章站 2022-03-05 10:09:35
...

elasticsearch 的基本概念这里不做介绍,需要了解的自行百科。

这里主要记录一些日常利用Kibana查询es日志的语句,供大家参考。

Kibana是一个开源的分析和可视化平台,设计用于和Elasticsearch一起工作。

手册导航:
https://www.elastic.co/guide/cn/elasticsearch/guide/current/foreword_id.html
https://www.elastic.co/guide/cn/kibana/current/introduction.html

格式说明:

[`请求方式`]  [`索引`] / [`type`] / [`查询关键词`] 
{
	"query": {
		 // 查询体	
	}
}

控制台Dev Toolsconsole 记录:

  • 匹配所有日志
    关键词:match_all

    GET nginx_logs/access/_search
    {
      "query": {
        "match_all": {}
      }
    }
    
  • 指定某个字段的值查询
    关键词:match

    GET nginx_logs/access/_search
    {
      "query": {
        "match": {
    		"path": "/sovellpay/v2/trade"
        }
      }
    }
    

    匹配出路径path 等于 /sovellpay/v2/trade 的日志

  • 模糊查询
    关键词:wildcard

    GET nginx_logs/access/_search
    {
      "query": {
        "wildcard": {"status": "5*"}
      }
    }
    

    匹配出状态码status 以 5 开头的日志

  • 指定某个值 同时匹配多个字段
    关键词:multi_match
    query 要查询的值
    fields 要匹配的字段【数组】

    GET nginx_logs/access/_search
    {
      "query": {
        "multi_match": {
            "query":    "400",
            "fields":   [ "code", "status" ]
        }
      }
    }
    

    匹配出 字段codestatus400的所有日志

  • 一个字段查询多个值
    关键词:terms
    { “字段”:[ 要匹配的多个值 ] }

    GET nginx_logs/access/_search
    {
      "query": {
        "terms": {
            "status": ["400","402","406"]
        }
      }
    }
    
  • 多种组合查询
    关键词:bool must should range size sort
    来看一个例子:

    GET nginx_logs/access/_search
    {
      "query": {
        "bool": {
    		"must": [
    		    {
    		        "bool":{
    		        	"should":[
    			          	{"wildcard": {"status": "5*"}},
                        	{"terms": {"status": ["400","402","406"]}}
    		         	]
    		        }
    		    },
                { 
                  "range": {
                  	"time": {"gte":"2019-03-14 09:00:00","lte":"2019-03-14 15:30:00"}
                  }
                }
            ]
    	}
      },
      "size":100,
      "sort": [
        {
          "time": {
            "order": "desc"
          }
        }
      ]
    }
    

    解释:
    匹配出 状态值 status 满足以5开头 包含 400 402 406,并且日志时间time>= 2019-03-14 09:00:00 && <= 2019-03-14 15:30:00 范围内,查询结果按照time 字段 desc 倒叙排列。 查询出100条。

    另外一个例子:

    GET nginx_logs/access/_search
    {
      "query": {
        "bool": {
          "must": [
            {
              "bool": {
                "should": [
                  {
                    "wildcard": {
                      "path": "*/order/info"
                    }
                  },
                  {
                    "wildcard": {
                      "path": "/sovellpay/v2/payment/*"
                    }
                  },
                  {
                    "terms": {
                      "path": [
                        "/oauth/v2/token",
                        "/sovellpay/v2/trade"
                      ]
                    }
                  }
                ]
              }
            },
            {
              "range": {
                "request_time": {
                  "gte": 2
                }
              }
            },
            {
              "range": {
                "time": {
                  "gte": "2019-03-14 12:00:00",
                  "lte": "2019-03-14 15:30:00"
                }
              }
            }
          ]
        }
      },
      "size": 100,
      "sort": [
        {
          "time": {
            "order": "desc"
          }
        }
      ]
    }
    

    解释:
    匹配出日志中path字段包含以下值的所有情况:(*通配符)

    /oauth/v2/token
    /sovellpay/v2/trade
    */order/info
    /sovellpay/v2/payment/*
    

    请求时长request_time 大于等于2s 的日志记录(时间和排序那些见上个例子)


    希望对大家有所帮助~

    loading...