【问题标题】:Logstash mutate filter gsub nested fieldLogstash 变异过滤器 gsub 嵌套字段
【发布时间】:2021-06-07 07:35:03
【问题描述】:

我正在尝试在将 logstash 中的一些电子邮件发送到 ES 之前对其进行过滤。

我有一个字段仍然包含电子邮件地址,并且无法通过 mutate 过滤器对其进行 gsub。

mutate {
    gsub => [
        "log", "[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,6}", "--- FILTERED FROM LOGS ---",
        "message", "[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,6}", "--- FILTERED FROM LOGS ---"
            ]
        }

JSON:

{
  "_index": "logs-2021.03.09.11",
  "_type": "doc",
  "_id": "sdfsdf",
  "_version": 1,
  "_score": null,
  "_source": {
    "source": "stderr",
    "@timestamp": "2021-03-09T11:39:38.413Z",
    "kubernetes": {
      "namespace": "sdfsdk",
      "labels": {
        "pod-template-hash": "sdfsdf",
        "app": {
          "softwear": {
            "co/name": "sdfsd",
            "co/domain": "sdfsdf"
          }
        },
    "log": {
      "extra_fields": {
        "ctxt_response": "{\"records_id\":[{\"ext_id\":\"sdfsdf\",\"fcc_id\":sdfsdfsd,\"external_id\":\"sdfsdf\"}],\"success\":true}",
        "requestDevice": "\"\"",
        "ctxt_request": "{\"hash\":\"56kdfhsdfjshdkf\",\"change\":\"sdsd\",\"campaigns_id\":114,\"method\":\"sha1\",\"login\":\"test\",\"records\":[{\"emails\":[\"email-to-delete@gmail.com\"],\"external_id\":\"sdsdK\"}]}",
        "ctxt_response_code": "200"
      },

我怎样才能得到嵌套字段并 gsub 呢? [日志][额外字段][ctxt_request]

【问题讨论】:

    标签: regex filter logstash gsub


    【解决方案1】:

    试试这个:

    mutate {
        gsub => [
            "[log][extra_fields][ctxt_request]", "[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,6}", "--- FILTERED FROM LOGS ---",
            "message", "[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,6}", "--- FILTERED FROM LOGS ---"
        ]
    }
    

    我还注意到您的正则表达式可能有所改进:

    • [A-Za-z0-9._%+-]
    • [A-Za-z0-9\._%+-](转义点 . 字符 - 您需要在 @ 的两侧执行此操作)

    您可能还想查看使用JSON Filter Plugin 来解析ctxt_request 字段 - 然后您可以只覆盖该子字段的内容而不使用gsub

    这是一个如何工作的示例。需要注意的是 a) 它尚未经过测试,b) 在 JSON 输出上执行 remove_field 可能不起作用(尽管如果成功解析了 JSON,则删除源字段将起作用),以及 c)您可能对如何构建字段有其他想法。

    json {
        source => "[log][extra_fields][ctxt_request]"
        target => "[log][extra_fields][parsed][ctxt_request]"
        remove_field => [
            "[log][extra_fields][ctxt_request]",
            # remove the field completely
            "[log][extra_fields][parsed][ctxt_request][records][emails]"
        ]
    }
    mutate {
        # or replace it with the text from your question
        replace => {
            "[log][extra_fields][parsed][ctxt_request][records][emails]" =>
            "--- FILTERED FROM LOGS ---"
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-03
      • 1970-01-01
      相关资源
      最近更新 更多