ELK 8.4.3 docker 保姆级安装部署详细步骤

一、前言

  • 日志主要包括系统日志和应用程序日志,运维和开发人员可以通过日志了解服务器中软硬件的信息,检查应用程序或系统的故障,了解故障出现的原因,以便解决问题。分析日志可以更清楚的了解服务器的状态和系统安全状况,从而可以维护服务器稳定运行。

二、ELK简介

  • ELK主要由ElasticSearch、Logstash和Kibana三个开源工具组成,还有其他专门由于收集数据的轻量型数据采集器Beats。
  • Elasticsearch :分布式搜索引擎。具有高可伸缩、高可靠、易管理等特点。可以用于全文检索、结构化检索和分析,并能将这三者结合起来。Elasticsearch 是用Java 基于 Lucene 开发,现在使用最广的开源搜索引擎之一,Wikipedia 、StackOverflow、Github 等都基于它来构建自己的搜索引擎。在elasticsearch中,所有节点的数据是均等的。
  • Logstash :数据收集处理引擎。支持动态的从各种数据源搜集数据,并对数据进行过滤、分析、丰富、统一格式等操作,然后存储以供后续使用。
  • Kibana :可视化化平台。它能够搜索、展示存储在 Elasticsearch 中索引数据。使用它可以很方便的用图表、表格、地图展示和分析数据。
  • Filebeat:轻量级数据收集引擎。相对于Logstash所占用的系统资源来说,Filebeat 所占用的系统资源几乎是微乎及微。它是基于原先 Logstash-fowarder 的源码改造出来。换句话说:Filebeat就是新版的 Logstash-fowarder,也会是 ELK Stack 在 Agent 的第一选择。

三、版本说明

  • Elasticsearch、Logstash、Kibana、Filebeat安装的版本号必须全部一致,不然会出现kibana无法显示web页面。
  • ELK常见的几种架构:

    1.Elasticsearch + Logstash + Kibana

    这是一种最简单的架构。这种架构,通过logstash收集日志,Elasticsearch分析日志,然后在Kibana(web界面)中展示。这种架构虽然是官网介绍里的方式,但是往往在生产中很少使用。

    2.Elasticsearch + Logstash + filebeat + Kibana

    与上一种架构相比,这种架构增加了一个filebeat模块。filebeat是一个轻量的日志收集代理,用来部署在客户端,优势是消耗非常少的资源(较logstash), 所以生产中,往往会采取这种架构方式,但是这种架构有一个缺点,当logstash出现故障, 会造成日志的丢失。

    3.Elasticsearch + Logstash + filebeat + redis(也可以是其他中间件,比如RabbitMQ) + Kibana

    这种架构是上面那个架构的完善版,通过增加中间件,来避免数据的丢失。当Logstash出现故障,日志还是存在中间件中,当Logstash再次启动,则会读取中间件中积压的日志。
    本次安装ELK根据自身需求选择了Elasticsearch + Logstash + filebeat + Kibana架构

