zoukankan      html  css  js  c++  java
  • Docker安装部署ELK (Elasticsearch+Kibana+Logstash+Filebeat)

    ELK是由 Elasticsearch、Logstash和Kibana 三部分组件组成。

    Elasticsearch 是个开源分布式搜索引擎,它的特点有:分布式,零配置,自动发现,索引自动分片,索引副本机制,restful风格接口,多数据源,自动搜索负载等。

    Logstash 是一个完全开源的工具,它可以对你的日志进行收集、分析,并将其存储供以后使用

    kibana 是一个开源和免费的工具,它可以为 Logstash 和 ElasticSearch 提供的日志分析友好的 Web 界面,可以帮助您汇总、分析和搜索重要数据日志。

    Filebeat 是用于单用途数据托运人的平台。它们以轻量级代理的形式安装,并将来自成百上千台机器的数据发送到 Logstash 或 Elasticsearch。

    Docker 镜像统一从 https://hub.docker.com/ 下载 (安装时请使用统一版本)

    、Docker 安装 Elasticsearch

    官网镜像地址:https://hub.docker.com/_/elasticsearch

    找到目前最新的(Tags)是 7.8.0

    # 下载镜像 查看镜像
    docker pull elasticsearch:7.8.0
    docker images
    
    # 创建自定义的网络(用于连接到连接到同一网络的其他服务(例如Kibana))
    docker network create my-network 
    
    # 运行 elasticsearch
    docker run -d --name elasticsearch --net my-network  -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" elasticsearch:7.8.0
    
    # 查看容器状态
    docker ps
    
    # 检测 elasticsearch 是否启动成功
    curl 127.0.0.1:9200
    
    {
    "name": "fa352b46a6b9",
    "cluster_name": "docker-cluster",
    "cluster_uuid": "48E5S_HZS2yLNiZojbQD6w",
    "version": {
    "number": "7.8.0",
    "build_flavor": "default",
    "build_type": "docker",
    "build_hash": "757314695644ea9a1dc2fecd26d1a43856725e65",
    "build_date": "2020-06-14T19:35:50.234439Z",
    "build_snapshot": false,
    "lucene_version": "8.5.1",
    "minimum_wire_compatibility_version": "6.8.0",
    "minimum_index_compatibility_version": "6.0.0-beta1"
    },
    "tagline": "You Know, for Search"
    }
    {
    name: "fa352b46a6b9",
    cluster_name: "docker-cluster",
    cluster_uuid: "48E5S_HZS2yLNiZojbQD6w",
    version: {
    number: "7.8.0",
    build_flavor: "default",
    build_type: "docker",
    build_hash: "757314695644ea9a1dc2fecd26d1a43856725e65",
    build_date: "2020-06-14T19:35:50.234439Z",
    build_snapshot: false,
    lucene_version: "8.5.1",
    minimum_wire_compatibility_version: "6.8.0",
    minimum_index_compatibility_version: "6.0.0-beta1"
    },
    tagline: "You Know, for Search"
    }
    

    Elasticsearch 安装启动完成

    二、Docker 安装 Logstash

    官网镜像地址:https://hub.docker.com/_/logstash

    使用同版本镜像 7.8.0

    # 下载镜像 查看镜像
    docker pull logstash:7.8.0
    docker images
    

    我在工作目录建立一个 docker 目录 并在里面创建了 logstash 目录,用来存放所有配置

    创建目录 /root/docker-root/logstash/config/

    创建文件 /root/docker-root/logstash/config/logstash.yml

    logstash.yml 文件内容

    path.config: /root/docker-root/logstash/conf.d/*.conf
    path.logs: /root/docker-root/logstash/logs
    

    创建文件 /root/docker-root/logstash/conf.d/test.conf

    conf.d/test.conf (文件内容)

    input {
        beats {
            port => 5044
            codec => "json"
        }
    }
    
    output {
      elasticsearch { hosts => ["192.168.0.160:9200"] }
      stdout { codec => rubydebug }
    }
    
    #########################
    input {
        beats {
        port => 5044
        codec => "json"
    }
    }
    
    output {
      elasticsearch { hosts => ["elasticsearch:9200"] }
      stdout { codec => rubydebug }
    }
    

    启动 Logstash

    docker run -d --restart=always --log-driver json-file --log-opt max-size=10m --log-opt max-file=2 -p 5044:5044 --name logstash -v /root/docker-root/logstash/config/logstash.yml:/usr/share/logstash/config/logstash.yml -v /root/docker-root/logstash/conf.d/:/usr/share/logstash/conf.d/ logstash:7.8.0
    

    三、Docker 安装 Kibana

    官网镜像地址:https://hub.docker.com/_/kibana

    使用和 elasticsearch 相同版本镜像 7.8.0 (不一样可能会出现问题)

    # 下载镜像 查看镜像
    docker pull kibana:7.8.0
    docker images
    
    ##创建容器
    docker run -d --name kibana --net my-network -p 5601:5601 -e ELASTICSEARCH_HOSTS=http://192.168.0.160:9200  kibana:7.8.0
    

    Kibana 安装启动完成

    四、Docker 安装 Filebeat

    官网镜像地址:https://hub.docker.com/_/filebeat

    使用同版本镜像 7.8.0

    # 下载镜像 查看镜像
    docker pull store/elastic/filebeat:7.8.0
    docker images
    
    # 下载默认官方配置文件 (暂时在当前目录创建一个 filebeat 目录 用来放 filebeat 配置文件)
    curl -L -O https://raw.githubusercontent.com/elastic/beats/7.1/deploy/docker/filebeat.docker.yml
    
    # 打开配置文件
    vim filebeat.docker.yml
    

    img

    # 增加下面的配置 (收集 .log 数据 把数据发送到当前网络5044端口 (logstash 端口) )
    # 这个地方的 .log 要保证有几条测试数据
    filebeat.inputs:
    - type: log
      enabled: true
      paths:
      - /var/log/nginx/*.log
    
    output.logstash:
      hosts: ['{ip}:5044']
     
    # 运行Filebeat
    
    # 请更改下面两个路径
    {nginx-path} = 本地的日志文件目录(映射到容器中 作为数据源)
    {path} = Filebeat配置文件路径 
    {ip} = elasticsearch 地址
    docker run --name filebeat --user=root -d --net somenetwork --volume="{nginx-path}:/var/log/nginx/" --volume="{path}/filebeat.docker.yml:/usr/share/filebeat/filebeat.yml:ro" --volume="/var/lib/docker/containers:/var/lib/docker/containers:ro" --volume="/var/run/docker.sock:/var/run/docker.sock:ro" store/elastic/filebeat:7.1.1
     
    

    现在去 Kibana 查看数据,已经有数据了

    Kibana 报错解决办法

    在浏览器中输入 http://192.168.0.160:5601/ 页面报错 Kibana server is not ready yet

    启动后报错

    Kibana server is not ready yet

    打印日志,报错:

    #打印日志命令
    [root@localhost ~]# docker logs kibana
    
    {"type":"log","@timestamp":"2020-06-04T08:25:57Z","tags":["warning","elasticsearch","admin"],"pid":6,"message":"Unable to revive connection: http://172.17.0.2:9200/"}
    {"type":"log","@timestamp":"2020-06-04T08:25:57Z","tags":["warning","elasticsearch","admin"],"pid":6,"message":"No living connections"}
    

    进入kibana容器中

    docker exec -it kibana /bin/bash
    bash-4.2$ ping 172.17.0.2    #没有问题,能ping通
    ...
    bash-4.2$ curl http://120.79.43.44:9200
    curl: (7) Failed connect to 120.79.43.44:9200; No route to host
    

    问题就出在这里!容器之间无法进行通信,猜测是防火墙的问题,再单独搜索这个问题,找到了解决的方案

    解决办法如下:

    #配置docker0服务到受信任连接
    [root@localhost ~]# nmcli connection modify docker0 connection.zone trusted
    #停止NetworkManager(检测网络、自动连接网络的程序)服务
    [root@localhost ~]# systemctl stop NetworkManager.service
    #修改docker网络接口为内部区域(永久)
    [root@localhost ~]# firewall-cmd --permanent --zone=trusted --change-interface=docker0
    success
    #启动NetworkManager(检测网络、自动连接网络的程序)服务
    [root@localhost ~]# systemctl start NetworkManager.service
    #配置docker0服务到受信任连接
    [root@localhost ~]# nmcli connection modify docker0 connection.zone trusted
    #重启docker服务
    [root@localhost ~]# systemctl restart docker.service
    

    参考:

    https://www.cnblogs.com/fbtop/p/11005469.html
    https://www.cnblogs.com/hackyo/p/9951684.html
    https://www.cnblogs.com/linjiqin/p/12103645.html

  • 相关阅读:
    HDU 4285
    Codeforces 242C
    Codeforces 811C
    Codeforces 883H
    Codeforces 371D
    Codeforces 926E
    牛客算法周周练17 解题报告
    牛客算法周周练17D
    牛客算法周周练17C
    牛客算法周周练17A
  • 原文地址:https://www.cnblogs.com/z_lb/p/13361823.html
Copyright © 2011-2022 走看看