docker 部署 filebeat + ELK 7.14.1
一、前置准备
- 部署环境: centos + docker
- 镜像选择:
- elasticsearch:7.14.1
- kibana:7.14.1
- logstash:7.14.1
- elastic/filebeat:7.14.1
- 环境工作流程
graph TD Start --> filebeat读取日志文件; filebeat读取日志文件 --> logstash接收filebeat数据; logstash接收filebeat数据 -->elasticsearch接收数据; elasticsearch接收数据 --> kibana展示数据;
二、安装镜像
1. 创建docker桥接网络
创建网络,用于各容器的交互
docker network create elk
2. 创建文件夹
创建文件夹存放相关配置文件,文件结构:
3. 创建各软件的配置文件
- es
vim elasticsearch.yml
# start
cluster.name: "elasticsearch"
node.name: "es-node-1"
# 设置主结点名, 注意,需要是已存在的node.name
cluster.initial_master_nodes: "es-node-1"
network.host: "0.0.0.0"
http.cors.enabled: true # 是否支持跨域
http.cors.allow-origin: "*" # 表示支持所有域名
# end
- logstash
vim logstash.yml
#start
#模块配置文件地址
path.config: /usr/share/logstash/config/*.conf
xpack.monitoring.enabled: true
xpack.monitoring.elasticsearch.hosts: ["http://elasticsearch:9200"]
#end
vim logstash.cof
input{
beats {
port => 5044
codec => "json"
id => 'beat_test'
}
}
output{
elasticsearch {
hosts => ["http://elasticsearch:9200"]
index => "logtest"
}
stdout {
codec => rubydebug
}
}
- kibana
vim kibana.yml
server.host: "0.0.0.0"
elasticsearch.hosts: [ "http://elasticsearch:9200" ]
monitoring.ui.container.elasticsearch.enabled: true
- filebeat
vim filebeat.yml
filebeat.inputs:
- type: log
enabled: true
paths:
- /usr/share/filebeat/data/*.log
fields_under_root: true
output.logstash:
hosts: ["logstash:5044"]
4. 编写docker-compose
vim docker-compose.yml
version: '3'
services:
elasticsearch:
image: elasticsearch:7.14.1
ports:
- 9200:9200
restart: always
container_name: elasticsearch
volumes:
# 使用本地配置文件
# [本地文件]:[docker容器内的文件或地址]
- /usr/local/docker/ELK/elasticsearch/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml
networks:
- elk
kibana:
image: kibana:7.14.1
ports:
- 5601:5601
restart: always
container_name: kibana
networks:
- elk
volumes:
- /usr/local/docker/ELK/kibana/kibana.yml:/usr/share/kibana/config/kibana.yml
logstah:
image: logstash:7.14.1
restart: always
container_name: logstash
networks:
- elk
ports:
- 5044:5044
- 5045:5045
volumes:
- /usr/local/docker/ELK/logstash/logstash.conf:/usr/share/logstash/config/logstash.conf
- /usr/local/docker/ELK/logstash/logstash.yml:/usr/share/logstash/config/logstash.yml
- /usr/local/docker/ELK/log/:/usr/share/logstash/data/
filebeat:
image: "elastic/filebeat:7.14.1"
restart: always
container_name: filebeat
networks:
- elk
volumes:
- /usr/local/docker/ELK/filebeat/filebeat.yml:/usr/share/filebeat/filebeat.yml
# docker容器日志挂到本地
- /usr/local/docker/ELK/filebeat/log:/usr/share/filebeat/log
# filebeat 读取本地地址
- /usr/local/docker/ELK/filebeat/data:/usr/share/filebeat/data
networks:
# 使用本地已创建网络
elk:
external: true
5. 运行
docker-compose up -d
三、遇到的问题
- 文件挂在问题
> 答: 刚开始配置镜像启动目录,都是直接抄网上的说法,最后发现启动成功,但是配置无法生效,最后发现是因为docker镜像内的配置文件路径不对,容器启动配置不生效。可以启动一个空的容器,查看一下,7.14.1 版本的配置地址都是 "/usr/share/*" 里,其他版本不清楚,官方也没找到具体的说明。
- Kibana server is not ready yet 问题
> 答: 1) es未成功启动 2)网络问题,kibana无法连接es
- logstash的连接问题
> logstash 的容器配置里有一份链接es的配置样例文件,启动后会连接localhost:9200, 我一开始没注意,以为是我的配置文件出错了,如果不需要,可以删除