220302-Grafana使用语法之ES/Luence篇

文章目录
  1. 1. 查询成员字段
  2. 2. 查询成员值
  3. 3. 条件查询成员值
  4. 4. Lucene 查询语法
    1. 4.1 条件等于查询
    2. 4.2 不等于查询
    3. 4.3 字段本身存在与否
    4. 4.4 通配符查询
    5. 4.5 模糊搜索
    6. 4.6 范围搜索
    7. 4.7 逻辑操作
    8. 4.8 转移字符
  5. 5. 小结
  • 一灰灰的联系方式
  • Grafnan结合ElasticSearch,实现数据统计,大盘配置

    1. 查询成员字段

    语法:{"find": "fields", "type": "keyword"}

    • find: 表示查什么东西
    • type:表示检索条件

    如查询long类型的字段,可以如下处理

    1
    2
    3
    4
    {
    "find": "fields",
    "type": "long"
    }

    什么时候用这个呢?

    • 比如我想知道这个es中定义了哪些字段
    • 比如在配置Grafana的变量时,可以使用它来做一些限定

    2. 查询成员值

    语法: {"find": "terms", "field": "成员名", "size": 100}

    • find:后面跟上的是 terms, 表示查询具体的值
    • field: 用于限定需要查的成员
    • size:数量限制,可以不填

    举例如下,查询所有的服务器ip

    1
    2
    3
    4
    {
    "find": "terms",
    "field": "server_ip"
    }

    使用范围:

    • 常见于配置Grafana变量,配置一个服务器ip选择的变量,用于查看不同服务器的表现情况

    3. 条件查询成员值

    在前面的基础上加一下限定,比如一个es为多个应用使用,此时我只关注其中app1的大盘,此时配置服务器时,想加一个条件限定

    语法: {"find": "terms", "field": "成员名", "query": "k:v"}

    • query: lucence查询语法,要求成员k的值为v

    举例,查询server_name = app的服务器ip

    1
    2
    3
    4
    5
    {
    "find": "terms",
    "field": "server_ip",
    "query": "server_name:app"
    }

    4. Lucene 查询语法

    配置大盘的查询条件,主要就是借助lucene语法来处理,接下来看一下常见的使用姿势

    4.1 条件等于查询

    语法: field_name: filed_value

    • filed_name: 字段名
    • field_value: 需要检索的值

    注意: 中间使用英文冒号分隔,表示条件命中

    4.2 不等于查询

    如果希望不等于查询,主要使用下面这种方式

    • !(field_name:field_value)

    4.3 字段本身存在与否

    • _exists_:field_name: 查询包含field成员的记录
    • _missing_:field_name: 查询不包含field成员的记录

    4.4 通配符查询

    在查询条件中,包含下面两个的表示使用通配查询

    • ?匹配打个字符
    • * 匹配0或多个字符

    比如我有个应用,部署多个环境,分别名为 app-cn, app-usa,现在想统计整个应用的情况,就可以使用下面这种正则方式

    1
    server_name: app-*

    除了上面的示例,在实际的工作中,更常见的是url的统计,比如统计 /get/ 这个域名开头的请求

    1
    2
    # 下面使用了转义
    url: \/get\/*

    4.5 模糊搜索

    在单次后面添加剂上 ~来实现模糊搜索,这种更适用于搜索业务场景,通常对于grafana的大盘配置,个人感觉不太实用

    实用方式

    1
    2
    // 可以匹配 app-cn
    server_name: app-nc~

    4.6 范围搜索

    除了前面的精确搜索,我们还可以进行范围搜索

    语法: [ a TO b ], {a TO B}

    • []: 闭包区间,包含左边的值
    • {}: 开区间,不包含两边值
    • a/b 如果为 * 表示某一侧不限制范围

    实例演示,查询http状态码为 4xx 的case

    1
    http_code: [400 TO 499]

    除了上面这种写法,也可以使用 > <的方式,比如上面的写法等价

    1
    2
    // >=400之间不要加上空格
    http_code: (>=400 AND <=499)

    4.7 逻辑操作

    多条件组合,使用AND/OR来处理,这里的组合即可以表明多个field,也可以是一个field的多个value组合

    如多字段匹配:找出app-cn应用中状态码为500的记录

    1
    http_code:500 and server_name:app-cn

    如多value匹配:找出状态码为500, 503的记录

    1
    http_code: (500 OR 503)

    4.8 转移字符

    当查询条件中,包含下面字符中的一个时,需要使用注意

    • 特殊字符: + - = && || > < ! ( ) { } [ ] ^ " ~ * ? : \ /
    • 转义修饰: \/

    如url的查询时,通常会用到转义

    1
    url: \/get\/info

    5. 小结

    本文主要介绍Grafana中使用es数据源时,常见的语法操作,当然其中Lucence的部分,在kibana中也同样适用;

    通常来讲,在Grafana中,有下面几个地方会使用到上面的知识点

    变量配置时,使用第1,2,3节中的方式,过滤出下拉选项

    在大盘配置的Query输入框中,使用 Lucene 语法

    在Explore中使用Lucene语法

    参考博文:

    一灰灰的联系方式

    尽信书则不如无书,以上内容,纯属一家之言,因个人能力有限,难免有疏漏和错误之处,如发现bug或者有更好的建议,欢迎批评指正,不吝感激

    QrCode

    评论

    Your browser is out-of-date!

    Update your browser to view this website correctly. Update my browser now

    ×