docker 部署 filebeat + ELK 7.14.1

2,394 阅读2分钟

docker 部署 filebeat + ELK 7.14.1

一、前置准备

  • 部署环境: centos + docker
  • 镜像选择:
    • elasticsearch:7.14.1
    • kibana:7.14.1
    • logstash:7.14.1
    • elastic/filebeat:7.14.1
  • 环境工作流程
    graph TD
    Start --> filebeat读取日志文件;
    filebeat读取日志文件 --> logstash接收filebeat数据;
    logstash接收filebeat数据 -->elasticsearch接收数据;
    elasticsearch接收数据 --> kibana展示数据;
    
    

二、安装镜像

1. 创建docker桥接网络

创建网络,用于各容器的交互

    docker network create elk

2. 创建文件夹

创建文件夹存放相关配置文件,文件结构:

文件路径.jpg

3. 创建各软件的配置文件

  1. es

vim elasticsearch.yml


# start

cluster.name: "elasticsearch"

node.name: "es-node-1"

# 设置主结点名, 注意,需要是已存在的node.name

cluster.initial_master_nodes: "es-node-1"

network.host: "0.0.0.0"

http.cors.enabled: true        # 是否支持跨域

http.cors.allow-origin: "*"    # 表示支持所有域名


# end

  1. logstash

vim logstash.yml

#start


#模块配置文件地址

path.config: /usr/share/logstash/config/*.conf

xpack.monitoring.enabled: true

xpack.monitoring.elasticsearch.hosts: ["http://elasticsearch:9200"]


#end


vim logstash.cof

input{

  beats {

     port => 5044

     codec => "json"

     id => 'beat_test'

  }

}


output{

  elasticsearch {

        hosts => ["http://elasticsearch:9200"]

        index => "logtest"

  }

  stdout {

       codec => rubydebug

  }

}

  1. kibana

vim kibana.yml

server.host: "0.0.0.0"

elasticsearch.hosts: [ "http://elasticsearch:9200" ]

monitoring.ui.container.elasticsearch.enabled: true


  1. filebeat

vim filebeat.yml


filebeat.inputs:

  - type: log

    enabled: true

    paths:

      - /usr/share/filebeat/data/*.log

    fields_under_root: true

output.logstash:

  hosts: ["logstash:5044"]

4. 编写docker-compose


vim docker-compose.yml

version: '3'

services:

  elasticsearch:

    image: elasticsearch:7.14.1

    ports:

      - 9200:9200

    restart: always

    container_name: elasticsearch

    volumes:

      # 使用本地配置文件

      # [本地文件]:[docker容器内的文件或地址]

      - /usr/local/docker/ELK/elasticsearch/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml

    networks:

      - elk

  kibana:

    image: kibana:7.14.1

    ports:

      - 5601:5601

    restart: always

    container_name: kibana

    networks:

      - elk

    volumes:

      - /usr/local/docker/ELK/kibana/kibana.yml:/usr/share/kibana/config/kibana.yml

  logstah:

    image: logstash:7.14.1

    restart: always

    container_name: logstash

    networks:

      - elk

    ports:

      - 5044:5044

      - 5045:5045

    volumes:

      - /usr/local/docker/ELK/logstash/logstash.conf:/usr/share/logstash/config/logstash.conf

      - /usr/local/docker/ELK/logstash/logstash.yml:/usr/share/logstash/config/logstash.yml

      - /usr/local/docker/ELK/log/:/usr/share/logstash/data/

  filebeat:

    image: "elastic/filebeat:7.14.1"

    restart: always

    container_name: filebeat

    networks:

      - elk

    volumes:

      - /usr/local/docker/ELK/filebeat/filebeat.yml:/usr/share/filebeat/filebeat.yml

      # docker容器日志挂到本地

      - /usr/local/docker/ELK/filebeat/log:/usr/share/filebeat/log

      # filebeat 读取本地地址

      - /usr/local/docker/ELK/filebeat/data:/usr/share/filebeat/data

networks:

  # 使用本地已创建网络

  elk:

    external: true


5. 运行

 docker-compose up -d

三、遇到的问题

  1. 文件挂在问题

 > 答: 刚开始配置镜像启动目录,都是直接抄网上的说法,最后发现启动成功,但是配置无法生效,最后发现是因为docker镜像内的配置文件路径不对,容器启动配置不生效。可以启动一个空的容器,查看一下,7.14.1 版本的配置地址都是 "/usr/share/*" 里,其他版本不清楚,官方也没找到具体的说明。

  1. Kibana server is not ready yet 问题

 > 答: 1) es未成功启动 2)网络问题,kibana无法连接es

  1. logstash的连接问题

 > logstash 的容器配置里有一份链接es的配置样例文件,启动后会连接localhost:9200, 我一开始没注意,以为是我的配置文件出错了,如果不需要,可以删除