利用docker搭建ELK
本打算只有elastisearch、kibanan、logstash
搭建下ELK
,奈何logstash
是运行太占内存,于是打算用filebeat
(占用资源少)来在各服务器来收集日志,然后统一交给logstash
来处理过滤。
docker
部署elasticsearch
拉取镜像
docker pull docker.elastic.co/elasticsearch/elasticsearch:7.5.1
运行es镜像
代码语言:javascript复制docker run -dit --name es -p 9200:9200 -p 9300:9300
-v /home/es/data:/usr/share/elasticsearch/data
-v /home/es/plugin:/usr/share/elasticsearch/plugin
/usr/share/elasticsearch/config:/usr/share/elasticsearch/config
docker.elastic.co/elasticsearch/elasticsearch:7.5.1
-p 9200 9300 端口映射
-v 存储映射 容器删除数据仍存储在宿主机
/usr/share/elasticsearch/data 数据
/elasticsearch/config:/usr/share/elasticsearch/config 配置
/usr/share/elasticsearch/plugin 插件 例如ik分词器
es配置
docker
部署kibana
拉取镜像
docker pull docker.elastic.co/kibana/kibana:7.5.1
运行kibana
镜像
代码语言:javascript复制docker run -dit --name kibana -p 5601:5601
-e ELASTICSEARCH_HOSTS=http://es:9200/
-v /home/kibana/config:/usr/share/kibana/config
docker pull docker.elastic.co/kibana/kibana:7.5.1
kibana
配置,启动命令or配置文件二选一
docker
部署filebeat
拉取镜像
docker pull docker.elastic.co/beats/filebeat:7.5.1
运行filebeat
镜像
代码语言:javascript复制docker run -dit --name filebeat
-v /home/logs:/home/logs
-v /nfs/filebeat:/usr/share/filebeat/
docker pull docker.elastic.co/beats/filebeat:7.5.1
/home/logs 必须映射日志存储位置
/usr/share/filebeat filebeat目录 如何获取目录?
可以先docker run -dit --name filebeat -v/home:/home docker.elastic.co/beats/filebeat:7.5.1 #-v随便映射宿主机的一个路径,方便拷贝
然后docker exec -it 容器id /bash/bin
cp -r ./* /home/
filebeat.yml
配置
代码语言:javascript复制###加载modules.d中的配置文件
filebeat.config:
modules:
path: ${path.config}/modules.d/*.yml #路径
reload.enabled: false
processors:
- add_cloud_metadata: ~
- add_docker_metadata: ~
##日志来源
filebeat.inputs:
- type: log #类型 log tcp udp等
tags: ["nginx"]
enabled: true
paths:
- /home/logs/nginx/*.log
- type: log
tags: ["halo-executor"]
enabled: true
paths:
- /home/logs/**/*.log
##添加这两行信息,使其能解析json格式的日志, 和 path 对齐
json.keys_under_root: true
json.overwrite_keys: true
###输出到logstash,可以直接输出到es、kafak、redis等
output.logstash:
enabled: true
#logstash的ip:5044
hosts: ["ip:5044"]
#output.elasticsearch:
# hosts: ["es-ip:9200"]
##kibana可视化
setup.kibana:
##kabana的ip,如果有用户名密码需配置用户名密码
host: "http://kibana-ip:5601"
docker
部署logstash
拉取镜像
docker pull docker.elastic.co/logstash/logstash:7.5.1
运行镜像
代码语言:javascript复制docker run -dit --name logstash
-p 5044:5044 -p 9600:9600
-v /nfs/logstash/config:/usr/share/logstash/config
-v /nfs/logstash/pipeline:/usr/share/logstash/pipeline
docker.elastic.co/logstash/logstash:7.5.1