云计算-日志架构部署-应用综合---docker实现


前言

利用Docker容器搭建ELK集群
由于在下载包时很有可能因为网络原因失败,因此我已上传百度网盘资源请自行选择下载
链接:https://pan.baidu.com/s/1v4QAG6-y21-tPXudhJoszw
提取码:23c6


一、安装docker

1、下载docker源

yum install -y yum-utils device-mapper-persistent-data lvm2 git
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

2、安装

查看版本
yum list docker-ce --showduplicates
安装最新版
yum -y install docker-ce 

二、安装docker-compose

下载安装
 curl -L "https://github.com/docker/compose/releases/download/1.27.4/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
修改为可执行权限
chmod +x /usr/local/bin/docker-compose
验证安装
$ docker-compose version
docker-compose version 1.27.4, build 40524192
docker-py version: 4.3.1
CPython version: 3.7.7
OpenSSL version: OpenSSL 1.1.0l  10 Sep 2019
安装docker-compose命令补全工具
yum install bash-completion
curl -L https://raw.githubusercontent.com/docker/compose/1.27.4/contrib/completion/bash/docker-compose -o /etc/bash_completion.d/docker-compose
之后断开重连或切换终端生效

三、编写docker-compose.yml文件

创建elastic 文件夹
# yum -y install tree
# tree elastic/
elastic/
├── docker-compose.yml
├── filebeat
│   ├── filebeat_to_logstash.yml
│   └── nginx_access_app.log
└── logstash
    ├── config
    │   └── logstash.yml
    └── pipeline
        └── logstash.conf