四、安装部署

  • 创建docker网络

    docker network create -d bridge elastic
    
  • Elasticsearch

    1. 版本:8.4.3

    2. 拉取docker镜像

    docker pull elasticsearch:8.4.3
    

    3. 第一次执行docker脚本

    docker run -it \
        -p 9200:9200 \
        -p 9300:9300 \
        --name elasticsearch \
        --net elastic \
        -e ES_JAVA_OPTS="-Xms1g -Xmx1g" \
        -e "discovery.type=single-node" \
        -e LANG=C.UTF-8 \
        -e LC_ALL=C.UTF-8 \
        elasticsearch:8.4.3
    

    注意第一次执行脚本不要加-d这个参数,否则看不到服务首次运行时生成的随机密码和随机enrollment token

    4. 可以看到控制台的信息,找到这个信息并保存下来

    image.png

    5. 创建Elasticsearch挂载目录

    mkdir /home/xxx/elk8.4.3/elasticsearch
    

    6. 给创建的文件夹授权

    sudo chown -R 1000:1000 /home/xxx/elk8.4.3/elasticsearch
    

    7、将容器内的文件复制到主机上

    docker cp elasticsearch:/usr/share/elasticsearch/config /home/xxx/elk8.4.3/elasticsearch/        
    
    docker cp elasticsearch:/usr/share/elasticsearch/data /home/xxx/elk8.4.3/elasticsearch/
    
    docker cp elasticsearch:/usr/share/elasticsearch/plugins /home/xxx/elk8.4.3/elasticsearch/
    
    docker cp elasticsearch:/usr/share/elasticsearch/logs /home/xxx/elk8.4.3/elasticsearch/
    

    8. 删除容器

    docker rm -f elasticsearch
    

    9.修改docker脚本,增加-v挂载目录和-d参数

    docker run -it \
        -d \
        -p 9200:9200 \
        -p 9300:9300 \
        --name elasticsearch \
        --net elastic \
        -e ES_JAVA_OPTS="-Xms1g -Xmx1g" \
        -e "discovery.type=single-node" \
        -e LANG=C.UTF-8 \
        -e LC_ALL=C.UTF-8 \
        -v /home/xxx/elk8.4.3/elasticsearch/config:/usr/share/elasticsearch/config \
        -v /home/xxx/elk8.4.3/elasticsearch/data:/usr/share/elasticsearch/data \
        -v /home/xxx/elk8.4.3/elasticsearch/plugins:/usr/share/elasticsearch/plugins \
        -v /home/xxx/elk8.4.3/elasticsearch/logs:/usr/share/elasticsearch/logs \
        elasticsearch:8.4.3
    

    10.修改配置/home/xxx/elk8.4.3/elasticsearch/config/elasticsearch.yml:

    • 增加:xpack.monitoring.collection.enabled: true
    • 说明:添加这个配置以后在kibana中才会显示联机状态,否则会显示脱机状态
    • 参考配置:
      image.png
    • 重启容器
    docker restart elasticsearch
    

    11.Elasticsearch8以上默认开启了X-Pack 安全功能

    • 说明:请求Elasticsearch必须使用https
    • 测试:https://ip:9200
      image.png
    • 用户名就是:elastic
    • 密码在第一次启动时保存下来的信息中查找
    • 然后看到这种信息说明启动成功了


      image.png
  • Kibana

    1. 版本:8.4.3

    2. 拉取镜像

    docker pull kibana:8.4.3
    

    3. 第一次执行docker启动脚本

    docker run -it \
        -d \
        --restart=always \
        --log-driver json-file \
        --log-opt max-size=100m \
        --log-opt max-file=2 \
        --name kibana \
        -p 5601:5601 \
        --net elastic \
        kibana:8.4.3
    

    4. 创建kibana挂载目录

    mkdir /home/xxx/elk8.4.3/kibana
    

    5. 给创建的文件授权

    sudo chown -R 1000:1000 /home/xxx/elk8.4.3/kibana
    

    6、将容器内的文件复制到主机上

    docker cp kibana:/usr/share/kibana/config /home/xxx/elk8.4.3/kibana/        
    
    docker cp kibana:/usr/share/kibana/data /home/xxx/elk8.4.3/kibana/        
    
    docker cp kibana:/usr/share/kibana/plugins /home/xxx/elk8.4.3/kibana/        
    
    docker cp kibana:/usr/share/kibana/logs /home/xxx/elk8.4.3/kibana/        
    

    7.修改配置文件/home/xxx/elk8.4.3/kibana/config/kibana.yml:

    • 增加:i18n.locale: "zh-CN"
    • 修改:elasticsearch.hosts: ['https://172.20.0.2:9200'],将IP改成elasticsearch的docker ip,注意一定要用https
    • 修改:xpack.fleet.outputs: [{id: fleet-default-output, name: default, is_default: true, is_default_monitoring: true, type: elasticsearch, hosts: ['https://172.20.0.2:9200'], ca_trusted_fingerprint: xxxxxxxxxx}]
      将IP改成elasticsearch的docker ip,注意一定要用https


      image.png

    8. 删除容器

    docker rm -f kibana
    

    9. 修改docker启动脚本,增加挂载目录

    docker run -it \
        -d \
        --restart=always \
        --log-driver json-file \
        --log-opt max-size=100m \
        --log-opt max-file=2 \
        --name kibana \
        -p 5601:5601 \
        --net elastic \
        -v /home/xxx/elk8.4.3/kibana/config:/usr/share/kibana/config \
        -v /home/xxx/elk8.4.3/kibana/data:/usr/share/kibana/data \
        -v /home/xxx/elk8.4.3/kibana/plugins:/usr/share/kibana/plugins \
        -v /home/xxx/elk8.4.3/kibana/logs:/usr/share/kibana/logs \
        kibana:8.4.3
    

    10. 查看kibana日志

    docker logs -f kibana
    

    11. 打开浏览器http://ip:5601,使用elastic用户的密码进行认证

    • 第一次访问改链接的时候需要填入令牌,令牌就是第一次启动elasticsearch时保存的信息中的token,注意这个token只有30分钟的有效期,如果过期了只能进入容器重置token


      image.png
    • 重置token:进入容器执行

    /bin/elasticsearch-create-enrollment-token -s kibana --url "https://127.0.0.1:9200"    
    

    12. 输入token以后会看到一个验证码框,验证码从kibana的日志中获取

