发布时间:2023-02-14 11:30
假如我们要在一台服务器上部署一个ssm应用,部署完,运行一段时间崩了。排查问题得时候,我们自然会想到查看log4J日志。可是,如果服务器不止一个应用,而是好几个呢,这当然可以查看每个应用的log4J日志。那如果不止一台服务器,而是好几台呢,难道还一个一个看?这显然是不现实的。现在又一套开源的分布式日志分析平台ELK可以解决这个问题,将所有日志收集起来,在统一,然后可视化,提供搜索。
那现在我这里只有一台服务器,我就搭建一个单机版的,分布式的只要在单机版上复制一部分过去就行。
我一向崇尚懒,最快,最有效的方法就是官方文档!https://www.elastic.co/guide/index.html 当然自己找会有些麻烦,我就做官方文档的搬运工。
这里有个点要特别注意!ElasticSearch、 LogStash、 Kibana三者的版本一定要匹配,版本对不上会报错。
普通用户
下载:
sudo wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.5.0.zip
解压:
unzip elasticsearch-6.5.0.zip
设置大内存:
vi /etc/sysctl.conf
在最后添加 一行 :vm.max_map_count=655360
加载参数 :sysctl -p
启动:
cd elasticsearch-6.5.0/
./bin/elasticsearch
不用测了,只要没报错就成功,报错一般只有一下情况
1.用root用户运行了,一定要普通用户
2.jdk不是1.8及以上
3.内存过小
普通用户
安装:
sudo apt-get update && sudo apt-get install logstash
进去目录下,我这里是logstash-6.5.0
cd logstash-6.5.0/
添加logstash.conf文件:
vim logstash.conf
添加:
input {
file {
path => \"替换应用的log路径,多个路径可以用正则匹配\"
start_position => \"beginning\" #从文件开始处读写
}
# stdin {} #可以从标准输入读数据
}
# 数据过滤
filter {
#定义数据的格式
grok {
match => { \"message\" => \"%{DATA:timestamp}\\|%{IP:serverIp}\\|%{IP:clientIp}\\|%{DATA:logSource}\\|%{DATA:userId}\\|%{DATA:reqUrl}\\|%{DATA:reqUri}\\|%{DATA:refer}\\|%{DATA:device}\\|%{DATA:textDuring}\\|%{DATA:duringTime:int}\\|\\|\"}
}
#定义时间戳的格式
date {
match => [ \"timestamp\", \"yyyy-MM-dd-HH:mm:ss\" ]
locale => \"cn\"
}
#定义客户端的IP是哪个字段(上面定义的数据格式)
geoip {
source => \"clientIp\"
}
mutate {
rename => { \"host\" => \"host.name\" }
}
}
# 输出到本机的 ES
output {
elasticsearch {
hosts => [ \"127.0.0.1:9200\" ]
}
}
启动:
bin/logstash -f logstash.conf --config.reload.automatic
没报错就成功了
普通用户安装
sudo apt-get update && sudo apt-get install filebeat
进入解压的文件夹,修改一下filebeat.yml
- type: log
# Change to true to enable this prospector configuration.
enabled: True
# Paths that should be crawled and fetched. Glob based paths.
# 读取 Nginx 的日志
paths:
- 替换应用的log路径
#----------------------------- Logstash output --------------------------------
# 输出到本机的 LogStash
output.logstash:
# The Logstash hosts
hosts: [\"localhost:5044\"]
启动 FileBeat,需要以 root 身份启动,更改配置文件的权限即可
sudo chown root filebeat.yml
sudo ./filebeat -e -c filebeat.yml -d \"publish\"
若没报错即成功了!
普通用户
安装:
wget https://artifacts.elastic.co/downloads/kibana/kibana-6.5.0-linux-x86_64.tar.gz
tar -xzf kibana-6.5.0-linux-x86_64.tar.gz
cd kibana-6.5.0-linux-x86_64/
修改外网访问:
vim config/ kibana.yml
修改这句:
server.host: \"0.0.0.0\"
启动:
bin/kibana
没报错即成功了,端口默认是5601
在本地浏览器,输入ip:5601
选择第一个discover,输入logstash,如果下两行出现success的说明成功, 再点进去,选择@timestamp
将LogStash+FileBeat安装在其他客户机即可,把配置文件输出的elasticsearch 定位到目标ip即可
...
output {
elasticsearch {
hosts => [ \"127.0.0.1:9200\" ]
}
...