Docker Desktop安装
ELK + Filebeat安装(所有的坑都排完了)
实现效果
Docker Desktop 是 Docker 在 Windows 10 和 macOS 操作系统上的官方安装方式,这个方法依然属于先在虚拟机中安装 Linux 然后再安装 Docker 的方法。对于大部分开发者来说,方便了太多。注意:此方法仅适用于 Windows 10 操作系统专业版、企业版、教育版和部分家庭版!
1.docker desktop安装es、kibana、logstash、filebeat版本均为7.4.2
Docker Desktop 官方下载地址: https://hub.docker.com/editions/community/docker-ce-desktop-windows
下载安装包,一路next安装完成。正常创建账号并登陆即可。
如果提示下午图,点击图中链接下载wsl,下载后,正常安装就行。
安装完docker desktop,数据默认存储地址是c盘,c盘空间不足的同学可以如下处理
#1)首先关闭docker desktop #2)关闭wsl wsl --shutdown #3)导出(注意,原有的docker images不会一起导出) wsl --export docker-desktop-data F:docker-sharewsldocker-desktop-datadocker-desktop-data.tar #4)注销 wsl --unregister docker-desktop-data #5)重新导入 wsl --import docker-desktop-data F:docker-sharewsldocker-desktop-data F:docker-sharewsldocker-desktop-datadocker-desktop-data.tar --version 2 #F:docker-sharewsldocker-desktop-data 为指定的Docker新存储路径 #F:docker-sharewsldocker-desktop-datadocker-desktop-data.tar备份的地址 6)重新运行Docker Desktop
安装之后,可以打开 Windows PowerShell 并运行以下任一命令检测是否运行成功:
2.ELK + Filebeat安装docker run hello-world
docker version
下载镜像
docker pull elasticsearch:7.4.2
docker pull kibana:7.4.2
docker pull logstash:7.4.2
docker pull elastic/filebeat:7.4.2
在安装过程中常用的命令
#进入容器 docker exec -it logstash bash #使用root用户进入容器 docker exec -it --user=root logstash bash #使用docker-compose docker-compose up -d # 查询日志 docker logs --tail=100 logstashdocker-compose.yml
version: '2'
services:
elasticsearch:
image: elasticsearch:7.4.2
container_name: elasticsearch
environment:
- "cluster.name=elasticsearch-cluster" #设置集群名称为elasticsearch
- "discovery.type=single-node" #以单一节点模式启动
- "ES_JAVA_OPTS=-Xms128m -Xmx256m" #设置使用jvm内存大小
volumes:
# 看注释1
- /f/docker_share/elasticsearch/plugins:/usr/share/elasticsearch/plugins #插件文件挂载
- /f/docker_share/elasticsearch/data:/usr/share/elasticsearch/data #数据文件挂载
- /f/docker_share/elasticsearch/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml #数据文件挂载
ports:
- 9200:9200
privileged: true
kibana:
image: kibana:7.4.2
container_name: kibana
links:
- elasticsearch:elasticsearch #可以用es这个域名访问elasticsearch服务
depends_on:
- elasticsearch #kibana在elasticsearch启动之后再启动
environment:
- "elasticsearch.hosts=http://elasticsearch:9200" #设置访问elasticsearch的地址
- I18N_LOCALE=zh-CN
ports:
- 5601:5601
privileged: true
logstash:
image: logstash:7.4.2
container_name: logstash
depends_on:
- elasticsearch
links:
- elasticsearch:elasticsearch #可以用es这个域名访问elasticsearch服务
ports:
- 4560:4560
privileged: true
volumes:
- /f/docker_share/logstash/conf/beat-test.conf:/usr/share/logstash/pipeline/logstash.conf #挂载logstash的配置文件
filebeat:
image: elastic/filebeat:7.4.2
container_name: filebeat
user: root
privileged: true
volumes:
- /f/docker_share/filebeats/filebeat-7.4.2/data:/usr/share/filebeat/data
- /f/docker_share/filebeats/logs:/usr/share/filebeat/logs
depends_on:
- elasticsearch
- kibana
- logstash
links:
- elasticsearch:elasticsearch #可以用es这个域名访问elasticsearch服务
文件相关配置:
elasticsearch.yml注释1: 此处需要在F:/docker_share/elasticearch中下载ik分词器,https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.4.2/elasticsearch-analysis-ik-7.4.2.zip
cluster.name: elasticsearch-cluster #集群名 node.name: es-node1 #节点名 network.host: 0.0.0.0 #配置外网访问 discovery.zen.minimum_master_nodes: 1 #由于只有一个节点所以discovery.zen.minimum_master_nodes参数是1 network.publish_host: localhost http.port: 9200 transport.tcp.port: 9300 http.cors.enabled: true http.cors.allow-origin: "*" node.master: true node.data: truebeat-test.conf
# 从filebeat中输入
input {
beats {
port => "5044"
}
}
# 输出到es中
output {
# 推荐下面这种写法,比较简洁
elasticsearch {
hosts => [ "172.18.0.2:9200"]
# 刷新频率
#flush_size => 1000
#es中创建索引的名称(注意 index里面不能存在大写字符)
index => "%{[fields][appname]}-%{+YYYY.MM.dd}"
document_type => "log"
}
}
说明
172.18.0.2为es容器的ip,进入es容器,ifconfig查看。如提示commond not found,则安装net-tools,命令: yum install net-tools -y
将以下内容覆盖到/usr/share/filebeat下的filebeat.yml
# 设置filebeat的输入为文件输入
filebeat.inputs:
# 这里可以配置多个path,采集不同应用服务的日志,然后在logstash中按照应用服务名为index保存到es中
- type: log
enabled: true
# 采集指定目录的日志(模拟采集第一个应用服务的日志)
paths:
- /usr/share/filebeat/logs/test-admin1-2021-12-16.log
# 指定应用程序日志type,方便后面logstash在es中对不同的应用服务日志创建不同的索引
fields:
appname: /test-admin1
# 将属性放到根下 比如 appname 属性,在其他地方访问直接 [appname] 即可访问,不开启的话需要 [fields][appname]才能访问
#fields_under_root: true
- type: log
enabled: true
# 采集指定目录的日志(模拟采集第二个应用服务的日志)
paths:
- /usr/share/filebeat/logs/test-admin-2021-12-16.log
# 指定应用程序日志type,方便后面logstash在es中对不同的应用服务日志创建不同的索引
fields:
appname: /test-admin
#fields_under_root: true
# 指定索引的分区数
setup.template.settings:
index.number_of_shards: 3
#指定logstash的配置,日志采集后输出到logstash中
output.logstash:
hosts: ["172.18.0.4:5044"]
说明:path下的日志,是我本地应用的运行日志,然后挂载到了filebeat容器上的 /usr/share/filebeat/logs目录,以此方式来模拟线上应用的日志文件
效果



