zoukankan      html  css  js  c++  java
  • Docker搭建ELK Stack企业日志平台

    ELK Stack企业日志平台介绍

    ELK是由 Elasticsearch(搜索引擎)、Logstash(日志收集)和Kibana(可视化平台) 三部分组件组成。
    本文中还引入了filebeat工具,相对于logstash,filebeat的资源占用率更低。

    ELK Stack企业日志平台安装部署

    本文采用的ELk镜像为 https://hub.docker.com/ 提供的官方镜像,也有很多非官方的集成好的elk镜像,部署方式大同小异,大家可以自行研究。部署时尽量采用相同版本的镜像,已避免不必要的报错。

    一、Docker 安装 Elasticsearch

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

    docker pull elasticsearch:7.1.1
    [root@k8s-node3 ~]# docker images | grep elasticsearch
    elasticsearch                        7.1.1               b0e9f9f047e6        6 months ago        894MB

    #创建自定义的网络(用于连接到连接到同一网络的其他服务(例如Kibana)

    docker network create elk

    #查看docker网络

    [root@k8s-node3 ~]# docker network ls
    NETWORK ID          NAME                DRIVER              SCOPE
    87080f2eb5a4        bridge              bridge              local
    6835f763c78c        elk                 bridge              local
    31359fc68c80        host                host                local
    3890144a8de2        none                null                local

    #运行 elasticsearch

    docker run -d --name elasticsearch --net elk -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" elasticsearch:7.1.1

    #如果提示docker WARNING: IPv4 forwarding is disabled.
    解决方法:
    #在宿主机上面执行:

    echo “net.ipv4.ip_forward=1” >> /usr/lib/sysctl.d/00-system.conf

    #重启docker服务

    systemctl restart docker

    查看容器状态

    [root@k8s-node3 ~]# docker ps | grep elasticsearch
    ab49020cb285        elasticsearch:7.1.1   "/usr/local/bin/dock…"   20 hours ago        Up 19 hours         0.0.0.0:9200->9200/tcp, 0.0.0.0:9300->9300/tcp   elasticsearch

    #检测 elasticsearch 是否启动成功

    [root@k8s-node3 ~]# curl 127.0.0.1:9200
    {
      "name" : "ab49020cb285",
      "cluster_name" : "docker-cluster",
      "cluster_uuid" : "iATljVk3S7SDk1tp7p8HPg",
      "version" : {
        "number" : "7.1.1",
        "build_flavor" : "default",
        "build_type" : "docker",
        "build_hash" : "7a013de",
        "build_date" : "2019-05-23T14:04:00.380842Z",
        "build_snapshot" : false,
        "lucene_version" : "8.0.0",
        "minimum_wire_compatibility_version" : "6.8.0",
        "minimum_index_compatibility_version" : "6.0.0-beta1"
      },
      "tagline" : "You Know, for Search"
    }

    Elasticsearch 安装启动完成

    二、Docker 安装 Kibana

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

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

    下载镜像 查看镜像

    docker pull kibana:7.1.1
    [root@k8s-node3 ~]# docker images | grep kibana
    kibana                               7.1.1               67f17df6ca3e        6 months ago        746MB

    注意:在本例中,Kibana使用默认配置,并希望连接到正在运行的Elasticsearch实例http://localhost:9200

    运行 Kibana

    docker run -d --name kibana --net elk -p 5601:5601 kibana:7.1.1

    查看容器启动状态

    [root@k8s-node3 ~]# docker ps | grep kibana
    c25a6db6d517        kibana:7.1.1          "/usr/local/bin/kiba…"   20 hours ago        Up 20 hours         0.0.0.0:5601->5601/tcp                           kibana

    访问 http://ip:5601 (启动可能会较慢,如失败等几秒再尝试刷新一下)

     

    Kibana 安装启动完成

    三、Docker 安装 Logstash

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

    使用同版本镜像 7.1.1

    下载镜像 查看镜像

    docker pull logstash:7.1.1
    [root@k8s-node3 ~]# docker images | grep logstash
    logstash                             7.1.1               b0cb1543380d        6 months ago        847MB

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

    [root@k8s-node3 logstash]# pwd
    /root/logstash
    [root@k8s-node3 logstash]# ls
    conf.d  logstash.yml

    logstash.yml (文件内容)

    [root@k8s-node3 logstash]# cat logstash.yml 
    path.config: /usr/share/logstash/conf.d/*.conf
    path.logs: /var/log/logstash

    下面是我用来测试的收集日志的配置文件

    [root@k8s-node3 conf.d]# pwd
    /root/logstash/conf.d
    [root@k8s-node3 conf.d]# ls
    test.conf
    [root@k8s-node3 conf.d]# cat test.conf 
    input {
       file {
            path => ["/usr/share/logstash/log/test.info.log"]
            type => "test-info"
            start_position => "beginning"
       }
       file {
            path => ["/usr/share/logstash/log/test.error.log"]
            type => "test-error"
            start_position => "beginning"
       }
    }
    filter {
        date {
           match => ["timestamp","yyyy-MM-dd HH:mm:ss"]
           remove_field => "timestamp"
        }
    }
    output {
        if [type] == "test-info" {
             elasticsearch {
                hosts  => ["elasticsearch:9200"]
                index  => "certification-info-%{+YYYY.MM.dd}"
             }
        }
        if [type] == "test-error" {
             elasticsearch {
                hosts  => ["elasticsearch:9200"]
                index  => "certification-error-%{+YYYY.MM.dd}"
             }
        }
    }

    启动 Logstash

    记得映射上面两个目录 {path}

    docker run -it -d -p 5044:5044 --name logstash --net elk -v /root/logstash/logstash.yml:/usr/share/logstash/config/logstash.yml -v /root/logstash/conf.d/:/usr/share/logstash/conf.d/ logstash:7.1.1

    查看容器运行状态 

    [root@k8s-node3 conf.d]# docker ps | grep logstash
    fbc97c3ec892        logstash:7.1.1        "/usr/local/bin/dock…"   20 hours ago        Up 17 hours         0.0.0.0:5044->5044/tcp, 9600/tcp                 logstash

    启动成功

    此时,登录kibana平台,可以看到收集的数据

    ps:这个收集的日志,是我进入到/usr/share/logstash/log/目录下创建的test.info.log和test.erro.log。若要收集宿主机的某个日志,只要启动容器时将宿主机上的日志路径映射到/usr/share/logstash/log/目录即可。/usr/share/logstash/log/目录并非固定,而是根据/root/logstash/conf.d/*.conf的配置文件内容而定。

    四、Docker 安装 Filebeat

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

    使用同版本镜像 7.1.1

    下载镜像 查看镜像

    docker pull store/elastic/filebeat:7.1.1
    [root@k8s-node3 conf.d]# docker images |grep filebeat
    store/elastic/filebeat               7.1.1               0bd69a03e199        6 months ago        288MB

    下载默认官方配置文件 (暂时在当前目录创建一个 filebeat 目录 用来放 filebeat 配置文件)

    curl -L -O https://raw.githubusercontent.com/elastic/beats/7.1/deploy/docker/filebeat.docker.yml

    打开配置文件 

    vim filebeat.docker.yml

    增加下面的配置 (收集 .log 数据 把数据发送到当前网络5044端口 (logstash 端口) )
    这个地方的 .log 要保证有几条测试的内容

    [root@k8s-node3 ~]# cat filebeat.docker.yml 
    #filebeat.config:
    #modules:
    #path: ${path.config}/modules.d/*.yml
    #reload.enabled: false
    #filebeat.autodiscover:
    #providers:
    #- type: docker
    #hints.enabled: true
    #processors:
    #- add_cloud_metadata: ~
    #output.elasticsearch:
    #hosts: '${ELASTICSEARCH_HOSTS:elasticsearch:9200}'
    #username: '${ELASTICSEARCH_USERNAME:}'
    #password: '${ELASTICSEARCH_PASSWORD:}'
    
    filebeat.inputs:
    - type: log
      enabled: true
      paths:
      - /var/log/test911/*.log
     
    output.logstash:
      hosts: ['192.168.31.193:5044']

    运行Filebeat

    docker run --name filebeat --user=root -d   --volume="/var/log/test911:/var/log/test911/" --volume="/root/filebeat.docker.yml:/usr/share/filebeat/filebeat.yml:ro"  store/elastic/filebeat:7.1.1

    查看容器启动状态 

    [root@k8s-node3 ~]# docker ps | grep filebeat
    40208dfe0dfe        store/elastic/filebeat:7.1.1   "/usr/local/bin/dock…"   3 hours ago         Up 8 seconds  

    启动成功

    使用filebeat收集日志,需要对logstash的配置文件进行修改,修改如下:

    [root@k8s-node3 conf.d]# pwd
    /root/logstash/conf.d
    [root@k8s-node3 conf.d]# ls
    test.conf
    [root@k8s-node3 conf.d]# cat test.conf 
    input {
        beats {
        port => 5044
        codec => "json"
        }
    }
    
    output {
      elasticsearch { hosts => ["elasticsearch:9200"] }
      stdout { codec => rubydebug }
    }

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

    若想要收集其他服务器上的日志,只需要在其他服务上部署filebeat即可,前提是要保证网络互通,要能访问logstash的5044端口。

    大家需要按照自己的需求修改相应的配置!

  • 相关阅读:
    django模型层(二)多表操作
    django模型层(一)单表操作
    模板系统
    HTTP协议web开发知识点
    视图函数
    URL路由系统
    web框架的本质
    MySQL多表查询
    MySQL单标查询
    列表渲染
  • 原文地址:https://www.cnblogs.com/xinxing1994/p/11957081.html
Copyright © 2011-2022 走看看