一、自定义网络

保证同一网络下的容器 (ElasticSearch、Logstash、Kibana)相互访问。

  • 创建自定义网络elk
docker network create elk
  • 查看已有网络
docker network ls

Docker自带3种网络模式 bridge、host、none
image.png

  • 删除已有网络
docker network rm elk

二、ELK 部署

1、ElasticSerach 部署

  1. 创建目录
mkdir -p /opt/elasticsearch/{config,data}
chmod 777 /opt/elasticsearch/{config,data}
  1. 拉取镜像
docker pull elasticsearch:7.14.1
  1. 配置文件
    创建配置文件elasticsearch.yml
vi /opt/elasticsearch/config/elasticsearch.yml

添加配置信息

# 允许通过本机所有IP访问
http.host: 0.0.0.0
# 是否支持跨域,默认为false
http.cors.enabled: true 
http.cors.allow-origin: "*" 
  1. 创建和启动容器
docker run -d --name elasticsearch --net elk --restart always --privileged=true \
-p 9200:9200 -p 9300:9300  \
-e "ES_JAVA_OPTS=-Xms2048m -Xmx2048m" \
-e "discovery.type=single-node" \
-v /opt/elasticsearch/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml \
-v /opt/elasticsearch/data:/usr/share/elasticsearch/data \
elasticsearch:7.14.1

JVM堆内存大小设置 128M 时,安装 IK 分词器的时候会报错,建议堆内存设置至少 256M。

  1. 安装IK分词器

访问 https://github.com/medcl/elasticsearch-analysis-ik/releases

https://github.com/medcl/elasticsearch-analysis-ik/releases 查找与 ElasticSearch 版本对应的分词器,复制其完整下载地址。
image.png

docker exec -it elasticsearch /bin/sh
cd bin/
elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.14.1/elasticsearch-analysis-ik-7.14.1.zip

查看已安装的IK分词器

elasticsearch-plugin list

重启 ElasticSearch

docker restart elasticsearch

如果想删除分词器执行以下命令:

elasticsearch-plugin remove analysis-ik

2、Kibana 部署

  1. 拉取镜像
docker pull kibana:7.14.1
  1. 创建和启动容器
docker run -d --name kibana --net elk --restart always -p 5601:5601 kibana:7.14.1

访问 http://xxxxxxx:5601 ,可以看到Kibana界面
image.png

3、Logstash 部署

  1. 拉取镜像
docker pull logstash:7.14.1
  1. 创建目录
mkdir -p /opt/logstash/{config,data,pipeline}
chmod 777 /opt/logstash/{config,data,pipeline} 
  1. 配置文件
  • 设置JVM堆内存大小
vi /opt/logstash/config/jvm.options

添加配置信息

-Xmx128m
-Xms128m
  • Logstash配置
vi /opt/logstash/config/logstash.yml

添加配置信息

# 允许通过本机所有IP访问
http.host: "0.0.0.0"
# 指定使用管道ID
xpack.management.pipeline.id: ["main"]
  • 管道ID和配置文件路径映射
vi /opt/logstash/config/pipelines.yml 

添加管道ID和管道配置文件目录映射,注意符号 - 前后都要有空格(巨坑)

 - pipeline.id: main
   path.config: "/usr/share/logstash/pipeline"

image.png

  • 管道配置
    添加 有来商城 微服务应用日志管道配置,在上面指定了管道配置容器目录 /usr/share/logstash/pipeline , 后面启动 Logstash 时会将其挂载至宿主机目录 /opt/logstash/pipeline,接下来只要在宿主机目录下添加管道配置文件 youlai-log.config 就可以被 Logstash 自动加载生效。
vi /opt/logstash/pipeline/youlai-log.config

添加完整内容如下

input {
 beats {
    port => 5044
    client_inactivity_timeout => 36000
  }
}
filter {
   mutate {
        remove_field => ["@version"]
        remove_field => ["tags"]
   }
}
output {
  if [appname] == "youlai-admin" {
     elasticsearch {
       hosts => "http://elasticsearch:9200"
       index => "youlai-admin-log"
     }
  }else if [appname] == "youlai-auth" {
     elasticsearch {
       hosts => "http://elasticsearch:9200"
       index => "youlai-auth-log"
     }
  }
  stdout {}
}

可以看到在 output 里根据 appname 生成的不同索引库,其中 appname 是 filebeat 自定义字段,目的区分多应用日志,自定义字段在 Filebeat部署的时候定义。

  1. 创建和启动容器
docker run -d --name logstash --net elk --restart always \
-p 5044:5044 -p 9600:9600 \
-v /opt/logstash/config:/usr/share/logstash/config \
-v /opt/logstash/data:/usr/share/logstash/data \
-v /opt/logstash/pipeline:/usr/share/logstash/pipeline \
logstash:7.14.1

4、Filebeat 部署

  1. 拉取镜像
docker pull elastic/filebeat:7.14.1
  1. 目录创建
mkdir -p /opt/filebeat/config
chmod 777 /opt/filebeat/config
  1. 配置文件
    添加 filebeat.yml 配置文件
vi /opt/filebeat/config/filebeat.yml

添加如下配置:

filebeat.inputs:
- type: log
  enabled: true
  paths:
  - /logs/youlai-admin/log.log
  fields:
    appname: youlai-admin  # 自定义字段,提供给 Logstash 用于区分日志来源
  fields_under_root: true  # 开启自定义字段
- type: log
  enabled: true
  paths:
  - /logs/youlai-auth/log.log
  fields:
    appname: youlai-auth
  fields_under_root: true

processors:
  - drop_fields:
      fields: ["log","input","host","agent","ecs"] # 过滤不需要的字段

output.logstash:
  hosts: ['47.104.214.204:5044']
  • /logs/youlai-admin/log.log 是应用 youlai-admin 输出的日志文件路径
  • 47.104.214.204 是部署 Logstash 服务器的IP地址
  1. 容器创建和启动
docker run -d --name filebeat --restart=always \
--log-driver json-file \
--log-opt max-size=100m \
--log-opt max-file=2  \
-v /logs:/logs \
-v /opt/filebeat/config/filebeat.yml:/usr/share/filebeat/filebeat.yml \
elastic/filebeat:7.14.1

转:https://www.cnblogs.com/haoxianrui/p/15336249.html https://www.cnblogs.com/haoxianrui/p/15336249.html