版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/change_on/article/details/84182693
假如我们要在一台服务器上部署一个ssm应用,部署完,运行一段时间崩了。排查问题得时候,我们自然会想到查看log4J日志。可是,如果服务器不止一个应用,而是好几个呢,这当然可以查看每个应用的log4J日志。那如果不止一台服务器,而是好几台呢,难道还一个一个看?这显然是不现实的。现在又一套开源的分布式日志分析平台ELK可以解决这个问题,将所有日志收集起来,在统一,然后可视化,提供搜索。
那现在我这里只有一台服务器,我就搭建一个单机版的,分布式的只要在单机版上复制一部分过去就行。
先看看ELK的架构:ElasticSearch、 LogStash+FileBeats、 Kibana
- ElasticSearch: 负责数据的存储、处理
- LogStash、FileBeats: 负责数据的收集
- Kibana: 提供了可视化操作
安装过程
-
1.环境准备
- 一台安装ubuntu16.04 server的机器,添加root用户,普通用户
- 安装jdk1.8+,注意这里一定要1.8以上
-
2.安装ElasticSearch、 LogStash+FileBeats、 Kibana
-
我一向崇尚懒,最快,最有效的方法就是官方文档!https://www.elastic.co/guide/index.html 当然自己找会有些麻烦,我就做官方文档的搬运工。
-
这里有个点要特别注意!ElasticSearch、 LogStash、 Kibana三者的版本一定要匹配,版本对不上会报错。
-
-
2.1ElasticSearch
普通用户
下载:
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.内存过小
普通用户
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
4.分布式环境
将LogStash+FileBeat安装在其他客户机即可,把配置文件输出的elasticsearch 定位到目标ip即可
...
output {
elasticsearch {
hosts => [ "127.0.0.1:9200" ]
}
...