filebeat直连elasticsearch利用pipeline提取message中的字段

博客介绍了使用filebeat直连elasticsearch完成数据传输的方式。虽无logstash强大过滤功能,但因业务需求,仍需从原始数据中提取某些字段。具体步骤包括在/path/目录下建pipeline.json文件、上传规则到elasticsearch等,还给出了参考链接。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这里使用filebeat直连elasticsearch的形式完成数据传输,由于没有logstash,所有对于原始数据的过滤略显尴尬(logstash的filter非常强大)。 但是由于业务需求,还是需要将message(原始数据)中的某些字段进行提取,具体方式如下:

1. /path/目录下建立pipeline.json文件
{
  "description" : "test-pipeline",
  "processors" : [
    {
      "grok" :{
        "field" : "message",
        "patterns" : ["%{DATA:puid}\\\t%{DATA:datatime}\\\t\\\t%{DATA:content}"]
      }
    }
  ]
}
2. 将规则上传至elasticsearch中
curl -H "Content-Type: application/json" -XPUT 'http://localhost:9200/_ingest/pipeline/test-pipeline' -d@/path/pipeline.json

3. filebeat.yml中
filebeat.prospectors:
 ******
 ******
output.elasticsearch:
  hosts: ["localhost:9200"]
  # 加入如下行:
  pipeline: "test-pipeline"
4. 测试数据
f1b25095cc823e63389ff299622b7e85    2019/02/27 03:38:54     send packet! opcode:3 message is in lua8282
f1b25095cc823e63389ff299622b7e85    2019/02/27 03:38:54     PacketManager::_onReceivedPacket opcode:3 size:27,rec_len:278282
5. elasticsearch中数据结果
[
    {
        "_score":1,
        "_type":"doc",
        "_id":"zWmLj2kB7ah0Pw2MmQGw",
        "_source":{
            "datatime":"2019/02/27 03:38:54",
            "log":{
                "file":{
                    "path":"/path/test_1.log"
                }
            },
            "beat":{
                "hostname":":",
                "name":":",
                "version":"6.6.1"
            },
            "@timestamp":"2019-03-18T06:44:43.224Z",
            "host":{
                "name":":"
            },
            "content":"",
            "source":"/path/test_1.log",
            "puid":"f1b25095cc823e63389ff299622b7e85",
            "offset":0,
            "input":{
                "type":"log"
            },
            "message":"f1b25095cc823e63389ff299622b7e85 2019/02/27 03:38:54 send packet! opcode:3 message is in lua",
            "prospector":{
                "type":"log"
            }
        },
        "_index":"test"
    },
    {
        "_score":1,
        "_type":"doc",
        "_id":"0GmLj2kB7ah0Pw2MmQGw",
        "_source":{
            "datatime":"2019/02/27 03:38:54",
            "log":{
                "file":{
                    "path":"/path/test_1.log"
                }
            },
            "beat":{
                "hostname":":",
                "name":":",
                "version":"6.6.1"
            },
            "@timestamp":"2019-03-18T06:44:43.224Z",
            "host":{
                "name":":"
            },
            "content":"",
            "source":"/path/test_1.log",
            "puid":"f1b25095cc823e63389ff299622b7e85",
            "offset":318,
            "input":{
                "type":"log"
            },
            "message":"f1b25095cc823e63389ff299622b7e85 2019/02/27 03:38:54 PacketManager::_onReceivedPacket| ReceivedPacket size:27",
            "prospector":{
                "type":"log"
            }
        },
        "_index":"test"
    }
]
参考:
  1. https://note.yuchaoshui.com/blog/post/yuziyue/filebeat-use-ingest-node-dealwith-log-then-load-into-elasticsearch
  2. http://www.axiaoxin.com/article/236/
  3. https://blog.youkuaiyun.com/spring_ming/article/details/62232331

转载于:https://www.cnblogs.com/remainsu/p/filebeat-zhi-lianelasticsearch-li-yongpipeline-ti-.html

