elasticsearch 如何在Kibana中创建数字字段(从字符串),elasticsearch,kibana,elastic-stack,elasticsearch,Kibana,Elastic Stack" /> elasticsearch 如何在Kibana中创建数字字段(从字符串),elasticsearch,kibana,elastic-stack,elasticsearch,Kibana,Elastic Stack" />

elasticsearch 如何在Kibana中创建数字字段(从字符串)

elasticsearch 如何在Kibana中创建数字字段(从字符串),elasticsearch,kibana,elastic-stack,elasticsearch,Kibana,Elastic Stack,我继承了一个用于日志的ELK堆栈,我仍在学习诀窍——我的任务是在我们的日志存储索引的特定类型上创建两个数值字段。我似乎不知道该怎么做。我尝试过的事情: 在Kibana设置页面中,转到我的日志存储索引并找到该字段。转到“控件”选项卡上的“编辑”,将类型列为字符串(并且它是不可变的)。格式下拉列表显示URL和字符串 转到我的一个Elasticsearch主机,找到文档类型的grok规则,发现它们确实是用来将字段解析为数字的。示例:%{NUMBER:response\u code} 我没有主意了,因为

我继承了一个用于日志的ELK堆栈,我仍在学习诀窍——我的任务是在我们的日志存储索引的特定类型上创建两个数值字段。我似乎不知道该怎么做。我尝试过的事情:

  • 在Kibana设置页面中,转到我的日志存储索引并找到该字段。转到“控件”选项卡上的“编辑”,将类型列为字符串(并且它是不可变的)。格式下拉列表显示URL和字符串
  • 转到我的一个Elasticsearch主机,找到文档类型的grok规则,发现它们确实是用来将字段解析为数字的。示例:
    %{NUMBER:response\u code}
  • 我没有主意了,因为我不知道怎么对付麋鹿
  • 非常感谢您的任何帮助,特别是相关文档的链接,以便我了解发生了什么。如果我知道用谷歌搜索什么,我会更努力地用谷歌搜索。

    你需要这样做。由于此字段的Elasticsearch映射(即模式)已设置为
    string
    ,因此您将无法在同一索引中将数据作为
    整数
    索引

    典型的麋鹿设置会创建滚动索引(每天或每月),因此可以在索引之间从
    字符串切换到
    整数,但不建议这样做,因为这会干扰长期聚合和搜索

    正如您所发现的,更改Grok规则将有助于处理未来的数据。现在,您需要再次通过Logstash传递所有现有数据以应用新的ryles

    为此,您可以再次传递日志文件,或者使用从Elasticsearch读取日志存储

    input {
      elasticsearch {
        hosts => "localhost"
      }
    }
    

    Elasticsearch的较新版本应该通过提供本机的
    reindex
    API来改进这一点。

    还请注意,
    %{NUMBER:response\u code}
    不会从字符串中生成数字,它只是识别和解析字符串中存在的数字,但生成的
    response\u code
    字段仍然是字符串,您需要使用。grok总是将一个字符串解析为其他较小的字符串,您的工作是将结果字段转换为您期望的类型

    因此,您需要在grok筛选器之后添加以下内容:

      mutate {
        convert => { "response_code" => "integer" }
      }
    
    从那时起,事件中的
    response\u code
    将是一个整数,用于创建每日日志存储索引的包含整数字段的特定动态模板。请注意,
    response\u code
    字段将是一个整数,只有在创建新的日志存储索引后,现有索引才会更改

  • 尝试查看文档示例:

    curl-XGET'localhost:9200/_search?q=opcode:userLessonComplexityPoll&pretty'

  • 假设您看到这些文档:

    { “_索引”:“我的索引”, “_类型”:“日志”, “_id”:“AWNoYI8pGmxxeL6jupEZ”, “_分数”:1.0, “_来源”:{ “生产”:“0”, “莱索尼德”:“2144”, “操作码”:“userLessonComplexityPoll”, “courseId”:“45”, “lessonType”:“迷你测试”,

  • 因此,请尝试在一个文档中转换:

    curl-XPOST'localhost:9200/educa\u stats-*/\u update\u by\u query?pretty'-d' { “脚本”:{ “郎”:“无痛”, “source”:“if(ctx.\u source.lessonId instanceof String){int-lessonId=Integer.parseInt(ctx.\u source.lessonId);ctx.\u source.lessonId=(int)lessonId;}” }, “查询”:{ “布尔”:{ “条款”:{ “_id”:[“AWNoYI8pGmxxeL6jupEZ”,“AWMcRJYFGmxxeL6jucIZ”] } } } }"

  • 成功?尝试按查询转换所有文档:

    curl -XPOST 'localhost:9200/educa_stats-*/_update_by_query?pretty' -d '
    
    { “脚本”:{ “郎”:“无痛”, “source”:“if(ctx.\u source.lessonId instanceof String){int-lessonId=Integer.parseInt(ctx.\u source.lessonId);ctx.\u source.lessonId=(int)lessonId;}” }, “查询”:{ “布尔”:{ “必须”:[ { “存在”:{ “字段”:“lessonId” } } ] } } }"


  • 所有字段lessonId都将从字符串类型转换为int(-2^32-2^32)类型。仅此而已。

    这方面运气好吗?我遇到了类似的问题并添加了mutate筛选器,我可以在kibana中看到相应的日志消息,该消息(响应时间)是一个整数,但无法看到响应时间字段,同时试图通过可视化找到相同的平均值。我是否需要做任何其他事情才能获得此字段的平均值并在仪表板中显示它?P.S.-为了重新编制索引,我刚刚在logstash.conf中编辑了索引名称。我是否必须再次从ES导入所有日志作为su上面是什么?