elasticsearch 读取日志存储级别的CSV,并根据提取的数据进行过滤,elasticsearch,logstash,elastic-stack,logstash-configuration,elk,elasticsearch,Logstash,Elastic Stack,Logstash Configuration,Elk" /> elasticsearch 读取日志存储级别的CSV,并根据提取的数据进行过滤,elasticsearch,logstash,elastic-stack,logstash-configuration,elk,elasticsearch,Logstash,Elastic Stack,Logstash Configuration,Elk" />

elasticsearch 读取日志存储级别的CSV,并根据提取的数据进行过滤

elasticsearch 读取日志存储级别的CSV,并根据提取的数据进行过滤,elasticsearch,logstash,elastic-stack,logstash-configuration,elk,elasticsearch,Logstash,Elastic Stack,Logstash Configuration,Elk,我使用Metricbeat获取过程级数据,并使用Logstash将其推送到弹性搜索 现在,目标是将流程分类为2个标记,即运行的流程要么是浏览器,要么是其他东西 我可以使用以下代码块静态地执行此操作: input { beats { port => 5044 } } filter{ if [process][name]=="firefox.exe" or [process][name]=="chrome.exe" { mutate {

我使用Metricbeat获取过程级数据,并使用Logstash将其推送到弹性搜索

现在,目标是将流程分类为2个标记,即运行的流程要么是浏览器,要么是其他东西

我可以使用以下代码块静态地执行此操作:


input {
  beats {
    port => 5044
  }
}
filter{
    if [process][name]=="firefox.exe" or [process][name]=="chrome.exe" {
        mutate {
            add_field => { "process.type" => "browsers" }
            convert => {
            "process.type" => "string"
            }
        }
    }
    else {
        mutate {
            add_field => { "process.type" => "other" }
        } 
    }
}

output {
  elasticsearch {
    hosts => "localhost:9200"
    # manage_template => false
    index => "metricbeatlogstash"
  }
}

但是,当我试图通过从CSV读取进程列表来使if条件动态化时,我在Kibana中没有得到任何有效的结果,也没有在日志存储级别上得到错误

CSV配置文件代码如下所示:

input {
  beats {
    port => 5044
  }
  file{
        path=>"filePath"
        start_position=>"beginning"
        sincedb_path=>"NULL"
    }
}
filter{
    csv{
        separator=>","
        columns=>["processList","IT"]
    }
    if [process][name] in [processList] {
        mutate {
            add_field => { "process.type" => "browsers" }
            convert => {
            "process.type" => "string"
            }
        }
    }
    else {
        mutate {
            add_field => { "process.type" => "other" }
        } 
    }
}

output {
  elasticsearch {
    hosts => "localhost:9200"
    # manage_template => false
    index => "metricbeatlogstash2"
  }
}

您试图做的事情在logstash中不起作用,logstash管道中的事件彼此独立

您的
beats
输入接收到的事件不知道您的
csv
输入接收到的事件,因此您不能在条件语句中使用来自不同事件的字段

要执行所需操作,可以使用以下配置的
translate
过滤器

translate {
    field => "[process][name]"
    destination => "[process][type]"
    dictionary_path => "process.csv"
    fallback => "others"
    refresh_interval => 300
}
此筛选器将对照从文件
process.csv
加载到内存中的字典检查字段
[process][name]
的值,字典是一个
.csv
文件,有两列,第一列是浏览器进程的名称,第二列始终是
浏览器

chrome.exe,browser
firefox.exe,browser

如果筛选器获得匹配,它将使用第二列中的值填充字段
[process][type]
(而不是
process.type
),在这种情况下,始终是
浏览器
,如果不匹配,它将使用
回退
配置的值填充字段
[process][type]
,在这种情况下,
其他
,它还将每隔300秒(5分钟)重新加载
process.csv
文件的内容

很棒的东西!此外,它还提供了在CSV中添加新条目(比如edge.exe?)的灵活性,并最迟在接下来的5分钟内将其拾取。