image.png

#### 13. 输入用户名:elastic,密码:第一次启动elasticsearch保存的密码


image.png
  • Logstash

    1. 版本:8.4.3

    2. 拉取镜像

    docker pull logstash:8.4.3
    

    3. 第一次执行docker启动脚本

    docker run -it \
        -d \
        --name logstash \
        -p 9600:9600 \
        -p 5044:5044 \
        --net elastic \
        logstash:8.4.3
    

    4. 创建logstash挂载目录

    mkdir /home/xxx/elk8.4.3/logstash
    

    5. 给创建的文件授权

    sudo chown -R 1000:1000 /home/xxx/elk8.4.3/logstash
    

    6. 将容器内的文件复制到主机上

    docker cp logstash:/usr/share/logstash/config /home/xxx/elk8.4.3/logstash/ 
    
    docker cp logstash:/usr/share/logstash/pipeline /home/xxx/elk8.4.3/logstash/ 
    

    7. 将/home/xxx/elk8.4.3/logstash/elasticsearch/config/certs复制到/home/xxx/elk8.4.3/logstash/config/certs

    sudo cp /home/xxx/elk8.4.3/logstash/elasticsearch/config/certs /home/xxx/elk8.4.3/logstash/config/certs
    

    8. 修改配置/home/xxx/elk8.4.3/logstash/config/logstash.yml

    http.host: "0.0.0.0"
    xpack.monitoring.enabled: true
    xpack.monitoring.elasticsearch.hosts: [ "https://172.20.0.2:9200" ]
    xpack.monitoring.elasticsearch.username: "elastic"
    xpack.monitoring.elasticsearch.password: "第一次启动elasticsearch是保存的信息中查找"
    xpack.monitoring.elasticsearch.ssl.certificate_authority: "/usr/share/logstash/config/certs/http_ca.crt"
    xpack.monitoring.elasticsearch.ssl.ca_trusted_fingerprint: "第一次启动elasticsearch是保存的信息中查找"
    
    <font color="red">注意:</font> https://172.20.0.2:9200,必须是https,IP是elasticsearch的docker IP

    9. 修改配置/home/xxx/elk8.4.3/logstash/pipeline/logstash.conf

    input {
      beats {
        port => 5044
      }
    }
    
    filter {
      date {
        match => [ "@timestamp", "yyyy-MM-dd HH:mm:ss Z" ]
      }
      mutate {
        remove_field => ["@version", "agent", "cloud", "host", "input", "log", "tags", "_index", "_source", "ecs", "event"]
      }
    }
    
    output {
      elasticsearch {
        hosts => ["https://172.20.0.2:9200"]
        index => "server-%{+YYYY.MM.dd}"
        ssl => true
        ssl_certificate_verification => false
        cacert => "/usr/share/logstash/config/certs/http_ca.crt"
        ca_trusted_fingerprint => "第一次启动elasticsearch是保存的信息中查找"
        user => "elastic"
        password => "第一次启动elasticsearch是保存的信息中查找"
      }
    }
    
    注意: https://172.20.0.2:9200,必须是https,IP是elasticsearch的docker IP
    index 是索引名称

    10. 删除容器

    docker rm -f logstash
    

    11. 修改docker启动命令,加上-v挂载目录

    docker run -it \
        -d \
        --name logstash \
        -p 9600:9600 \
        -p 5044:5044 \
        --net elastic \
        -v /home/appuser/docker-images/elk8_4_3/logstash/config:/usr/share/logstash/config \
        -v /home/appuser/docker-images/elk8_4_3/logstash/pipeline:/usr/share/logstash/pipeline \
        logstash:8.4.3
    
  • filebeat

    1. 版本:8.4.3

    2. 拉取镜像

    docker pull elastic/filebeat:8.4.3
    

    3. 第一次执行docker启动脚本

    docker run -it \
        -d \
        --name filebeat \
        --network host \
        -e TZ=Asia/Shanghai \
        elastic/filebeat:8.4.3 \
        filebeat -e  -c /usr/share/filebeat/filebeat.yml
    

    4. 创建filebeat挂载目录

    mkdir /home/xxx/elk8.4.3/filebeat
    

    5. 给创建的文件授权

    sudo chown -R 1000:1000 /home/xxx/elk8.4.3/filebeat
    

    6. 将容器内的文件复制到主机上

    docker cp filebeat:/usr/share/filebeat/filebeat.yml /home/xxx/elk8.4.3/filebeat/ 
    
    docker cp filebeat:/usr/share/filebeat/data /home/xxx/elk8.4.3/filebeat/ 
    
    docker cp filebeat:/usr/share/filebeat/logs /home/xxx/elk8.4.3/filebeat/ 
    

    7. 修改配置/home/xxx/elk8.4.3/filebeat/filebeat.yml

    filebeat.config:
      modules:
        path: ${path.config}/modules.d/*.yml
        reload.enabled: false
    
    processors:
      - add_cloud_metadata: ~
      - add_docker_metadata: ~
    
    output.logstash:
      enabled: true
      # The Logstash hosts
      hosts: ["localhost:5044"]
    
    filebeat.inputs:
    - type: log
      enabled: true
      paths:
        - /usr/share/filebeat/target/*/*/*.log. # 这个路径是需要收集的日志路径,是docker容器中的路径
      scan_frequency: 10s
      exclude_lines: ['HEAD']
      exclude_lines: ['HTTP/1.1']
      multiline.pattern: '^[[:space:]]+(at|\.{3})\b|Exception|捕获异常'
      multiline.negate: false
      multiline.match: after
    

    8. 删除容器

    docker rm -f filebeat
    

    9. 修改docker启动脚本,增加-v挂载目录

    docker run -it \
        -d \
        --name filebeat \
        --network host \
        -e TZ=Asia/Shanghai \
        -v /home/xxx/log:/usr/share/filebeat/target \
        -v /home/xxx/elk8.4.3/filebeat/filebeat.yml:/usr/share/filebeat/filebeat.yml \
        -v /home/xxx/elk8.4.3/filebeat/data:/usr/share/filebeat/data \
      -v /home/xxx/elk8.4.3/filebeat/logs:/usr/share/filebeat/logs \
        elastic/filebeat:8.4.3 \
        filebeat -e  -c /usr/share/filebeat/filebeat.yml
    
    注意: -v /home/xxx/log:/usr/share/filebeat/target 这个是你需要收集的日志目录,需要挂载到容器中
  • 配置完成

    • 在kibana中查看信息


      image.png
    • 查看索引


      image.png

      image.png

      如果能看到自己配置的索引说明安装配置成功

    • 查看日志


      image.png
    • 如果没有你的日志,需要先创建数据视图,选择你创建的索引


      image.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,948评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,371评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,490评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,521评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,627评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,842评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,997评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,741评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,203评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,534评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,673评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,339评论 4 330
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,955评论 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,770评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,000评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,394评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,562评论 2 349

推荐阅读更多精彩内容