一、背景
假如咱们须要从多个渠道来收集数据,比方:1、从文件收集。2、从tcp收集。不同的渠道收集过去的数据须要做不同的解决。那么咱们这个时候应该如何解决呢?
二、解决方案
1、计划一:
应用同一个 logstash 实例,而后将在一个 pipeline 中,接管多个输出,比方:
input {
file {}
file {}
tcp {}
}
这样尽管能够实现,然而咱们 在 filter
和 output
阶段如果不同的输出存在不同的过滤、输入等,那么这个文件将会非常复杂,须要进行各种判断,不好保护。
2、计划二:
应用多个 logstash 实例,每个 logstash 实例解决不同的输出。这样尽管能够实现,然而 logstash 略微有点消耗性能,也是不可取的。
3、计划三:
在同一个 logstash 实例中,应用多个 pipeline,每个 pipeline 解决不同的 input
,filter
和out
。即配置扩散在多个配置文件中。
三、实现步骤
此处采纳上方的
计划三
来实现。
1、编写 pipeline 文件
1、从文件收集,输入到控制台
vim file-pipeline.conf
input {
file {
path => ["/Users/huan/soft/elastic-stack/logstash/logstash/pipeline.conf/multi-pipeline/file-pipeline.log"]
start_position => "end"
sincedb_path => "/Users/huan/soft/elastic-stack/logstash/logstash/pipeline.conf/multi-pipeline/sincedb.db"
sincedb_write_interval => "15 seconds"
mode => "tail"
type => "file-pipeline"
}
}
filter {
}
output {
stdout {
codec => rubydebug {
metadata => true
}
}
}
2、从socket收集,输入到控制台
vim tcp-pipeline.conf
# 开启一个tcp监听在9092端口
# id 的值倡议设置成惟一的值,这在多个tcp input时,应用监控api时十分有用的。
input {
tcp {
port => 9202
host => "127.0.0.1"
mode => "server"
type => "tcp-pipeline"
id => "console-tcp"
}
}
filter {
}
output {
stdout {
codec => line {
charset => "UTF-8"
}
}
}
留神⚠️:
1、tcp 中的 id
的值倡议设置成一个惟一的值,这个当咱们有多个 tcp
输出时,在咱们应用监控api会十分有用。
2、批改 pipelines.yml 配置文件
vim LS_HOME/config/pipelines.yml
- pipeline.id: file-pipeline
path.config: "/Users/huan/soft/elastic-stack/logstash/logstash/pipeline.conf/multi-pipeline/file-pipeline.conf"
- pipeline.id: tcp-pipeline
queue.type: persisted
path.config: "/Users/huan/soft/elastic-stack/logstash/logstash/pipeline.conf/multi-pipeline/tcp-pipeline.conf"
留神⚠️:
1、如果上方的配置文件应用的是一个 pipeline
,比方删除下方的 tcp-pipeline,将 file-pipeline的 path.config 的值批改成 .../*.conf
,
那么此时会共用 output
,会发现数据反复。
即批改成:
# 这样是多个配置文件共用一个 pipeline,filter\output等会共享。
- pipeline.id: file-pipeline
path.config: "/Users/huan/soft/elastic-stack/logstash/logstash/pipeline.conf/multi-pipeline/*.conf"
3、启动logstash
bin/logstash
留神⚠️:
1、此处的启动命令后不可跟 -e
或-f
,如果跟了,则不会应用默认的 config/pipelines.yml
。
4、测试
1、测试 file 收集
cd /Users/huan/soft/elastic-stack/logstash/logstash/pipeline.conf/multi-pipeline
echo "察看控制台输入" >> file-pipeline.log
2、测试从 tcp 收集
nc 127.0.0.1 9202
123456 -> 察看控制台输入
3、后果
四、参考文档
1、tcp 文件收集
2、多pipeline https://www.elastic.co/guide/en/logstash/current/multiple-pipelines.html
发表回复