问题背景:
现公司的一个单体项目,因访问量变大,采取nginx负载均衡多实例部署。但是存在一个问题,项目的日志文件都分布在部署的每台服务器上,当查看用户的一个具体请求,因为nginx做了负载,所以也不清楚究竟这个请求在哪台实例上面,就需要一个个日志去查看,造成效率低下。
问题解决办法:
方式一:使用目前最好用的ELK日志收集,将日志都输入es中查看等等
优点:es中查看日志方便,还可以利用可视化组件来查看
缺点:需要搭建整套ELK环境,需要对ELK有一定的了解
方式二: 利用本文介绍的filebeat+logstash 将分布在各个服务器日志文件进行聚合到一个日志文件中
优点:操作简单,利于扩展到ELK中
缺点:查看日志没有可视化
环境介绍:
logstash 安装和配置:
- 解压下载的压缩包
tar -zxvf logstash-7.3.2.tar.gz
- 修改 logstash.conf文件(如果没有找到就把 logstash-sample.conf复制出来名称修改一下)修改内容:
input {
beats {
port => 5055
}
}
output {
file {
path => "/home/app/smrz/%{+YYYY.MM.dd}-file.log"
codec => line {format => "%{[@metadata][ip_address]} %{message}"}
# 格式化信息 来源IP + 原始信息
}
}
此处重点解释一下:%{[@metadata][ip_address]} 这个参数代表来源IP 地址方便我们查看日志来源实例
- 启动logstash
bin/logstash -f conf/logstash.conf
filebeat 安装与配置
- 解压下载的压缩包
tar -zxvf filebeat-7.3.2-linux-x86_64.tar.gz
- 修改配置文件 filebeat.yml
filebeat.inputs:
- type: log
enabled: true
# Paths that should be crawled and fetched. Glob based paths.
paths:
- /home/CTID-ONLINE/kitty.log
output.logstash:
# The Logstash hosts
hosts: ["192.168.44.21:5055"]
- 启动filebeat
sudo ./filebeat -e -c filebeat.yml
重复将filebeat安装到日志所在服务器
最终聚合的效果
192.168.44.10 2019-09-23 15:37:27.092 |-INFO [http-nio-8018-exec-10] com.goldenshield.kitty.interceptor.ConfigurationFilter [100] -| {"date":1569224247092,"idAddr":"223.104.18.231","appKey":"smbsapp","url":"/kitty/jbrz/OCR"}
192.168.44.20 2019-09-23 15:37:26.012 |-DEBUG [http-nio-8018-exec-15] com.goldenshield.kitty.mapper.AppInfoMapper.findRzfsByAppkey [159] -| ==> Preparing: select GROUP_CONCAT(rzfs.rzfs_url) from app_info INNER JOIN appinfo_rzfs ON ( app_info.uuid = appinfo_rzfs.appinfo_uuid) INNER JOIN rzfs ON (appinfo_rzfs.rzfs_uuid = rzfs.rz_id) where appkey = ?
192.168.44.10 2019-09-23 15:37:26.092 |-INFO [http-nio-8018-exec-15] com.goldenshield.kitty.service.impl.SmbsServiceImpl [96] -| 实名办税 解除绑定返回结果:{"code":200,"message":"OK","data":{"bsryid":"875713"},"more":false}
192.168.44.10 2019-09-23 15:37:26.529 |-DEBUG [http-nio-8018-exec-10] com.goldenshield.kitty.mapper.AppInfoMapper.findByAppkey [159] -| ==> Preparing: select * from app_info where appkey = ?
192.168.44.20 2019-09-23 15:37:26.012 |-DEBUG [http-nio-8018-exec-15] com.goldenshield.kitty.mapper.AppInfoMapper.findRzfsByAppkey [159] -| ==> Parameters: smbsios(String)
192.168.44.10 2019-09-23 15:37:26.092 |-INFO [http-nio-8018-exec-15] com.goldenshield.kitty.interceptor.ConfigurationFilter [100] -| {"date":1569224246092,"idAddr":"183.160.70.39","appKey":"smbsios","url":"/kitty/smbs/JCBD"}
192.168.44.10 2019-09-23 15:37:26.530 |-DEBUG [http-nio-8018-exec-10] com.goldenshield.kitty.mapper.AppInfoMapper.findByAppkey [159] -| ==> Parameters: smbsapp(String)
192.168.44.20 2019-09-23 15:37:26.013 |-DEBUG [http-nio-8018-exec-15] com.goldenshield.kitty.mapper.AppInfoMapper.findRzfsByAppkey [159] -| <== Total: 1
192.168.44.10 2019-09-23 15:37:26.526 |-DEBUG [http-nio-8018-exec-10] com.goldenshield.kitty.mapper.AppInfoMapper.findByAppkey [159] -| ==> Preparing: select * from app_info where appkey = ?
192.168.44.20 2019-09-23 15:37:26.530 |-DEBUG [http-nio-8018-exec-10] com.goldenshield.kitty.mapper.AppInfoMapper.findByAppkey [159] -| <== Total: 1