如何在 Logstash 中获取部分 Filebeat 源文件名

2024-01-09

我有一个 Filebeat 实例(版本 7.5.0,在 Windows Server 上运行)监视本地文件夹中的日志文件,并将这些数据向前发送到 Logstash(版本 7.5.0,在 Docker 容器中运行)。在 Logstash 中,我想提取其中一个文件夹名称(最后一个)并将其添加为字段。

一个具体的例子是,两个日志条目,一个来自文件d:\\Logs\\Foo\\Bar\\lorem\\currentlog.txt以及文件中的一份d:\\Logs\\Foo\\Bar\\ipsum\\currentlog.txt,我想提取值lorem and ipsum分别。

为此,我设置了以下(简化示例):

input {
    pipeline { address => "test" }
}

filter {
    grok {
        match => { "source" => ".*\\\\.*\\\\(?<product>.*)\\\\.*" }
    }
}

output {
    stdout { codec => rubydebug }
}

我已经测试了用于查找匹配项的正则表达式(名为product)在源字段的几个地方(都格罗克构造函数 http://grokconstructor.appspot.com/do/match, 格罗克调试 https://grokdebug.herokuapp.com/ and rubular https://rubular.com/),它们似乎都产生了所需的结果:我得到了产品的命名匹配与路径中最后一个文件夹的执行值。

但是,当我使用上述管道配置运行 Logstash 时,它无法提取文件夹名称并将其值放入产品字段中。相反,我看到一个标签被添加到logstash输出中,其值是grokparsefailure,说明我的grok表达有问题。但我在上述引用的工具中进行的所有测试都表明我的表达没有任何问题......

完整的 Logstash 输出如下所示:

{
    "@version" => "1",
    "tags" => [
        [0]"beats_input_codec_plain_applied",
        [1]"_grokparsefailure"
    ],
    "host" => {
        "name" => "test"
    },
    "message" => "Another line in the log",
    "agent" => {
        "id" => "e00d2f50-b10c-406a-a4fa-be381d15b869",
        "ephemeral_id" => "28dfe105-b936-40de-bc97-16c4a9196e30",
        "hostname" => "my-host",
        "name" => "test",
        "type" => "filebeat",
        "version" => "7.5.0"
    },
    "@timestamp" => 2019 - 12 - 16T14: 04: 09.064Z,
    "ecs" => {
        "version" => "1.1.0"
    },
    "log" => {
        "file" => {
            "path" => "d:\\Logs\\Foo\\Bar\\ipsum\\currentlog.txt"
        },
        "offset" => 21
    },
    "input" => {
        "type" => "log"
    }
}

我尝试将比赛更改为log.file.path财产,但这给了我同样的_grokparsefailure tag.

我也很确定这适用于早期安装的 Filebeat/Logstash(可能是一两个主要版本),但我记不清了。

所以问题是:为什么 Logstash 无法从 Filebeat 源中提取文件夹名称?有没有办法可以进一步调试这个 grok 问题?


上述配置不起作用的原因是复合的,但我最终设法弄清楚了:

首先,没有source来自 Filebeat 的字段(我很确定以前有一些版本,但这是一个不同的故事),这显然会导致 grok 过滤器不成功。

接下来,当我尝试去探索时log.file.path字段,我使用了错误的语法。访问嵌套字段的正确方法如下:[log][file][path]

最后,即使输出显示的值log.file.path to be "d:\\Logs\\Foo\\Bar\\ipsum\\currentlog.txt",双反斜杠显然是添加在输出管道的某处。因此,当我更改正则表达式以匹配单反斜杠而不是双反斜杠时,它正确地提取ipsum from "d:\Logs\Foo\Bar\ipsum\currentlog.txt"

我的最终管道配置如下所示:

input {
    pipeline { address => "test" }
}

filter {
    grok {
        match => { "[log][file][path]" => ".*(\\|\/).*(\\|\/)(?<product>.*)(\\|\/).*"}
    }
}

output {
    stdout { codec => rubydebug }
}

现在我成功获取了提取到的路径中最后一个文件夹的名称product场,没有_grokparsefailure tag.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 Logstash 中获取部分 Filebeat 源文件名 的相关文章

  • Logstash不处理filebeat发送的文件

    我已经使用 docker 设置了 elk 堆栈基础设施 我看不到 Logstash 正在处理的文件 Filebeat 配置为将 csv 文件从logstash 发送到logstash 再发送到elasticsearch 我看到logstas
  • 如何实现logstash配置的单元或集成测试?

    使用logstash 1 2 1 人们现在可以有条件地做各种事情 如果管理许多日志文件并实现指标提取 即使是早期版本的 conf 文件也会变得复杂 看完之后这个全面的 http untergeek com 2013 09 11 gettin
  • Logstash:如何将文件名添加为字段?

    我使用 Logstash Elasticsearch Kibana 来概览我的 Tomcat 日志文件 对于每个日志条目 我需要知道它来自的文件的名称 我想将其添加为字段 有办法做到吗 我用谷歌搜索了一下 只发现这个问题 https sta
  • 如何在 Logstash 中获取部分 Filebeat 源文件名

    我有一个 Filebeat 实例 版本 7 5 0 在 Windows Server 上运行 监视本地文件夹中的日志文件 并将这些数据向前发送到 Logstash 版本 7 5 0 在 Docker 容器中运行 在 Logstash 中 我
  • 如何保持 Logstash 运行以便将数据从 RDBMS 同步到 ES?

    我是 ELK 堆栈的新手 所以请原谅我的无知 我已经能够让 Logstash 将数据从我的数据库发送到 Elasticsearch 但传输完成后它就会退出 我如何保持它运行以使它们保持同步 谢谢 您需要指定一个schedule https
  • Logstash grok 过滤器配置用于 php monolog 多行(stacktrace)日志

    2018 02 12 09 15 43 development WARNING home page 2018 02 12 09 15 43 development INFO home page 2018 02 12 10 22 50 dev
  • 运行多个实例时无法启动logstash - path.data 设置

    你好 我是 ELK 堆栈内部的新手 在后台运行一个logstash进程 当它找到匹配的文件模式时 它如下所示 我想了解这里的重要性是什么path data选项 请帮帮我 FATAL logstash runner Logstash coul
  • kafka 主题中的唯一消息检查

    我们使用 Logstash 希望从 Oracle 数据库读取一张表并将这些消息 如下所示 发送到 Kafka Topic1 message1 name name 1 id fbd89256 12gh 10og etdgn1234njF si
  • 在logstash中使用grok解析多行JSON

    我有一个 JSON 格式 SOURCE Source A Model ModelABC Qty 3 我正在尝试使用 Logstash 解析此 JSON 基本上我希望logstash 输出是一个键 值对列表 我可以使用kibana 进行分析
  • 如何使用 Kibana 3 创建价值随时间变化的图表?

    我使用 Logstash 来存储包含车辆随时间变化的速度的日志文件 在 Kibana 3 中 如何生成一个显示随时间变化的值的面板 即 x 轴显示时间 y 轴显示相关值 例如车辆速度 我发现的大多数面板都会计算给定时间范围内事件的发生次数并
  • 删除包含哈希字符的日志行

    在我的 Logstash 发货程序中 我想过滤掉用哈希字符注释的行 This log row should be dropped But one this should not 我能够使用grep过滤器 但由于不鼓励 即将退役 我试图获得一
  • Docker-compose 链接与 external_links

    我相信这是一个简单的问题 但我仍然没有从 Docker compose 文档中得到它 链接和外部链接有什么区别 我喜欢 external links 因为我想要核心 docker compose 并且我想在不覆盖核心链接的情况下扩展它 我到
  • 无法执行操作:action=>LogStash::PipelineAction::Create/pipeline_id:main

    我已在 CentOS7 VM 上安装了 ELK 堆栈版本 7 0 0 但在 Logstash 服务启动期间遇到了问题 错误 2019 05 13 08 21 37 359 Converge PipelineAction Create 代理
  • 如何使用logstash插件-logstash-input-http

    我正在探索 Logstash 以接收 HTTP 上的输入 我已经使用以下方式安装了 http 插件 插件安装logstash input http 安装成功 然后我尝试使用以下命令运行logstash Logstash e 输入 http
  • Logstash 创建和访问数组

    我想在用于设备的 Logstash 配置文件中创建一个数组 然后通过我正在创建的新字段访问该数组值 例子 filter array devicetype gt Cisco ASA Cisco 3750 mutate add field gt
  • 用于自定义日志的 Logstash Grok 过滤器

    我有两个相关问题 第一个是如何最好地处理具有 混乱 间距等的日志 第二个 我将单独询问 是如何处理具有任意属性值对的日志 看 Logstash Grok 过滤器用于具有任意属性值对的日志 https stackoverflow com qu
  • 将旧日志从 filebeat 重新发送到logstash

    在此先感谢您的帮助 我想重新加载一些日志来自定义其他字段 我注意到 filebeat 配置中的注册表文件会跟踪已选择的文件 但是 如果我删除该文件中的内容 我将无法恢复旧日志 我还尝试更改注册表文件中源的时间戳 但没有成功 将旧日志从 fi
  • 在logstash中使用docker GELF驱动程序env/labels

    Docker GELF 日志驱动程序允许env and labels日志选项 gelf 日志记录驱动程序支持 lab els 和 env 选项 它添加了额外的密钥extra字段 以下划线 为前缀 ref https docs docker
  • Logstash 错误 Java::JavaLang::NoClassDefFoundError 无法解决

    我是elasticsearch ES 和logstash 的新手 我已经使用它成功设置了elasticsearch和kibanalink https www youtube com watch v hVgrXi 9L6Y 之后我尝试使用lo
  • 按字段关联 ELK 中的消息

    相关 在ELK中合并日志和查询 https stackoverflow com questions 28429607 combine logs and query in elk 我们正在设置 ELK 并希望在 Kibana 4 中创建可视化

随机推荐