4 directories, 6 files
docker-compose.yml
version: '3.8'
services:
  # 用于连接到集群,查看集群信息
  cerebro:
    image: lmenezes/cerebro:0.8.4
    # 浏览器中访问宿主机的 9000 端口即可
    # 访问到集群的信息
    ports:
      - "9000:9000"
    command:
      # 用于此容器访问elasticsearch 集群的节点 es01
      - -Dhosts.0.host=http://es01:9200
    networks:
      - es7net
  kibana:
    image: docker.elastic.co/kibana/kibana:7.10.0
    environment:
      # 设置为中文环境
      I18N_LOCALE: zh-CN
      # 链接到 elasticsearch 集群的节点 es01
      ELASTICSEARCH_URL: http://es01:9200
      ELASTICSEARCH_HOSTS: http://es01:9200
    ports:
      - "5601:5601"
    networks:
      - es7net
  logstash7:
    image: docker.elastic.co/logstash/logstash:7.10.0
    volumes:
      - type: bind
        # 映射的配置文件
        source: ./logstash/config/logstash.yml
        target: /usr/share/logstash/config/logstash.yml
        read_only: true
      - type: bind
        # 映射的输入输出配置文件
        source: ./logstash/pipeline
        target: /usr/share/logstash/pipeline
        read_only: true
    ports:
      # 映射端口到宿主机,这样的话无论 filebeat 是否使用了容器
      # 都可以通过访问宿主机的 5044 端口,
      # 把日志输入到 logstash
      - "5044:5044"
    environment:
      # 设置 JVM 的堆内存,两个数据要一致
      # 生产环境设置为物理内存的一半即可
      LS_JAVA_OPTS: "-Xmx512m -Xms512m"
    networks:
      - es7net

    # logstash 容器依赖于下面的几个容器
    depends_on:
      - es01
      - es02
      - es03
  filebeat:
    image: docker.elastic.co/beats/filebeat:7.10.0
    environment:
      # 此配置主要为了处理多行日志而设置的,
      # 比如 java 程序日志中的错误异常,往往会打印
      # 出多行。设置这个参数后,就会自动把他们合并
      # 到一行进行处理
      - co.elastic.logs/multiline.*
    volumes:
      # filebeat 的配置文件,这里设置的从哪里搜集日志
      # 和把搜集后的日志输出到哪里
      - type: bind
        source: ./filebeat/filebeat_to_logstash.yml
        target: /usr/share/filebeat/filebeat.yml
        read_only: true

      # 示例日志而已
      # 生产环境假如使用容器实现 filebeat,那么可以把宿主机中
      # 的日志映射到 filebeat 的容器中。
      - type: bind
        source: ./filebeat/nginx_access_app.log
        target: /nginx_access_app.log
    networks:
      - es7net
    depends_on:
      - logstash7
  es01:
    image: docker.elastic.co/elasticsearch/elasticsearch:7.10.0
    environment:
      # 集群的名称
      - cluster.name=elk-cluster
      # 此容器在集群中的名称,成为节点名称
      - node.name=es7_01
      # 锁定物理内存,禁止物理内存和虚拟内存 swap 进行交换
      # 假如交换的话,会造成性能低下
      - bootstrap.memory_lock=true

      # 设置堆内存,生产环境需要设置为物理内存大小的一半
      # 或者一半以下,并且总体大小不要超过 30 G
      # 即使您限制对容器的内存访问,也必须配置堆大小。
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"

      # 关于集群互相发现的设置
      - discovery.seed_hosts=e01,es02,es03

      # 集群中参与 master 选举的节点成员
      - cluster.initial_master_nodes=es7_01,es7_02,es7_03
    ulimits:
      memlock:
        soft: -1
        hard: -1
      nproc: 65535
      nofile: 65535
    volumes:
      # 此容器中的数据,存放到 Docker 数据卷中
      - es7data1:/usr/share/elasticsearch/data
    ports:
      - "9200:9200"
    networks:
      - es7net
  es02:
    image: docker.elastic.co/elasticsearch/elasticsearch:7.10.0
    environment:
      - cluster.name=elk-cluster
      - node.name=es7_02
      - bootstrap.memory_lock=true
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
      - discovery.seed_hosts=e01,es02,es03
      - cluster.initial_master_nodes=es7_01,es7_02,es7_03
    ulimits:
      memlock:
        soft: -1
        hard: -1
      nproc: 65535
      nofile: 65535
    volumes:
      - es7data2:/usr/share/elasticsearch/data
    networks:
      - es7net
  es03:
    image: docker.elastic.co/elasticsearch/elasticsearch:7.10.0
    environment:
      - cluster.name=elk-cluster
      - node.name=es7_03
      - bootstrap.memory_lock=true
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
      - discovery.seed_hosts=es7_01,es7_02,es7_03
      - cluster.initial_master_nodes=es7_01,es7_02,es7_03
    ulimits:
      memlock:
        soft: -1
        hard: -1
      nproc: 65535
      nofile: 65535
    volumes:
      - es7data3:/usr/share/elasticsearch/data
    networks:
      - es7net
volumes:
  # 声明的 Docker 本地数据卷
  es7data1:
    driver: local
  es7data2:
    driver: local
  es7data3:
    driver: local

networks:
  # 声明的网络网桥名称
  es7net:
    driver: bridge
    name: vhost_xiuyun_net
logstash.yml
# 监听所有 IP,用于其他主机通过本机(或者此容器的 IP) 访问 logstash
http.host: "0.0.0.0"
logstash.conf
input {
    
    
  # 监听 5044 端口,用于接收 filebeat 输出的日志数据
  beats {
    
    
    port => 5044
  }
}

# 把处理好的数据输出到指定的目标中
output {
    
    
    # 把接受的信息输出到标准输出,也就是屏幕上
    stdout {
    
     codec => rubydebug }
}
启动项目
# cd elastic/
# docker-compose up -d
查看启动状态,这里需要一些启动时间
# docker-compose ps
       Name                      Command               State                Ports              
-----------------------------------------------------------------------------------------------
elastic_cerebro_1     /opt/cerebro/bin/cerebro - ...   Up      0.0.0.0:9000->9000/tcp          
elastic_es01_1        /tini -- /usr/local/bin/do ...   Up      0.0.0.0:9200->9200/tcp, 9300/tcp
elastic_es02_1        /tini -- /usr/local/bin/do ...   Up      9200/tcp, 9300/tcp              
elastic_es03_1        /tini -- /usr/local/bin/do ...   Up      9200/tcp, 9300/tcp              
elastic_filebeat_1    /usr/local/bin/docker-entr ...   Up                                      
elastic_kibana_1      /usr/local/bin/dumb-init - ...   Up      0.0.0.0:5601->5601/tcp          
elastic_logstash7_1   /usr/local/bin/docker-entr ...   Up      0.0.0.0:5044->5044/tcp, 9600/tcp

