elasticsearch 将filebeat日志发送到logstash,以索引docker元数据,elasticsearch,logstash,filebeat,elasticsearch,Logstash,Filebeat" /> elasticsearch 将filebeat日志发送到logstash,以索引docker元数据,elasticsearch,logstash,filebeat,elasticsearch,Logstash,Filebeat" />

elasticsearch 将filebeat日志发送到logstash,以索引docker元数据

elasticsearch 将filebeat日志发送到logstash,以索引docker元数据,elasticsearch,logstash,filebeat,elasticsearch,Logstash,Filebeat,我试图在filebeat和logstash的帮助下用Elastics搜索索引。以下是filebeat.yml: filebeat.inputs: - type: docker combine_partial: true containers: path: "/usr/share/dockerlogs/data" stream: "stdout" ids: - "*" exclude_files: ['\.gz$'] ignore_older:

我试图在filebeat和logstash的帮助下用Elastics搜索索引。以下是filebeat.yml:

filebeat.inputs:
- type: docker
  combine_partial: true
  containers:
    path: "/usr/share/dockerlogs/data"
    stream: "stdout"
    ids:
      - "*"
  exclude_files: ['\.gz$']
  ignore_older: 10m

processors:
  # decode the log field (sub JSON document) if JSON encoded, then maps it's fields to elasticsearch fields
- decode_json_fields:
    fields: ["log", "message"]
    target: ""
    # overwrite existing target elasticsearch fields while decoding json fields
    overwrite_keys: true
- add_docker_metadata:
    host: "unix:///var/run/docker.sock"

filebeat.config.modules:
  path: ${path.config}/modules.d/*.yml
  reload.enabled: false

# setup filebeat to send output to logstash
output.logstash:
  hosts: ["xxx.xx.xx.xx:5044"]

# Write Filebeat own logs only to file to avoid catching them with itself in docker log files
logging.level: info
logging.to_files: false
logging.to_syslog: false
loggins.metrice.enabled: false
logging.files:
  path: /var/log/filebeat
  name: filebeat
  keepfiles: 7
  permissions: 0644
ssl.verification_mode: none
这是logstash.conf:

input
  {
    beats {
      port => 5044
      host => "0.0.0.0"
    }
  }

output
  {
    stdout {
      codec => dots
    }
    elasticsearch {
      hosts => "http://xxx.xx.xx.x:9200"
      index => "%{[docker][container][labels][com][docker][swarm][service][name]}-%{+xxxx.ww}"
    }
  }
我试图用docker的名字编制索引,这样比我们经常看到的“filebeat-xxxxxx.some date”更可读、更清晰。 我尝试了几件事:

- index => "%{[docker][container][labels][com][docker][swarm][service][name]}-%{+xxxx.ww}"
- index => "%{[docker][container][labels][com][docker][swarm][service][name]}-%{+YYYY.MM}"
- index => "%{[docker][swarm][service][name]}-%{+xxxx.ww}"
但什么都没用。我做错了什么?也许我做错了什么,或者在filebeat.yml文件中遗漏了什么。也可能是这样。
感谢您的帮助或任何线索。

看起来您不确定添加了哪些docker元数据字段。最好先使用默认索引名(例如“filebeat-xxxxxx.some date”或其他名称)成功建立索引,然后查看日志事件以查看docker元数据字段的格式

我没有与您相同的设置,但作为参考,我在AWS ECS上,因此我的docker字段的格式为:

"docker": {
  "container": {
    "name": "",
    "labels": {
      "com": {
        "amazonaws": {
          "ecs": {
            "cluster": "",
            "container-name": "",
            "task-definition-family": "",
            "task-arn": "",
            "task-definition-version": ""
          }
        }
      }
    },
    "image": "",
    "id": ""
  }
}
在看到可用的格式和字段之后,我能够使用上面的代码添加一个自定义的“application\u name”字段。这个字段是在我的输入插件中生成的,在我的例子中是redis,但是所有的输入插件都应该有add_field选项():

在获得这个新的自定义字段后,我能够为不同的“应用程序名称”字段运行特定的过滤器(grok、json、kv等),因为它们具有不同的日志格式,但对您来说重要的是,您可以在输出中使用它来Elasticsearch索引名称:

output {
  elasticsearch {
      user => ***
      password => ***
      hosts => [ "***" ]
      index => "logstash-%{application_name}-%{+YYY.MM.dd}"
  }
}

IIRC,您需要将elasticsearch输出插件中的
manage_模板设置为false
。@baudsp不幸的是,它不起作用。您是最棒的!我已经接受了你的回答谢谢@YoussefHarkati!我是新来的,所以我真的很感激!如果遇到任何问题,请随时给我留言
output {
  elasticsearch {
      user => ***
      password => ***
      hosts => [ "***" ]
      index => "logstash-%{application_name}-%{+YYY.MM.dd}"
  }
}