美文网首页
docker 部署EFK(elasticsearch,kiban

docker 部署EFK(elasticsearch,kiban

作者: wolfe404 | 来源:发表于2020-07-01 14:12 被阅读0次
    • fluentd对比Logstash
    对比方面 Logstash Fluentd
    内存占用 启动1G左右 启动60M左右
    CPU占用 较高 较低
    支持插件 丰富 丰富
    通用日志解析 支持grok(基于正则表达式)解析 支持正则表达式解析
    特定日志类型 支持JSON等主流格式 支持JSON等主流格式
    数据过滤 支持 支持
    数据buffer发送 插件支持 插件支持
    运行环境 JRuby实现,依赖JVM环境 CRuby、C实现,依赖Ruby环境
    线程支持 支持多线程 多线程受GIL限制
    • 使用docker compose部署
      1. 准备es-master.yml,fluent.conf ,kibana.yml配置文件
      2. 执行efk-master-init.sh 创建相应的文件夹、下载启动对应的镜像
    注意:
    • 一下的配置文件中的ip地址请更换为对应服务器的ip

    • 刚创建fluentd镜像启动时会失败,因为官方的docker镜像默认没有加入fluent-plugin-elasticsearch 插件,解决步骤如下:

      • 1 . 将fluent.conf 配置文件的关于elasticsearch先删除,再重启docker镜像
        1. 使用root用户进入Fluentd容器内部
      [root@localhost ]# docker exec -it --user root fluentd /bin/sh
      
        1. 安装Fluentd的Elasticsearch插件
      / # fluent-gem install fluent-plugin-elasticsearch
      
        1. 更换fluent.conf配置文件的内容:
      <source>
        @type  forward
       @id    httpd-input
         @label @httpd
      port  24224
      <parse>
      @type json
      </parse>
      </source>
      <filter **>
      @type stdout
      </filter>
      <label @httpd>
      <match **>
      @type elasticsearch
      host 192.168.1.150
      port 9200
      type_name docker
      logstash_format true
      logstash_prefix httpd-${tag}-logs
      logstash_dateformat %Y-%m-%d
      flush_interval 1s
      include_tag_key true
      </match>
      </label>
      
        1. 重启fluentd容器
    • efk-master-init.sh:

    #./bin/bash
    # 定义颜色
    BLUE_COLOR="\033[36m"
    RED_COLOR="\033[31m"
    GREEN_COLOR="\033[32m"
    VIOLET_COLOR="\033[35m"
    RES="\033[0m"
    
    echo -e "${BLUE_COLOR}# ######################################################################${RES}"
    echo -e "${BLUE_COLOR}#                       Docker ELK Shell Script                        #${RES}"
    echo -e "${BLUE_COLOR}#                       Email:                                                     #${RES}"
    echo -e "${BLUE_COLOR}# ######################################################################${RES}"
    
    # 创建目录
    echo -e "${BLUE_COLOR}---> create [elasticsearch]directory start.${RES}"
    if [ ! -d "./elasticsearch/" ]; then
    mkdir -p ./elasticsearch/master/conf ./elasticsearch/master/data ./elasticsearch/master/logs
    fi
    
    echo -e "${RED_COLOR}---> create [kibana]directory start.${RES}"
    if [ ! -d "./kibana/" ]; then
    mkdir -p ./kibana/conf ./kibana/logs
    fi
    
    # 目录授权(log 都要授读/写权限)
    echo -e "${RED_COLOR}---> create [fluentd]directory start.${RES}"
    if [ ! -d "./fluentd/" ]; then
    mkdir -p ./fluentd/conf ./fluentd/log
    chmod 777 ./fluentd/log
    fi
    
    echo -e "${BLUE_COLOR}===> create directory success.${RES}"
    
    # 目录授权(data/logs 都要授读/写权限)
    echo -e "${BLUE_COLOR}---> directory authorize start.${RES}"
    if [ -d "./elasticsearch/" ]; then
    chmod 777 ./elasticsearch/master/data/ ./elasticsearch/master/logs/
    fi
    
    echo -e "${BLUE_COLOR}===> directory authorize success.${RES}"
    
    # 移动配置文件
    echo -e "${BLUE_COLOR}---> move [elasticsearch]config file start.${RES}"
    if [ -f "./es-master.yml" ]; then
    mv ./es-master.yml ./elasticsearch/master/conf
    fi
    
    echo -e "${RED_COLOR}---> move [kibana]config file start.${RES}"
    if [ -f "./kibana.yml" ]; then
    mv ./kibana.yml ./kibana/conf
    fi
    
    echo -e "${GREEN_COLOR}---> move [fluent]config file start.${RES}"
    if [ -f "./fluent.conf" ]; then
    mv ./fluent.conf ./fluentd/conf
    fi
    
    echo -e "${BLUE_COLOR}===> move config files success.${RES}"
    echo -e "${GREEN_COLOR}>>>>>>>>>>>>>>>>>> The End <<<<<<<<<<<<<<<<<<${RES}"
    
    # 部署项目
    echo -e "${BLUE_COLOR}==================> Docker deploy Start <==================${RES}"
    docker-compose up --build -d
    
    
    • docker-compose.yml文件配置:
    version: "3"
    services:
      web:#方便测试使用,启动完成后执行curl localhost:1080,可以在kibana的discover界面查看
        image: httpd
        container_name: httpd
        ports:
          - 1080:80 #避免和默认的80端口冲突
        links:
          - fluentd
        logging:
          driver: fluentd
          options:
            fluentd-address: localhost:24224
            tag: httpd.access
        environment:
          - "TZ=Asia/Shanghai"
    
      fluentd:
        image: fluent/fluentd
        container_name: fluentd
        user: root
        volumes:
          - ./fluentd/conf/fluent.conf:/fluentd/etc/fluent.conf
          - ./fluentd/log:/fluentd/log
        ports:
          - 24221:24221
          - 24222:24222
          - 24223:24223
          - 24224:24224
        environment:
          - "TZ=Asia/Shanghai"
    
      es-master:
        container_name: es-master
        hostname: es-master
        image: elasticsearch:7.1.1
        user: root
        ports:
          - 9200:9200
          - 9300:9300
        volumes:
          - ./elasticsearch/master/conf/es-master.yml:/usr/share/elasticsearch/config/elasticsearch.yml
          - ./elasticsearch/master/data:/usr/share/elasticsearch/data
          - ./elasticsearch/master/logs:/usr/share/elasticsearch/logs
        environment:
          - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
          - "TZ=Asia/Shanghai"
      kibana:
        container_name: kibana
        hostname: kibana
        image: kibana:7.1.1
        ports:
          - 5601:5601
        volumes:
          - ./kibana/conf/kibana.yml:/usr/share/kibana/config/kibana.yml
        environment:
          - "elasticsearch.hosts=http://ip:9200"
          - "TZ=Asia/Shanghai"
        depends_on:
          - "es-master"
    
    • es-master.yml文件配置:
    # 集群名称
    cluster.name: es-cluster
    # 节点名称
    node.name: es-master
    # 是否可以成为master节点
    node.master: true
    # 是否允许该节点存储数据,默认开启
    node.data: true
    # 网络绑定
    network.host: 0.0.0.0
    # 设置对外服务的http端口
    http.port: 9200
    # 设置节点间交互的tcp端口
    transport.port: 9300
    # 集群发现
    discovery.seed_hosts:
      - es-master
    # 手动指定可以成为 mater 的所有节点的 name 或者 ip,这些配置将会在第一次选举中进行计算
    cluster.initial_master_nodes:
      - es-master
    # 支持跨域访问
    http.cors.enabled: true
    http.cors.allow-origin: "*"
    # 安全认证
    xpack.security.enabled: false
    #http.cors.allow-headers: "Authorization"
    
    
    • 完整的fluent.conf文件配置,用作参考 :
    <source>
      @type  tcp
      @id    debug-input
      port  24221
      tag debug
      <parse>
     @type json
      </parse>
    </source>
    
    <source>
      @type  tcp
      @id    error-input
      port  24222
      tag error
      <parse>
     @type json
      </parse>
    </source>
    
    <source>
      @type  tcp
      @id    business-input
      port  24223
      tag business
      <parse>
     @type json
      </parse>
    </source>
    
    <source>
      @type  tcp
      @id    record-input
      port  24224
      tag record
      <parse>
     @type json
      </parse>
    </source>
    
    <filter record>
      @type parser
      key_name message
      reserve_data true
      remove_key_name_field true
      <parse>
        @type json
      </parse>
    </filter>
    
    <match fluent.**>
      @type stdout
      output_type json
    </match>
    
    <match **>
      @type elasticsearch
      host 192.168.3.101
      port 9200
      type_name docker
      logstash_format true
      logstash_prefix docker-${tag}-logs
      logstash_dateformat %Y-%m-%d
      flush_interval 5s
      include_tag_key true
    </match>
    
    
    • kibana.yml文件配置:
    # 服务端口
    server.port: 5601
    # 服务IP
    server.host: "0.0.0.0"
    # ES
    elasticsearch.hosts: ["http://192.168.1.150:9200"]
    # 汉化
    i18n.locale: "zh-CN"
    
    

    相关文章

      网友评论

          本文标题:docker 部署EFK(elasticsearch,kiban

          本文链接:https://www.haomeiwen.com/subject/tbscqktx.html