验证集群是否有效
访问宿主机9000端口

在这里插入图片描述

在这里插入图片描述

部署filebeat

在日志所在的机器部署
下载安装

wget https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-7.10.2-linux-x86_64.tar.gz
tar -xf filebeat-7.10.2-linux-x86_64.tar.gz -C /usr/local/
编辑filebeat.yml文件
# grep -Pv '^[ ]*#|^[ ]*$' filebeat.yml
filebeat.inputs:
- type: log
  enabled: false
  paths:
    - /var/log/*.log
- type: filestream
  enabled: false
  paths:
    - /var/log/*.log
filebeat.config.modules:
  path: ${path.config}/modules.d/*.yml
  reload.enabled: false
setup.template.settings:
  index.number_of_shards: 1
setup.kibana:
  # 这里能连接到 kibana  的 IP 或者主机名
  host: "192.168.122.127:5601"
output.elasticsearch:
  # 连接到 elasticsearch 的主机名或者 IP
  hosts: ["es01:9200"]
processors:
  - add_host_metadata:
      when.not.contains.tags: forwarded
  - add_cloud_metadata: ~
  - add_docker_metadata: ~
  - add_kubernetes_metadata: ~
运行 filebeat,并使用 --dashboards 选项,以便推出 仪表盘 模板到 kibana
filebeat  setup  --dashboards
这将会推出如下目录下所有以 .json 结尾的模板
# ls  kibana/7/dashboard/
成功加载模板和仪表板后,您将看到如下消息
# ./filebeat setup --dashboards
Loading dashboards (Kibana must be running and reachable)
Loaded dashboards
访问宿主机端5601端口

在这里插入图片描述
在这里插入图片描述

启用要执行的模块
# ./filebeat modules enable nginx
运行 setup 命令并使用指定的 --pipelines 和 --modules 选项,目的时为已启用的模块加载提取管道。此步骤还需要连接到Elasticsearch。如果要使用Logstash管道而不是摄取节点来解析数据,请跳过此步骤
# ./filebeat -e setup --pipelines --modules nginx
配置 Filebeat 将日志发送到 Logstash
#output.elasticsearch:
  #hosts: ["localhost:9200"]
output.logstash:
  # The Logstash hosts
  hosts: ["192.168.122.127:5044"]
启动filebeat
nohup ./filebeat &
启动Logstash 并创建管道
# cat logstash/pipeline/logstash.conf

input {
    
    
  # 监听 5044 端口,用于接收 filebeat 输出的日志数据
  beats {
    
    
    port => 5044
  }
}

output {
    
    
  if [@metadata][pipeline] {
    
    
    elasticsearch {
    
    
      hosts => ["es01:9200","es02:9200","es03:9200"]
      manage_template => false
      index => "%{[@metadata][beat]}-%{[@metadata][version]}-%{+YYYY.MM.dd}"
      pipeline => "%{[@metadata][pipeline]}"
    }
  } else {
    
    
    elasticsearch {
    
    
      hosts => ["es01:9200","es02:9200","es03:9200"]
      manage_template => false
      index => "%{[@metadata][beat]}-%{[@metadata][version]}-%{+YYYY.MM.dd}"
    }
  }
}
重新启动logstash
# docker-compose restart logstash
等待一会儿 再次访问 9000 端口的,所应添加完毕
后面的操作主要就是页面的设置 这里就结束了



附带二进制包下载链接


https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.10.0-linux-x86_64.tar.gz

https://artifacts.elastic.co/downloads/kibana/kibana-7.10.2-linux-x86_64.tar.gz

https://artifacts.elastic.co/downloads/logstash/logstash-7.11.1-linux-x86_64.tar.gz

https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-7.10.2-linux-x86_64.tar.gz

猜你喜欢

转载自blog.csdn.net/weixin_52099680/article/details/114233267
今日推荐