需求:实时监控集群日志(hadoop、spark、kafka等)
思路:利用filebeat收集每个服务器中的日志并发送到统一logstash中,通过logstash输出到其它地方。由于集群可能有成百上千个节点,需使用ansible统一安装filebeat。
1、安装logstash
官方下载地址:https://www.elastic.co/cn/downloads/logstash
这里使用的是logstash-7.14.1-linux-x86_64.tar.gz
使用tar -xzvf logstash-7.14.1-linux-x86_64.tar.gz解压
mv logstash-7.14.1-linux-x86_64 logstash 重命名
进入logstash目录,编写配置文件logstash-log.conf,文件名随意(程序启动时需指定)
vi conf/logstash-log.conf
input {
beats {
port => 5044
}
}
output {
file {
path => "/collect/%{[host][name]}.%{+yyyy.MM.dd.HH}"
}
}
#测试时可以注释掉上面的output,开启下面的output,这会将日志直接输出,便于观察
#output {
# stdout {
# codec => rubydebug
# }
#}
启动logstash:./bin/logstash -f conf/logstash-log.conf &
2、安装filebeat(不使用ansible)
官方下载地址:https://www.elastic.co/cn/downloads/beats/filebeat
这里使用的是filebeat-7.14.1-linux-x86_64.tar.gz
使用tar -xzvf filebeat-7.14.1-linux-x86_64.tar.gz解压
mv filebeat-7.14.1-linux-x86_64 filebeat 重命名
进入filebeat目录,将filebeat.yml备份一下,cp filebeat.yml filebeat.yml.bk
echo "" > filebeat.yml
vi filebeat.yml
filebeat.inputs:
- type: log
enabled: true
paths: #配置多个日志路径
- /etc/hadoop/logs/*.log
tail_files: true #从日志最新尾部开始读取
output.logstash:
hosts: ["127.0.0.2:5044"]
启动filebeat:./filebeat -e -c filebeat.yml &
此时logstash所在服务器会逐渐有日志出现(使用stdout需保持logstash启动时的当前通道)
3、批量安装filebeat(使用ansible)
首先安装ansible,压缩包下载地址:https://pypi.org/project/ansible

这里使用的是ansible-4.5.0.tar.gz
使用tar -xzvf ansible-4.5.0.tar.gz解压
mv ansible-4.5.0 ansible 重命名
进入ansible目录
执行python setup.py install
使用ansible --version查看安装是否成功
进入/etc/ansible的配置目录
vi hosts,添加如下节点
[filebeat] 127.0.0.3 127.0.0.4
编写site.xml文件,vi filebeat-site.yml(名称随意,位置随意,程序启动时需指定)
- hosts: filebeat
tasks:
- name: Copy Package
copy: src=/etc/filebeat-7.14.1-linux-x86_64.tar.gz dest=/etc/filebeat-7.14.1-linux-x86_64.tar.gz
- name: Tar Package
shell: cd /etc/;tar -zxvf filebeat-7.14.1-linux-x86_64.tar.gz
- name: Rename Directory
shell: mv /etc/filebeat-7.14.1-linux-x86_64 /etc/filebeat
- name: Copy Profile
copy: src=/filebeat.yml dest=/etc/filebeat/filebeat.yml
- name: Start Service
shell: nohup /etc/filebeat/filebeat -e -c /etc/filebeat/filebeat.yml >/dev/null 2>&1 &
其中filebeat-7.14.1-linux-x86_64.tar.gz和filebeat.yml需在ansible所在服务器中准备好,filebeat.yml内容和上文中单独部署filebeat时一致。
hosts: filebeat指定是hosts文件中配置的[filebeat]分组,hosts: all则是指hosts中所有节点
执行ansible-playbook /filebeat-site.yml命令开始批量部署
部署完成后,再次查看logstash的结果。