mutate使用(日志过滤)

文章介绍了Logstash中的mutate过滤器,用于日志事件字段的修改、删除和添加。通过示例展示了如何配合grok过滤器解析日志,然后使用mutate过滤掉无用字段,以实现日志数据的标准化,便于后续分析和存储。

1.前言

mutate 过滤器是Logstash中的一个常用过滤器,用于对事件中的字段进行修改、重命名、删除和添加操作。它提供了多种操作选项,如替换字段值、添加新字段、删除字段、重命名字段等。mutate 过滤器可以在事件流水线的任何阶段使用,且不需要匹配特定的模式,通常情况下,你可能需要先使用 grok 过滤器解析日志行并提取字段,然后使用 mutate 过滤器对提取的字段进行进一步处理或添加额外的字段。这样可以对日志数据进行解析、转换和标准化,以便后续的存储、分析和可视化操作

2.使用

先展示一下日志使用gork结构化后的情况

 这是未设置mutate过滤之前logstash输出的日志

tail -f  /opt/logstash/logstash/logstash.log

 

 我们在通过mutate过滤掉不需要的字段,编辑logstash配置文件

vi /opt/logstash/logstash/config/logstash.conf

input {
  beats {           #配置为beats,供filebeat调用
    port => 5044      #配置监听端口,用于接收filebeat传输过来的日志
    codec => "json"    #如果传输过来的是json格式日志则需要此项配置,否则就删掉此项配置
  }
}

filter {
  if [fields][topic] == "nginx-access-log" {
    grok {
      match => {
        "message" => "%{IP:ip} - (%{USERNAME:remote_user}|-) \[%{HTTPDATE:timestamp}\] \"%{WORD:request_method} %{URIPATHPARAM:request_url} HTTP/%{NUMBER:http_version}\" %{NUMBER:http_status} %{NUMBER:bytes} \"(%{DATA:referrer}|-)\" \"%{DATA:http_agent}\" \"(%{DATA:forwarded}|-)\""
      }
    }
    mutate {
      remove_field => ["message","timestamp","http_status","ip"] #过滤掉日志中的message、timestamp、http_status、ip字段
    }
  }
  else if [fields][topic] == "nginx-error-log" {
    grok {
      match => {
        "message" => "%{DATA:timestamp} \[%{WORD:severity}\] %{NUMBER:pid}#%{NUMBER:tid}: %{GREEDYDATA:prompt}"
      }
    }
    mutate {
      remove_field => ["message","timestamp"]  #过滤掉日志中的message和timestamp字段
    }
  }
}

output {
  stdout{
    codec => rubydebug   #将数据输出到日志中,用于测试
  }
#  elasticsearch {
#    hosts => ["http://10.1.60.114:9200","http://10.1.60.115:9200","http://10.1.60.118:9200"]
#    index => "%{[@metadata][kafka][topic]}-%{+YYYY.MM.dd}"
#  }
}

查看一下日志

tail -f  /opt/logstash/logstash/logstash.log

 对比上图未过滤前输出的日志可以发现,message、http_status、ip、timestamp这些字段已经被过滤掉了,并没有被logstash输出

对于mutate过滤还有其它的用法,这里就不展示案例了,只在以下展示一些如何配置

vi /opt/logstash/logstash/config/logstash.conf

input {
  file {
    path => "/path/to/your/logfile.log"
    start_position => "beginning"
  }
}

filter {
  grok {
    match => { "message" => "\[%{TIMESTAMP_ISO8601:timestamp}\] %{LOGLEVEL:loglevel}: User '%{USERNAME:username}' %{WORD:status} successfully." }
  }

  mutate {
    remove_field => ["message"]  # 删除原始日志行字段
    convert => {
      "timestamp" => "string"  # 将 timestamp 字段转换为字符串类型
    }
    gsub => [
      "username", "\.", "_"  # 将用户名中的点号替换为下划线
    ]
  }
}

output {
  stdout {
    codec => rubydebug
  }
}

