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

How to define seperated indexes for different logs in Filebeat/ELK?

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

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

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

在 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"
    }
}

在您的 Filebeat 配置中,您可以使用 document_type 来识别您拥有的不同日志。然后在 Logstash 内部,您可以设置 type 字段的值来控制目标索引。

然而,在将日志分成不同的索引之前,您应该考虑将它们留在单个索引中并使用 type 或一些 custom field to distinguish between log types. See index vs type.

示例 Filebeat 探矿者配置:

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

示例 Logstash 配置:

input {
  beats {
    port => 5044
  }
}

output {
  # Customize elasticsearch output for Filebeat.
  if [@metadata][beat] == "filebeat" {
    elasticsearch {
      hosts => "localhost:9200"
      manage_template => false
      # Use the Filebeat document_type value for the Elasticsearch index name.
      index => "%{[@metadata][type]}-%{+YYYY.MM.dd}"
      document_type => "log"
    }
  }
}

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 }
}

以上内容我都看过了。 找到我的路。

input {
    stdin {
    }
    jdbc {
      type => "jdbc"
      ....
    }
    http_poller {
        type=>"api"
      ....
    }

}
filter {
....
}
output {
    elasticsearch {
        hosts => ["jlkjkljljkljk"]
        index => "%{type}_index"
        document_id => "%{id}"
    }
    stdout {
        codec => json_lines
    }
}