Filebeat TCP输入用法

时间:2019-05-24 23:11:06

标签: filebeat

问题:

  • TCP输入是否管理收割机(即,您是否将文件路径发送到TCP输入,然后收割机开始摄取该文件)?
  • TCP输入可以接受结构化数据(例如json输入上的log配置选项)吗?
  • TCP输入是否希望通过TCP连接发送的数据采用特定格式?

摘自Filebeat文档(https://www.elastic.co/guide/en/beats/filebeat/current/how-filebeat-works.html#input):

  

什么是输入?   输入负责管理收割机并查找所有可读取的资源。

对于如何使用TCP输入以及这些TCP输入需要什么样的数据格式,文档尚不清楚(https://www.elastic.co/guide/en/beats/filebeat/current/filebeat-input-tcp.html)。我最终阅读了TCP输入的源代码,但是我仍然不清楚如何使用TCP输入。

1 个答案:

答案 0 :(得分:1)

TL; DR:它需要一条JSON消息,我看到的是从logstash发送到filebeat。

我和你有同样的疑问。但是,我花了一整天的时间尝试以某种方式使用filebeat。我想要实现的目标是将stacktrace添加到kibana,许多网站都说,作为一种好的做法,您不应在logstash中应用多行概念,而在filebeat中使用它。

因此,我尝试将文件信号添加到我的ELK堆栈中。

这是我的应用程序和堆栈之间的先前通信:

  

SpringApp> Logstash> ElasticSearch> Kibana

但是我更改了它,并通过TCP通讯添加了文件信号

  

SpringApp> Logstash> Filebeat > ElasticSearch> Kibana

我是通过以下配置实现的:

logstash.conf

input {
    tcp {
        port => 5000
        codec => multiline {
            pattern => "\tat\s"
            what => "previous"
        }
    }
}

## Add your filters / logstash plugins configuration here

output {
    tcp {
        host => "filebeat"
        port => "5044"
        mode => "client"
        reconnect_interval => "2"
        codec => "line"
    }
    stdout { }
}

filebeat.yml

filebeat.inputs:

- type: tcp
  host: "0.0.0.0:5044"

multiline.pattern: '^\t'
multiline.negate: false
multiline.match: after

output.elasticsearch:
  hosts: ["http://elasticsearch:9200"]

logging.level: debug
logging.to_files: true
logging.files:
  path: /var/log/filebeat
  name: filebeat
  keepfiles: 7
  permissions: 0644
logging.metrics.enabled: false

注意1:Logstash正在通过TCP接收和发送通信
注释2:filebeat无法识别输出的其他logstash编解码器
注意3:我正在使用kubernetes和容器进行所有人之间的通信