以下是日志例子

[2023-07-01 10:30:15] INFO: User 'john.doe' logged in successfully.

<think>好的,我现在需要解决用户的问题:如何使用日志过滤器创建索引以及配置数据源。首先,我需要理解用户的具体需求。流日志通常指的是实时生成的数据流,比如服务器日志、网络流量日志等。用户可能希望对这些日志进行过滤,然后将处理后的数据存储到索引中,以便后续的快速查询和分析。 接下来,我应该考虑用户提到的“流日志过滤器”和“索引”的结合。根据提供的引用,特别是引用[2]中提到了Elasticsearch的索引管理和Filebeat的使用,可能用户的环境涉及Elastic Stack(ELK)。因此,推测用户可能在使用Elasticsearch、Logstash、Filebeat等工具。 首先,配置数据源方面,常见的做法是使用Filebeat来收集流日志数据。Filebeat可以监控指定的日志文件或流,然后将数据发送到Logstash或直接到Elasticsearch。用户需要配置Filebeat的输入和输出,指定日志路径以及目标地址。例如,在filebeat.yml中设置paths为日志文件的路径,输出到Logstash的地址和端口。 然后是过滤器的配置。Logstash在这里扮演重要角色,因为它提供了丰富的过滤器插件,如grok、mutate、date等,可以对日志数据进行解析和转换。用户需要根据日志格式编写grok模式,提取所需字段,并可能进行类型转换或删除无用字段。例如,使用grok匹配日志中的时间戳、日志级别、消息内容等。 接下来是创建索引部分。在Elasticsearch中,索引的创建可以通过Logstash自动完成,根据指定的索引模板或ILM(索引生命周期管理)策略。用户需要定义索引的名称模式,可能包含时间戳以便滚动更新。同时,可能需要配置索引的映射(mapping),确保字段类型正确,比如将时间字段设为date类型,数值字段设为integer或float等。引用[2]提到ILM和数据流管理,这可能涉及索引的生命周期,如热阶段、温阶段、冷阶段的配置,自动滚动和删除旧数据。 此外,用户可能还需要考虑性能优化,比如分片和副本的数量设置,以及使用布隆过滤器(如引用[3]提到的)来优化查询性能,减少缓存穿透问题。不过,布隆过滤器在这里可能更多用于查询时的优化,而不是索引创建阶段。 可能的实现步骤总结为: 1. 使用Filebeat收集流日志,配置输入和输出到Logstash。 2. 在Logstash中配置过滤器链,处理日志数据。 3. 定义Elasticsearch索引模板,设置映射和ILM策略。 4. 将处理后的数据发送到Elasticsearch,自动创建索引。 需要验证每个步骤的配置是否正确,比如Filebeat能否成功发送数据,Logstash的grok是否解析正确,Elasticsearch是否按模板创建索引。同时,用户可能需要查阅Elasticsearch和Logstash的官方文档,确保语法正确,特别是索引模板的JSON结构和Logstash配置文件的语法。 最后,用户可能需要测试整个流程,查看索引中的数据是否符合预期,是否能够高效查询。如果遇到问题,可能需要检查日志中的错误信息,如Filebeat或Logstash的日志,排查配置错误或网络连接问题。</think>要使用日志过滤器创建索引并配置数据源,可以按照以下步骤操作: --- ### **1. 配置数据源采集** **使用Filebeat收集流日志** - 安装Filebeat后,在`filebeat.yml`中配置输入和输出: ```yaml filebeat.inputs: - type: filestream paths: - /var/log/stream/*.log # 流日志路径 output.logstash: hosts: ["logstash-server:5044"] # 输出到Logstash ``` 通过此配置,Filebeat会将流日志实时发送到Logstash[^2]。 --- ### **2. 配置流日志过滤器** **在Logstash中实现过滤** 创建Logstash配置文件`logstash-filter.conf`: ```ruby input { beats { port => 5044 } } filter
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值