之前的文章中我们用Filebeat连接Logstash实现了到es的传输,但如果我们有多种采集器(beat)时,该如何配置呢。我尝试了几种方法
一、多端口(不推荐)
在之前文章中,我们的Filebeat和Logstash之间通过5044端口进行传输,如果想要不同的beat,可以开设不同的端口号,例如Filebeat为5044,Metricbeat为5043。
1.配置logstash
vim /etc/logstash/conf.d/logstash-sample.conf
input {
beats {
add_field => {"beatType" => "filebeat"}
port => 5044
}
beats {
add_field => {"beatType" => "metricbeat"}
port => "5043"
}
}
# 日志添加 remote_ip字段=>IP地址 来作为不同被监控服务器的标识
filter{
mutate{
add_field => {"remote_ip" => "%{[@metadata][ip_address]}"}
}
}
output {
if [beatType] == "filebeat" {
elasticsearch {
hosts => ["localhost:9200"]
index => "filebeat-logstash-test"
}
}
if [beatType] == "metricbeat" {
elasticsearch {
hosts => ["localhost:9200"]
index => "metricbeat-logstash-test"
}
}
}
2.配置filebeat
vim /etc/filebeat/filebeat.yml
这个没有什么需要改变的,直接按原本的就好,如果没有配置过则回顾ELK入门(六)——Filebeat安装与启动(rpm包)+logstash(rpm包)
3.配置metricbeat
在上一节中我们只尝试了metricbeat直接传到elasticsearch,所以这里要重新配置一下。
vim /etc/metricbeat/metricbeat.yml
以下只列出调整过的内容
①
reload.enabled: true
setup.dashboards.enabled: true
②output中注释elasticsearch,启用logstash
4.重启
重启logstash和beats
systemctl restart logstash
systemctl restart filebeat
systemctl restart metricbeat
发现在head上已经显示出这两个索引了
这里filebeat读取的内容很少,是因为已经有了采集过的记录,想要从头开始导入可参见博客ELK入门——解决:删除索引,重运行logstach后messages数据量变少
二、加入tag,输出判断(少量时推荐)
多端口配置这是一种方法,不过当采用多种采集器的时候,难道要给每个采集器都分配一个端口么,这显然是不太合理的,配置过程也非常麻烦,可移植性低。因此还有另外一种方法,就是给每种beat在配置文件中分配好tag,用if [tag]=="" 来区分不同的采集器。
我们先删除方法一中生成的索引,然后同样的,需要对logstash和beat进行相关配置。
1.配置filebeat
vim /etc/filebeat/filebeat.yml
reload.enabled: true
setup.template.settings:
index.number_of_shards: 1
index.codec: best_compression
tags: ["filebeat_messages"]
output.logstash:
# The Logstash hosts
hosts: ["localhost:5044"]
2.配置metricbeat
vim /etc/metricbeat/metricbeat.yml
reload.enabled: true
setup.template.settings:
index.number_of_shards: 1
index.codec: best_compression
tags:["metricbeat_system"]
output.logstash:
# The Logstash hosts
hosts: ["localhost:5044"]
3.配置logstash
vim /etc/logstash/conf.d/logstash-sample.conf
nput {
beats {
port => 5044
}
}
output {
if "filebeat_messages" in [tags] {
elasticsearch {
hosts => ["http://local:9200"]
index => "filebeat_logstash_test"
}
}
if "metricbeat_system" in [tags] {
elasticsearch {
hosts => ["http://localhost:9200"]
index => "metricbeat_logstash_test"
}
}
# elasticsearch {
# hosts => ["http://localhost:9200"]
# index => "%{[@metadata][beat]}-%{[@metadata][version]}-%{+YYYY.MM.dd}"
# }
}
4.启动
systemctl restart logstash
systemctl restart filebeat
systemctl restart metricbeat
查看head,有索引成功生成
这两种方法掌握后更多的beat其实也是相类似的配置方法
三、logstash.yml表达式区分(推荐)
还有一种方法及其简单,我在后面的博客进行了应用,可以参见ELK入门(十)——Beats的多服务器/系统部署(以Metricbeat为例)并Kibana查看
只修改logstash.yml即可
input {
beats {
port => 5044
}
}
output {
elasticsearch {
hosts => ["172.31.131.224:9200"]
index => "%{[@metadata][beat]}-%{[@metadata][version]}-test"
}
}
通过这段语句,可以区分开不同beat的不同版本
重运行logstash后会发现head生成索引了,因为此时我有三种采集器在采集,所以也生成了三个采集器的索引。
参考博客
安装部署ELK教程 (Elasticsearch+Kibana+Logstash+Filebeat+Metricbeat) 基于7.9.3版本