更改字段属性

Changing field properties

我正在使用 packetbeat 监控 3306 上的 mysql 端口,它工作得很好。 我可以轻松地在发现选项卡上搜索任何单词。例如

method:SET

这按预期工作。但是如果我把它改成

query:SET

那么它不会 return 查询字段中包含单词 "SET" 的文档。查询字段的索引是否不同? 如何使 "query" 字段可搜索?


更新:

这是因为参数 "ignore_above" 用于所有字符串字段吗?我使用 API...

检查了映射
GET /packetbeat-2018.02.01/_mapping/mysql/

如何取消此限制并使所有未来的节拍成为索引查询字段?


更新 2:

如果我在基于 "query" 字段的搜索中提及整个字符串,它会按预期工作...

query:"SELECT name, type, comment FROM mysql.proc WHERE name like 'residentDetails_get' and db <=> 'portal' ORDER BY name, type"

这 return 是过去 15 分钟内的所有 688 条记录。当我搜索以下内容时,我希望得到更多...

query:"SELECT"

但是我没有得到一条记录。我猜这是因为文档的索引方式。我更愿意取回 SQL 的等价物:像 '%SELECT%'

这样的查询

packetbeat的查询字段声明为"keyword"。因此,您只能搜索整个查询。例如

query: "select * from mytable"

但是如果我们需要搜索 query: "mytable" 怎么办? 您需要通过修改 fields.yml 文件使查询字段可搜索。将 type:text 参数添加到在 /etc/packetbeat

中找到的 fields.yml 文件的 MySQL 部分的查询字段

文件的相关部分将如下所示...

- name: query
  type: text
  description: >
    The query in a human readable format. For HTTP, it will typically be
    something like `GET /users/_search?name=test`. For MySQL, it is
    something like `SELECT id from users where name=test`.

考虑到字段的查询和映射,这是正确的行为。这与 1024 的限制无关。您可以省略 query: 部分,以便 Elasticsearch 将使用 _all 字段(将在不久的将来删除),但这里取决于您使用的 Stack 版本。

或者,更好更正确的方法是在 packetbeat 模板中以不同方式配置查询字段(以便下一个索引将使用新映射)如下所示:

    "query": {
      "type": "text",
      "fields": {
        "raw": {
          "type": "keyword",
          "ignore_above": 1024
        }
      }
    }

主要思想是 ES 不拆分查询字段中的值(因为它是 keyword),您需要一种方法来执行此操作。您可以使用通配符,但 ES 不喜欢它们(尤其是前导通配符),并且当 运行 这样的查询时您可能会遇到性能问题。 "correct" 从 ES 的角度来看的方法是我已经提到的方法:对字段进行分析,保留它的原始版本(用于排序和聚合)和它的简单版本用于搜索。