如何在Filebeat / ELK中为不同的日志定义分离的索引?

时间:2016-08-08 13:35:26

标签: elasticsearch logstash kibana elastic-stack filebeat

我想知道如何为抓取到logstash的不同日志创建分离的索引(后来传递到elasticsearch),以便在kibana中,我可以为它们定义两个索引并发现它们。

就我而言,我有一些客户端服务器(每个服务器都安装有filebeat)和一个集中式日志服务器(ELK)。每个客户端服务器具有不同种类的日志,例如redis.logpython日志,mongodb日志,我希望将它们分类到不同的索引中并存储在elasticsearch中。

每个客户端服务器也有不同的用途,例如:数据库,UI,应用程序。因此我也想给它们不同的索引名称(通过更改filebeat.yml中的输出索引?)。

4 个答案:

答案 0 :(得分:7)

在Filebeat配置中,您可以使用document_type来标识您拥有的不同日志。然后在Logstash中,您可以设置casper.clickWhileSelector = function(selector, i) { return this.then(function() { i = i || 1; selectorNth = selector+':nth-child(' + i + ')'; if (this.exists(selectorNth)) { this.echo('found link: '+this.getElementInfo(selectorNth).tag); this.click(selectorNth); return this.clickWhileSelector(selector, i+1); } return this.echo('Done.').exit(); }); } 字段的值来控制目标索引。

但是,在将日志分成不同的索引之前,应考虑将它们保留在单个索引中,并使用type或某些custom field来区分日志类型。请参阅index vs type

示例Filebeat prospector config:

type

Logstash配置示例:

filebeat:
  prospectors:
    - paths:
        - /var/log/redis/*.log
      document_type: redis

    - paths:
        - /var/log/python/*.log
      document_type: python

    - paths:
        - /var/log/mongodb/*.log
      document_type: mongodb

答案 1 :(得分:2)

在logstash中,您可以借助标记定义多个输入,过滤或输出插件:

input {
    file {
            type => "redis"
            path => "/home/redis/log"
    }
    file {
            type => "python"
            path => "/home/python/log"
    }
} 
filter {
    if [type] == "redis" {
            # processing .......
    }
    if [type] == "python" {
            # processing .......
    }
}
output {
    if [type] == "redis" {
            # output to elasticsearch redis
            index => "redis" 
    }
    if [type] == "python" {
            # output to elasticsearch python
            index => "python"
    }
}

答案 2 :(得分:1)

filebeat.yml

filebeat.prospectors:

- input_type: log
    paths:
    - /var/log/*.log
  fields: {log_type: toolsmessage}


- input_type: log
  paths:
    - /etc/httpd/logs/ssl_access_*
  fields: {log_type: toolsaccess}

在logstash.conf中。

input {
  beats {
    port => "5043"
  }
}

filter {
  if ([fields][log_type] == "toolsmessage") {
    mutate {
      replace => {
        "[type]" => "toolsmessage"
      }
    }
  }
  else if ([fields][log_type] == "toolsaccess") {
    mutate {
      replace => {
        "[type]" => "toolsaccess"
      }
    }
  }
}

output {
  elasticsearch {
    hosts => ["10.111.119.211:9200"]
    index => "%{type}_index"
  }
 #stdout { codec => rubydebug }
}

答案 3 :(得分:0)

我已阅读以上所有内容。 找出我的方式。

requests