首先什么是ELK呢?,为什么用docker搭建呢?接下来就慢慢吹水了。
一.ELK是elasticsearch和logstash还有kibana的首字母的缩写。它们是一套可以用来搜集日志框架。为什么要用docker部署呢,原因是把它们搞成容器后可以大大减少服务器的资源内存。还有这三个的版本一定要一致,下面就让我们一起搭建起来吧。
二.1搭建elasticsearch,一定要设置ES的初始内存和最大内存,否则导致过大启动不了ES到时就内存爆满卡死。
docker run -d --name es -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" -e ES_JAVA_OPTS="-Xms64m -Xmx128m" elasticsearch:7.7.0
启动完后访问你本的地址的9200端口比如我的IP:9200/
出现这样的这样的就成功启动了。
2.2安装elasticsearch-head-master,它相当于是elasticsearch可视化工具。
#拉取镜像
docker pull mobz/elasticsearch-head:5
#启动容器
docker run -d --name elasticsearch-head -p 9100:9100 mobz/elasticsearch-head:5
启动完后访问你本的地址的9100端口比如我的IP:9100/
启动成功!!
但是你连接的时候会报错跨域错误,这时候我们要去修改docker中elasticsearch的elasticsearch.yml文件。
#进入elasticsearch内部
docker exec -it es /bin/bash
#然后进入config文件
cd config/
#编辑elasticsearch.yml
vi elasticsearch.yml
#在里面添加
http.cors.enabled: true
http.cors.allow-origin: "*"
#保存编辑
:wq
#退出容器
exit
#重启容器
docker restart es
这个时候还不行你新建索引或查看索引数据的时候按F12会报 406 Not Acceptable错误,解决的方法如下。
#进入elasticsearch-head容器内部
docker exec -it elasticsearch-head /bin/bash
#cd 到/usr/src/app/_site 然后vi vendor.js 把
6886行 contentType: "application/x-www-form-urlencoded" 修改为 contentType: "application/json;charset=UTF-8" 和 7574行 var inspectData = s.contentType === "application/x-www-form-urlencoded" && 修改为 var inspectData = s.contentType === "application/json;charset=UTF-8"
修改完后重启就不会报错了。
三.搭建kibana
#直接启动它会自动去拉取容器的
docker run -d --name kibana -p 5601:5601 kibana:7.7.0
然后访问IP:5601会出现
#进入容器修改kibana.yml
vi config/kibana.yml
#把elasticsearch.hosts: [ "http://elasticsearch:9200" ]
#改成elasticsearch.hosts: [ "http://本地IP:9200" ]
#然后你想汉化kibana的话在最后一行加上
i18n.locale: "zh-CN"
#退出保存编辑
:wq
#重启容器
docker restart kibana
修改后
再次访问
汉化成功。
四.搭建logstash
#直接启动
docker run -d --name logstash logstash:7.7.0
#进入容器
docker exec -it logstash /bin/bash
#cd 进入config
cd config
#修改logstash.yml文件,把xpack.monitoring.elasticsearch.hosts: [ "http://elasticsearch:9200" ]改成
xpack.monitoring.elasticsearch.hosts: [ "http://IP:9200" ]
#保存退出
:wq
#退出容器
exit
#重启容器
docker restart logstash
#查看是否成功
docker logs -f logstash
出现如下就启动logstash成功。
4.1配置logstash读取日志文件和输入到elasticsearch去。
#进入logstash容器
docker exec -it logstash /bin/bash
#然后编辑pipelines.yml
vi config/pipelines.yml
#这个路径是用那个文件来进行的读取和写入的。
path.config: "/usr/share/logstash/pipeline/logstash.conf"
然后到path.config指定的路径去编辑logstash.conf文件。
input {
# 从文件读取日志信息
file {
#读取日志文件的路径
path => "/usr/local/nginx/logs/access.log"
type => "nginx_access"
start_position => "beginning"
}
}
output {
#打印输出
stdout {
codec => rubydebug
}
# 输出es
elasticsearch {
hosts => "IP:9200"
}
}
完成以上步骤大致就OK了。