• filebeat 提取获取massage字段 利用pipeline grok 7.12


    嘴巴会说(情商)比技术有时候更重要!

    水平有限,希望你看完有所收获!

    背景

    1,filebeat直连Elasticsearch,需要对massage提取一些特定的字段。

    2,如果你对数据需要处理的比较多还是建议用logstash,logstash更强大一些。

    pipeline 简单介绍

    pipeline 我最开始了解的时候是使用jenkins的时候,即交付流水线。

    平时写的jenkinsfile就是用的pipeline。

    我理解的pipeline就是把你在界面上配置的自动化变成代码脚本。即Pipeline as Code。

    一、原始massage

    原始的日志内容如下,

    我需要提取:4975481caf96a734bdb300acc118b5b5

    2021-06-17 20:50:39|ERROR|4975481caf96a734bdb300acc118b5b5|1623934239.079|20003|user service error|/var/www/html/vendor/mdp/java-client/src/JavaClientResponse.php

    二、操作

    想要使用filebeat提取massage字段

    1,得先在es里面创建一个pipeline脚本。

    2,配置filebeat使用es的pipeline脚本。

    2.1 创建pipeline.json文件

    就是随便在linux目录创建一个文件。

    文件名称随便起,后期能找到就行。方便以后做更改。
    vim extract-traceid-pipeline.json
    {
      "description" : "extract-traceid-pipeline",    # 描述,可以描述一下这个pipeline的作用
      "processors" : [
        {
          "grok" :{            # grok 语法
            "field" : "message",    # 需要对你采集的信息的哪个字段进行处理。其实就是filebeat采集完一条日志之后 来执行这个处理。你可以对采集的任何字段的值进行处理
            "patterns" : ["ERROR\|%{DATA:trace_id}\|"]    # 这个就是从message信息中提取信息的语法了。
          }
        }
      ]
    }
    
    # [""] 这个是固定写法,里面的才是正则
    # 2021-06-17 20:50:39|ERROR|4975481caf96a734bdb300acc118b5b5|1623934239.079......
    # 提取4975481caf96a734bdb300acc118b5b5,可以看到这段数据之前的是ERROR|
    # 那我前面就写ERROR\| |需要转义但是es也需要转义一层,所以就是两个\
    # %{} 这个是固定的写法,就是你想要提取哪个信息然后 使你提取出来的信息成为一个字段key:value。
    # DATA 是grok的语法,内置字段类型,比如
                                   DATE:表示你提取的信息是日期
                                   NUMBER:表示为数值
                                   DATA:表示为字符串
                                   IP:表示为一个ip地址
                                   你在这标识的类型会在kibana上面把key的类型标识出来。
    # :trace_id 这个表示你给 你提取出来的信息定义一个Key的名称,比如
                                   trace_id:4975481caf96a734bdb300acc118b5b5
                                   到时候你收集到的这条日志信息里面就会多出这一个字段
                                   你在kibana就能搜索到。
                                   这个名称你随便定义就行。

    2.2 将json文件传到es

    在你json文件所在的目录执行
    curl -H "Content-Type: application/json" -XPUT 'http://192.168.31.61:9200/_ingest/pipeline/extract-traceid-pipeline' -d@extract-traceid-pipeline.json
    
    # extract-traceid-pipeline 这个名称你可以随便起,但是在filebeat配置的时候需要写这个名称
    # extract-traceid-pipeline.json 这个就是你自己的json文件

    2.3 查看pipeline脚本

    可以看到es里面有我们上传的pipeline规则了

    访问:http://192.168.31.61:9200/_ingest/pipeline,我没安装google浏览器json插件。安装一个就格式化了。

    还有就是可以用kibana的开发工具看到:

    2.4 filebeat配置

    # 编辑filebeat.yml配置文件
    
    output.elasticsearch:
      hosts: ["192.168.31.61:9200","192.168.31.62:9200","192.168.31.63:9200"]
      pipelines:                                  # pipelines 就是你下面可以放多个pipeline
        - pipeline: "extract-traceid-pipeline"    # 这个名称就是你curl put到es里面 你后面写的那个名称
          when.contains:                          # 这里是一个filebeat的配置语法,可以看看filebeat的官方文档,大致的意思就是if 条件判断
            log_topics: "php-errlogs"             # 就是当log_topics:"php-errlogs" 的时候才用这个pipeline 
            
            
       # when 就是if
       # contains 就是 包含的意思 还有其他的比如:and,or,not,equals(必须相等)

    2.5 查看数据

    可以直接查看es数据,也可以去kibana上面看。收集的数据里面就会多出一个字段。

    三、grok在线调试工具

    https://www.5axxw.com/tools/v2/grok.html

    水平有限!抱拳  抱拳  抱拳

    大家可以看我的另一篇文章,elk的,实际运用pipline:https://www.cnblogs.com/fanfanfanlichun/p/14917736.html

  • 相关阅读:
    时间好快,转眼又一周
    八月第二周
    八月第一周
    经济学人:埃航失事:波音信誉遭到危机(2)
    1109. 航班预订统计 --前缀和 和差分
    99. 激光炸弹 --前缀和+暴力 + 动态规划
    1108. Defanging an IP Address
    【mybatis】学习笔记 3动态语句 foreach generator使用【 小心生成系统中的数据库 如uesr表 country表】
    【mybatis】学习笔记 2 动态代理 输入输出参数 关联查询
    【JSP学习笔记】1jsp入门
  • 原文地址:https://www.cnblogs.com/fanfanfanlichun/p/14977166.html
Copyright © 2020-2023  润新知