1.拉取docker镜像
这里选用7.6.1版本,注意es、kibana、logstash、filebeat版本要保持一致,不然会出现问题
分别执行以下四条命令,拉取镜像
docker pull docker.elastic.co/elasticsearch/elasticsearch:7.6.1
docker pull docker.elastic.co/kibana/kibana:7.6.1
docker pull docker.elastic.co/logstash/logstash:7.6.1
docker pull docker.elastic.co/beats/filebeat:7.6.1
查看镜像
2、创建ES容器
执行命令
docker run -d --name es -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" \
docker.elastic.co/elasticsearch/elasticsearch:7.6.1
进入容器、分别执行以下命令
docker exec -it es /bin/bash
# 显示文件
ls
结果如下:
LICENSE.txt README.textile config lib modules
NOTICE.txt bin data logs plugins
# 进入配置文件夹
cd config
# 显示文件
ls
结果如下:
elasticsearch.keystore ingest-geoip log4j2.properties roles.yml users_roles
elasticsearch.yml jvm.options role_mapping.yml users
添加es跨域配置
# 修改配置文件
vi elasticsearch.yml
# 加入跨域配置
http.cors.enabled: true
http.cors.allow-origin: "*"
exit退出容器后重启容器
docker restart es
3、创建Kibana
启动kibana容器
```lua
docker run --link 13d35e66c303:elasticsearch --name kibana -p 5601:5601 -d \
docker.elastic.co/kibana/kibana:7.6.1
进入容器,修改kibana页面为中文
#进入容器
docker exec -it kibana /bin/bash
#修改kibana配置文件
vi /config/kibana.yml
#添加一行配置
i18n.locale: "zh-CN"
访问 服务器地址:5601就能看到kibana中文界面了
4、创建Logstash
配置 logstash.yml
# 创建宿主机文件存放文件夹
mkdir -p /usr/share/logstash/config/
cd /usr/share/logstash/config/
# 创建文件
vim logstash.yml
# 写入
http.host: "0.0.0.0"
xpack.management.pipeline.id: ["main"]
# 结束
配置 pipeline.yml
# 创建宿主机文件
vim pipeline.yml
# 写入(注意空格)
- pipeline.id: main
path.config: "/usr/share/logstash/pipeline/logstash.conf"
# 结束
配置 logstash.conf
创建宿主机文件存放文件夹
mkdir -p /usr/share/logstash/config/pipeline/
cd /usr/share/logstash//config/pipeline/
创建文件
vim logstash.conf
# 写入
input {
beats { port => 5044 }
}
filter {
if [project] == "Nginx" {
grok {
match => {
"message" =>[
"%{IPORHOST:client_ip}\s{1,}\-\s\-\s\[%{HTTPDATE:time}\]\s{1,}\"(?:%{WORD:verb}\s{1,}%{NOTSPACE:request}(?:\s{1,}HTTP/%{NUMBER:http_version})?|-)\" %{NUMBER:response}\s{1,}(?:%{NUMBER:bytes}|-)\s{1,}%{QS:referrer}\s{1,}%{QS:agent}"
]
}
}
date {
match => ["time","dd/MMM/yyyy:HH:mm:ss Z"]
target => "logdate"
}
mutate {
lowercase => ["company", "project", "server", "application"]
remove_field => ['cloud', 'tags', 'host', 'agent', 'log', 'ecs', '@version', 'message']
}
ruby {
code => "event.set('logdate', event.get('logdate').time.localtime)"
}
geoip {
source => "client_ip"
}
}
}
output {
elasticsearch {
hosts => ["es服务器地址:9200"]
index => "%{[company]}_%{[project]}_%{[server]}_%{[application]}_%{+YYYY}"
}
}
# 结束
开启 Logstash
docker run -v /usr/share/logstash/config/logstash.yml:/usr/share/logstash/config/logstash.yml \-v /usr/share/logstash/config/pipeline.yml:/usr/share/logstash/config/pipeline.yml \-v /usr/share/logstash/config/pipeline/logstash.conf:/usr/share/logstash/pipeline/logstash.conf -d --name logstash -p 5044:5044 -p 9600:9600 \docker.elastic.co/logstash/logstash:7.6.1
开启 Filebeat
opt目录新建文件filebeat.yml
cd /opt
mkdir ./filebeat
cd /filebeat
vi filebeat.yml
编辑如下内容:
filebeat.inputs:
- type: log
enabled: true
# 下面的的xxx代表不同微服务产生的日志,具体以自己项目为准,如有多个微服务,按照如下格式继续添加即可
paths:
- /usr/share/filebeat/xiaorui/logs/info/*.log
- /usr/share/filebeat/xiaorui/logs/error/*.log
- /usr/share/filebeat/xiaorui/logs/debug/*.log
# 配置日志输出到哪里,这里ES安装在10这台机子,以10为例
output.elasticsearch:
hosts: ["192.168.3.10:9200"]
#以下配置可以不配
#setup.kibana:
#host: http://192.168.60.105:5601
启动容器:
docker run \--name filebeat \-d \-v /opt/filebeat/filebeat.yml:/usr/share/filebeat/filebeat.yml \-v /xiaorui/:/usr/share/filebeat/xiaorui \docker.elastic.co/beats/filebeat:7.6.1
本文时间环境有限,暂时先用filebeat +ES+Kibana
解决了日志抓取储存读取的问题,后期会更新文章介绍filebeat +Kafka +logstash +es +kibana的方式构建日志系统