<think>好的,用户现在想了解Elasticsearch的Ingest Pipeline。之前他们问过数据一致性的问题,可能是在实际使用ES时遇到了数据处理的需求。现在需要深入理解Ingest Pipeline的功能和用法,可能是在数据摄入前需要进行预处理。 首先,我需要确定用户的使用场景。他们可能在将数据导入ES之前,需要对数据进行转换、丰富或清洗。比如,日志处理、字段提取、格式转换等。Ingest Pipeline正是用于这种场景,可以在数据索引之前处理文档。 接下来,用户可能的身份是开发人员或者运维人员,负责数据摄入流程。他们需要知道如何配置Pipeline,有哪些处理器可用,以及如何应用到索引中。此外,用户可能关心如何调试Pipeline,处理错误,以及性能优化。 用户的需求不仅仅是了解基本概念,而是详细的工作原理和使用方法,包括实际例子。需要覆盖核心概念、常见处理器、创建和管理Pipeline的步骤、错误处理、性能优化,以及实际应用场景。 需要确保回答结构清晰,分点说明,每个部分有示例,比如JSON配置或命令行操作。同时,要避免使用Markdown,用自然的中文口语化表达,但保持专业性。还要注意之前用户提到的格式要求,比如数学公式用$...$,但在这个问题中可能涉及较少,但如果有的话要正确应用。 另外,用户可能想知道Ingest Pipeline和Logstash的区别,是否需要结合使用,或者何时选择哪一种。这可能需要在最佳实践部分提到,帮助用户做出决策。 最后,确保回答准确,涵盖版本信息,比如ES 5.0+支持,避免用户在使用旧版本时遇到问题。检查是否有遗漏的重要功能,如条件判断、异常处理等,确保全面性。</think>以下是关于Elasticsearch Ingest Pipeline的完整技术解析,涵盖核心概念、工作原理、应用场景及最佳实践: --- ### 一、**基础概念** #### 1. **定义** - **数据预处理管道**:在文档被索引(_index)前执行的**数据加工流水线** - **非侵入式处理**:不修改原始数据源,仅影响ES存储的文档形态 - **版本要求**:ES 5.0+ 原生支持 #### 2. **核心优势** - **轻量化**:替代Logstash Filter的轻量级方案 - **实时性**:与索引操作同步执行 - **低延迟**:处理过程发生在协调节点,无需额外跳转 --- ### 二、**核心架构** ```mermaid flowchart TD A[原始文档] --> B{是否存在Pipeline?} B -->|是| C[执行Processor链] B -->|否| D[入索引] C --> E[生成最终文档] E --> D ``` --- ### 三、**核心处理器(Processor)分类** #### 1. **字段操作类** - `set`:添加/覆盖字段 ```json { "set": { "field": "service_type", "value": "web_server" } } ``` - `remove`:删除字段 - `rename`:字段重命名 #### 2. **内容转换类** - `convert`:类型转换(字符串↔数值) - `gsub`:正则替换 ```json { "gsub": { "field": "error_msg", "pattern": "\\d+", "replacement": "[REDACTED]" } } ``` #### 3. **结构处理类** - `split`:字符串分割为数组 - `join`:数组合并为字符串 - `json`:解析JSON字符串为结构化对象 #### 4. **流程控制类** - `if`:条件判断执行 ```json { "if": { "condition": "ctx.status == '404'", "then": [ { "set": { "field": "is_error", "value": true }} ] } } ``` - `foreach`:数组元素遍历处理 #### 5. **高级功能类** - `geoip`:IP转地理位置 - `user_agent`:解析UA信息 - `pipeline`:嵌套子管道 --- ### 四、**完整配置示例** ```json PUT _ingest/pipeline/log_processing { "description": "Web日志处理流水线", "processors": [ { "json": { "field": "message", "target_field": "parsed_log" } }, { "remove": { "field": "message" } }, { "date": { "field": "parsed_log.timestamp", "target_field": "@timestamp", "formats": ["ISO8601"] } }, { "user_agent": { "field": "parsed_log.user_agent", "target_field": "device_info" } } ] } ``` --- ### 五、**应用场景** #### 1. **数据规范化** - 时间戳统一格式化 - 字段类型强制转换 #### 2. **数据增强** - 添加地理坐标(geoip) - 解析用户设备信息(user_agent) #### 3. **敏感数据处理** - 信用卡号脱敏 - PII信息过滤 #### 4. **结构优化** - 嵌套JSON展开 - 冗余字段删除 --- ### 六、**执行方式** #### 1. **索引时绑定** ```bash PUT my-index/_doc/1?pipeline=log_processing { "message": "{\"timestamp\":\"2023-07-20T08:00:00Z\",\"ip\":\"8.8.8.8\"}" } ``` #### 2. **索引默认管道** ```json PUT my-index/_settings { "index.default_pipeline": "log_processing" } ``` #### 3. **批量请求指定** ```json POST _bulk { "index" : { "_index" : "my-index", "pipeline" : "log_processing" }} { "message": "..." } ``` --- ### 七、**调试与验证** #### 1. **模拟测试API** ```bash POST _ingest/pipeline/log_processing/_simulate { "docs": [ { "_source": { "message": "{\"timestamp\":\"2023-07-20T08:00:00Z\",\"ip\":\"8.8.8.8\"}" } } ] } ``` #### 2. **错误处理机制** - `ignore_failure`:跳过处理器错误 ```json { "gsub": { "field": "credit_card", "pattern": "\\d{12}(\\d{4})", "replacement": "****-****-****-$1", "ignore_failure": true } } ``` - `on_failure`:自定义错误处理 ```json "on_failure": [ { "set": { "field": "error_message", "value": "{{ _ingest.on_failure_message }}" } } ] ``` --- ### 八、**性能优化建议** 1. **处理器顺序优化** - 先执行过滤操作(如`remove`),减少后续处理的数据量 - 高消耗处理器(如`geoip`)尽量靠后 2. **资源控制** ```yaml # elasticsearch.yml ingest.memory.max_in_flight: 100mb # 控制内存使用 ``` 3. **缓存利用** - `geoip`处理器自动缓存数据库文件 - `user_agent`正则表达式预编译 --- ### 九、**与Logstash对比** | 特性 | Ingest Pipeline | Logstash Filter | |---------------------|-------------------------|-----------------------| | 资源消耗 | 低(无独立进程) | 中等 | | 处理延迟 | 亚秒级 | 毫秒级 | | 功能复杂度 | 基础数据处理 | 支持复杂ETL | | 适用场景 | 简单实时预处理 | 复杂离线数据处理 | --- ### 十、**最佳实践** 1. **版本兼容性** - 生产环境统一ES版本(不同版本的处理器参数可能变化) 2. **监控指标** ```bash GET _nodes/stats/ingest # 重点关注:failed, time_in_millis ``` 3. **安全限制** - 禁用`script`处理器时: ```yaml ingest.pipeline.default_processors: [ "set", "remove" ] ``` --- ### 总结 Ingest Pipeline通过**处理器链式处理**实现数据预加工,核心价值在于: - **降低系统复杂性**:减少外部处理环节 - **提升处理时效性**:数据落地即完成标准化 - **灵活扩展能力**:200+内置处理器覆盖常见场景 建议将处理逻辑分解为多个小型管道,通过`pipeline`处理器实现模块化组合,同时配合完善的监控告警体系保障数据处理可靠性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值