Mike 发表于 2021-7-1 09:50:03

7.4.2版本的ELK集群安装

  

目录
  一.环境介绍:
  1.软件版本
  2.安装jdk
  3.配置环境变量
  4.创建用户
  5.赋予权限
  6.配置系统参数
  二.部署elasticsearch
  1.解压elasticsearch并配置安全认证
  2.编辑配置文件elasticsearch.yml
  3.启动elasticsearch
  4.查看启动日志
  5.检查启动情况
  三.部署logstash
  1.解压logstash
  2.修改配置文件gp-logstash.conf
  3.启动logstash
  4.检查启动情况
  四.部署filebeat
  1.解压filebeat
  2.添加配置文件
  3.启动filebeat并加载配置文件
  4.检查启动情况
  五.部署kibana
  1.解压kibana
  2.添加配置文件
  3.启动kibana
  4.检查启动情况
  六.检查所有服务启动情况
   
   
   
  一.环境介绍:
  1.软件版本
  elasticsearch-7.4.2
  filebeat-7.4.2
  kibana-7.4.2
  logstash-7.4.2
  集群环境三台机器
  192.168.1.89:9200
  192.168.1.89:9202
  192.168.1.89:9203
  192.168.1.89:9300
  192.168.1.89:9302
  192.168.1.89:9303
  自身环境机器如果更多可以更改IP地址和端口
  IP
  监听端口
  系统
  es集群名称
  es节点名称
  es版本
  kibana版本
  192.168.1.89
  9200/9300
  Linux3.10.el7.x86_64
es
   
  es1
  7.4.2
  7.4.2
  192.168.1.89
  9202/9302
  Linux3.10.el7.x86_64
es
   
  es2
  7.4.2
  7.4.2
  192.168.1.89
  9203/9303
  Linux3.10.el7.x86_64
es
   
  es3
  7.4.2
  7.4.2
   
  架构图
  


   1.1软件介绍
  Elasticsearch
  Elasticsearch 是一个分布式、RESTful 风格的搜索和数据分析引擎,能够解决不断涌现出的各种用例。 作为 Elastic Stack 的核心,它主要是集中存储数据。
  Kibana
  Kibana 是一个可扩展的用户界面,主要是将数据可视化展示和管理
  Logstash
  Logstash 是动态数据收集管道,拥有可扩展的插件生态系统。
  Beats
  Beats 是一个面向轻量型采集器的平台,这些采集器可从边缘机器发送数据。本次使用的是Beats中的Filebeat,Filebeat主要作用是抓取日志文件。
  日志抓取流程
  1. 在每台服务器中安装一个Filebeat,Filebeat就能抓取该服务器中不同程序产生的日志;
  2. FileBeat将抓取的日志转发给Logstash;
  3.由Logstash整合每台服务器发送过来的日志信息,可以实现过滤、转换格式等;
  4. Logstash将转换好的日志信息发送给Elasticsearch;
  5. Elasticsearch收到日志信息后,将其存储在服务器中,并支持数据转换等操作;
  1.2操作系统版本
  linux-el7.x86_64,4核8G
   
  2.安装jdk
  jdk可以用es自带的,路径在/usr/local/elk/elasticsearch-7.4.2/jdk
  3.配置环境变量
  PATH=$PATH:$HOME/bin:/usr/local/elk/elasticsearch-7.4.2/bin
  export JAVA_HOME=/usr/local/elk/elasticsearch-7.4.2/jdk/
  export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH
  export CLASSPATH=.$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/lib/tools.jar
  export PATH
  4.创建用户
  useradd elsearch
  5.赋予权限
  chown  -R elsearch:elsearch elk/
  6.配置系统参数
  vim /etc/sysctl.conf
  vm.max_map_count=655360
  sysctl -p /etc/sysctl.conf
  vim /etc/security/limits.conf
  * soft nofile 65536
  * hard nofile 65536
  * soft nproc 32000
  * hard nproc 32000
  * hard memlock unlimited
  * soft memlock unlimited
   
   
  二.部署elasticsearch
   
  1.解压elasticsearch并配置安全认证
  从 6.8.0 和 7.1.0 版本开始, Elastic Stack安全功能免费提供。用户现在能够对网络流量进行加密、创建和管理用户、定义能够保护索引和集群级别访问权限的角色,并且使用 Spaces 为 Kibana 提供全面保护。下面介绍怎么配置安全认证。
  首先生成证书,通过这些证书便能允许节点安全地通信。允许使用企业 CA 来完成这一步骤,但是在此文档中不配置CA,通过使用一个名为 elasticsearch-certutil 的命令来解决此问题。
  l进入压缩包主目录下,然后执行以下命令,这将会生成一个密码文件至config目录下。
  bin/elasticsearch-certutil cert -out config/elastic-certificates.p12 -pass ""
  #将elastic-certificates.p12文件的权限改为elsearch用户
  chown elsearch:elsearch config/elastic-certificates.p12 -R
  l执行以下命令配置用户的密码,这些用户都是系统级别(已写死),配置的用户包括:elastic,apm_system,kibana,logstash_system,beats_system,remote_monitoring_user(此步骤需要在程序运行之后才能执行,否则会报错)
  ./bin/elasticsearch-setup-passwords interactive
  默认密码都设置的123456,注意有安全要求时设置复杂密码

  

  添加一个管理员并设置密码123456
  ./bin/elasticsearch-users useradd es -r superuser
  简洁操作(生成证书、复制证书)
  配置ES集群间 TLS 和 身份验证
  生成证书
  /usr/local/elk/elasticsearch-7.4.2/bin/elasticsearch-certutil cert -out /usr/local/elk/elasticsearch-7.4.2/config/elastic-certificates.p12 -pass ""
  复制证书
  cp elastic-certificates.p12 ../../elasticsearch-7.4.2-02/config/
  cp elastic-certificates.p12 ../../elasticsearch-7.4.2-03/config/
   
  2.编辑配置文件elasticsearch.yml
  bootstrap.memory_lock: true
  #network.host: 0.0.0.0
  cluster.name: es
  node.name: "es1"
  network.host: 192.168.1.89
  network.bind_host: 192.168.1.89
  network.publish_host: 192.168.1.89
  discovery.seed_hosts: ["192.168.1.89:9300", "192.168.1.89:9302", "192.168.1.89:9303"]
  cluster.initial_master_nodes: ["192.168.1.89:9300", "192.168.1.89:9302", "192.168.1.89:9303"]
  #discovery.zen.ping.unicast.hosts: ["192.168.1.89:9300", "192.168.1.89:9302","192.168.1.89:9303"]
  #discovery.zen.ping.unicast.hosts: ["192.168.1.89:9200", "192.168.1.89:9202","192.168.1.89:9203"]
   
  transport.tcp.port: 9300
  http.port: 9200
  #discovery.zen.ping.unicast.hosts: ["192.168.1.89:9300"]
  discovery.zen.minimum_master_nodes: 1
  discovery.zen.ping_timeout: 120s
  client.transport.ping_timeout: 60s
  indices.queries.cache.size: 20%
  indices.fielddata.cache.size: 40%
  indices.memory.index_buffer_size: 30%
  node.master: true
  node.data: true
   
  thread_pool.search.queue_size: 1000
  thread_pool.search.size: 200
  thread_pool.search.min_queue_size: 10
  thread_pool.search.max_queue_size: 1000
  thread_pool.search.auto_queue_frame_size: 2000
  thread_pool.search.target_response_time: 6s
   
  xpack.security.enabled: true
  xpack.security.transport.ssl.enabled: true
  xpack.security.transport.ssl.verification_mode: certificate
  xpack.security.transport.ssl.keystore.path: /usr/local/elk/elasticsearch-7.4.2/config/elastic-certificates.p12
  xpack.security.transport.ssl.truststore.path: /usr/local/elk/elasticsearch-7.4.2/config/elastic-certificates.p12
  path.data: /usr/local/elk/elasticsearch-7.4.2/data
  path.logs: /usr/local/elk/elasticsearch-7.4.2/logs
  注意:
  集群环境如下的配置根据各自环境进行配置
  cluster.name: es
  node.name: "es1"
  discovery.seed_hosts:
  cluster.initial_master_nodes:
  transport.tcp.port: 9300
  http.port: 9200
  xpack.security.transport.ssl.truststore.path:
  xpack.security.transport.ssl.keystore.path:
  path.data:
  path.logs:
  elasticsearch.yml关键配置说明:
  cluster.name 集群名称,名称一致代表同一个集群
  node.name 节点名称,标识集群中的不同节点
  network.host/http.port 网络地址和端口,用于http和tranport服务使用
  path.data 数据存储地址
  path.log 日志存储地址
  xpack.security.transport.ssl.truststore.path:  证书存放的位置,集群中的证书要一致
  xpack.security.transport.ssl.keystore.path:
  transport.tcp.port: 9300 程序端口和网页访问端口
  http.port: 9200
  discovery.seed_hosts: 集群中的其他节点
  discovery.zen.ping.unicast.hosts:和上面相同二选一
  cluster.initial_master_nodes: 填写主节点的位置,服务启动时将选为主节点
   
   
  3.启动elasticsearch
  su - elsearch
  cd /usr/local/elk/elasticsearch-7.4.2
  ./bin/elasticsearch -d
  启动服务
  /usr/local/elk/elasticsearch-7.4.2/bin/elasticsearch -d -p /usr/local/elk/elasticsearch-7.4.2/run/es1.pid
  /usr/local/elk/elasticsearch-7.4.2-02/bin/elasticsearch -d -p /usr/local/elk/elasticsearch-7.4.2-02/run/es2.pid
  /usr/local/elk/elasticsearch-7.4.2-03/bin/elasticsearch -d -p /usr/local/elk/elasticsearch-7.4.2-03/run/es3.pid
   
  停止es服务
  cat /usr/local/elk/elasticsearch-7.4.2/run/es1.pid | xargs kill -HUP
  cat /usr/local/elk/elasticsearch-7.4.2-02/run/es2.pid | xargs kill -HUP
  cat /usr/local/elk/elasticsearch-7.4.2-03/run/es3.pid | xargs kill -HUP
  注:HUP监听的,已经建立的连接(不同的 pid)不会断
   
  删除日志文件
  rm -f /usr/local/elk/elasticsearch-7.4.2/logs/*
  rm -f /usr/local/elk/elasticsearch-7.4.2-02/logs/*
  rm -f /usr/local/elk/elasticsearch-7.4.2-03/logs/*
   
  4.查看启动日志
  /usr/local/elk/elasticsearch-7.4.2/logs/elasticsearch.log
   
  5.检查启动情况
  ps -ef|grep elasticsearch
  验证es访问情况
  curl -u elastic:123456 -XGET 'http://192.168.1.89:9200/_cat/nodes?v'
  curl -u elastic:123456 -XGET 'http://192.168.1.89:9202/_cat/nodes?v'
  curl -u elastic:123456 -XGET 'http://192.168.1.89:9203/_cat/nodes?v'
   
  能够访问代表es的身份认证和es启动都没有问题,但是数据没有更新需要将data目录下面的删除掉然后再进行重启,即可
  /usr/local/elk/elasticsearch-7.4.2-02/data
   
  这样显示的则是正常的ES集群,如果有一台挂掉了会根据配置文件中的nodid进行选举最小值的成为新的主节点。
 
验证访问地址
http://192.168.1.89:9200/
http://192.168.1.89:9202/
http://192.168.1.89:9203/
  elastic,apm_system,kibana,logstash_system,beats_system,remote_monitoring_user
  默认密码都设置的123456
 


 
 
   
   
  三.部署logstash
  1.解压logstash
  2.修改配置文件gp-logstash.conf
  cat gp-logstash.conf
  input {
    beats{
      port => "5044"
    }
  }
  filter {
    if == "gp-gpc"{
      grok {
        match => {"message" => "%{TIME:logTime} %{WORD:logType} %{DATA:class}-%{GREEDYDATA:logMessage}"}
      }
    } else if == "gp-auth"{
      grok {
        match => {"message" => "%{DATA:logTime} %{NUMBER:relative} \[%{DATA:thread}\] %{WORD:logType} %{DATA:class}-%{GREEDYDATA:logMessage}"}
      }
      date {
        match => ["logTime","yyyy-MM-dd HH:mm:ss"]
        target => "@timestamp"
      }
    } else {
      if == "gp-count"{
        grok {
          match => {"message" => "%{TIMESTAMP_ISO8601:logTime} \[%{DATA:thread}\] %{GREEDYDATA:log_json}"}
        }
        json {
          source => "log_json"
          remove_field=>["log_json"]
        }
      } else if == "gp-gpx"{
        grok {
          match => {"message" => "%{TIMESTAMP_ISO8601:logTime} %{DATA:logType} %{NUMBER:Pid} --- \[%{DATA:thread}\] %{DATA:class}:%{GREEDYDATA:logMessage}"}
        }
      } else if == "gp-gpc-tomcat"{
        grok {
          match => {"message" => "%{TIMESTAMP_ISO8601:logTime} %{DATA:logType} \(%{DATA:class}:%{NUMBER:number}\) -%{GREEDYDATA:logMessage}"}
        }
      } else {
        grok {
          match => {"message" => "%{TIMESTAMP_ISO8601:logTime} \[%{DATA:thread}\] %{WORD:logType} %{DATA:class}-%{GREEDYDATA:logMessage}"}
        }
      }
      date {
        match => ["logTime", "ISO8601"]
        target => "@timestamp"
      }
    }
  }
  output{
      elasticsearch {
          hosts => "http://192.168.1.89:9200"
          user => "elastic"
          password => "admin123"
          index => "%{}-%{+YYYY.MM.dd}"
      }
  }
   
   
  3.启动logstash
  nohup ./logstash -f config/gp-logstash.conf &
   
logstash启动成功
 
   
   
  4.检查启动情况
  ps -ef|grep logstash
   
  四.部署filebeat
  1.解压filebeat
  2.添加配置文件
  vim mybeat.yml
  filebeat.inputs:
  - type: log
    enabled: true
    close_older: 24h
    max_bytes: 1048576
    paths:
      - /usr/local/log/gp-gateway-center/log_debug.log
      - /usr/local/log/gp-gateway-center/log_error.log
      - /usr/local/log/gp-gateway-center/log_info.log
      - /usr/local/log/gp-gateway-center/log_warn.log
    fields:
      log_type: gp-gateway-center
      log_format: gp-other
    multiline.pattern: '^\d{4}-\d{1,2}-\d{1,2}\s\d{1,2}:\d{1,2}:\d{1,2}'
    multiline.negate: true
    multiline.match: after
  - type: log
    enabled: true
    close_older: 24h
    max_bytes: 1048576
    paths:
      - /usr/local/log/gp-gateway-center/log_count.log
    fields:
      log_type: gp-gateway-count
      log_format: gp-count
    multiline.pattern: '^\d{4}-\d{1,2}-\d{1,2}\s\d{1,2}:\d{1,2}:\d{1,2}'
    multiline.negate: true
    multiline.match: after
   
  3.启动filebeat并加载配置文件
  nohup ./filebeat -e -c mybeat.yml & disown
   
  4.检查启动情况
  ps -ef|grep filebeat
   
  五.部署kibana
  1.解压kibana
  elastic,apm_system,kibana,logstash_system,beats_system,remote_monitoring_user
  密码都是123456
  kibana同样不允许root用户直接运行,所以要使用elsearch或普通用户运行
  mkdir /usr/local/elk/kibana-7.4.2-linux-x86_64/run
  chown elsearch:elsearch kibana-7.4.2-linux-x86_64/ -R
   
   
   
   
  2.添加配置文件
  vim kibana.yml
  server.port: 5601
  server.host: "0.0.0.0"
  server.name: "192.168.1.89"
  elasticsearch.hosts: ["http://192.168.1.89:9200"]
  elasticsearch.ssl.verificationMode: "none"
  elasticsearch.requestTimeout: 90000
  xpack.security.encryptionKey: "something_at_least_32_characters"
  xpack.reporting.encryptionKey: "a_random_string"
  elasticsearch.username: "elastic"
  elasticsearch.password: "admin123"
  i18n.locale: "zh-CN"
   
  3.启动kibana
  nohup /usr/local/elk/kibana-7.4.2-linux-x86_64/bin/kibana &
   
  4.检查启动情况
  ps -ef|grep node
  访问地址
  http://192.168.1.89:5601
  账户密码elastic 123456
   
  配置 Heartbeat 运行监测
 
根据上面地址下载插件然后安装即可   

安装完成修改配置文件/etc/heartbeat/heartbeat.yml
 
修改完成配置文件后使用命令heartbeat setupsetup 命令加载 Kibana 索引模式
 
启动heartbeat 服务

检查数据
 
数据加载完全后,这样显示的,三台es集群,正常情况下应该是不同的IP的三台机器,这里是因为机器紧张做的,效果已经出来,到此es集群搭建完毕。
 
 
 
 
六.检查所有服务启动情况
检查elasticsearch



 
检查filebeat






检查kibana



检查logstash
 
 
 



针对如下两种情况才推出的轻量级的filebeat,获取容器中的日志说明
(1) 日志从容器挂载至ELK服务器缓慢
(2) 日志在Logstash格式化解析缓慢
filebeat存在一个严重的弊端会占用系统资源,日志量越大消耗的系统资源情况越多,有的企业节点机或者容器给的资源紧缺,所以就放弃使用了filebeat
现在服务器产生的日志有以下几种
1) 程序自定义产生的日志(*.log或者*.file文件)
2) Java程序后台启动的日志输出文件nohup.out
3) tomcat程序的日志输出文件catalina.out
4) 容器的日志(获取的内容是容器内部的标准化控制台输出)
  这几种日志的nohup.out、catalina.out、容器日志都会被华为云的AOM所截取(并不会保留相关文件)。
  因此ELK想要获取程序的日志,只能通过程序自定义产生的日志。使用程序自定义产生的日志可控性更高。
1.2.2 ELK概述
  ELK日志管理系统提供了强大的日志管理能力。
  ELK总体上分为四部分,ES用于日志的存储、Logstash用于日志的解析和格式化、Kibana用于日志界面的展示、Filebeat用于日志的截取。
  ELK包含了日志定期清理功能(清除ES存储的日志)。
  ELK日志管理系统可以不影响AOM的使用。
1.2.3 日志传输
  旧版使用ELK获取容器内部日志的流程如下图所示:

  此流程在日志文件挂载和日志切割格式化过程耗时缓慢。
  新版方案如下图所示:

  此方案由容器内部进行日志的获取和推送,减少了日志挂载过程中的耗时问题。在开发环境测试时,日志切割格式化缓慢的原因很大程度在于服务器资源不够。如果能提高服务器资源,可以提高日志格式化的效率。
  此方案的弊端机器耗费filebeat客户端所在的容器内的资源,在生产环境安装时,一定要考虑资源情况,如果资源不够,要放弃filebeat的使用
  2.1.1 准备filebeat启动脚本
filebeat程序主要是将程序的日志进行读取和分割,最后将读取的日志推送至logstash服务中。因为考虑到多环境的部署,此logstash服务的IP地址需要可配置。并且考虑到某些私有化部署可能不需要filebeat,因此filebeat的启动也需要进行控制。
因此需要单独准备一个脚本用于控制上述两个问题。脚本内容如下所示:
#!/bin/bash
logstash=$1
filebeatEnable=$2
if [ $filebeatEnable = "false" ]; then
  echo "Do not start the filebeat program!Because filebeat Archive not exist"
else
  tar -C /usr/local/project -zxvf /usr/local/project/filebeat-7.4.2-linux-x86_64.tar.gz
  cp /usr/local/project/mybeat.yml /usr/local/project/filebeat-7.4.2-linux-x86_64/mybeat.yml
  nohup /usr/local/project/filebeat-7.4.2-linux-x86_64/filebeat -e -E output.logstash.hosts=["$logstash"] -c /usr/local/project/filebeat-7.4.2-linux-x86_64/mybeat.yml & disown
  status=$?
  if [ $status -ne 0 ]; then
    echo "Failed to start filebeat: $status"
    exit $status
  fi
fi
2.1.2 构建基础镜像
  需要基于原始的Java8镜像或者其他Java基础镜像构建出一个新的基础镜像。
  新版的基础镜像需要新增两个文件,分别是:
(1) filebeat程序的压缩包。
(2) 启动filebeat程序的启动脚本。
  构建基础镜像的操作步骤如下:
(1) 基于基础镜像创建容器。
(2) 将程序包拷贝至容器内部。指定目录为/usr/local/project
(3) 将脚本文件拷贝至容器内部。指定目录为/usr/local/project
(4) 修改脚本文件的权限为可执行。
(5) 基于容器构建新版本镜像(bosssoft/java:8.0.1)
   
2.1.3 jar包程序,更改Dockerfile
  在容器内部需要同时启动filebeat和应用程序。因此需要修改每个服务的Dockerfile文件。Dockerfile模板示例如下所示:
FROM bosssoft/java:8.0.1
WORKDIR /usr/local/project
ENV apollo DEV
ENV logstash 192.168.8.108:5044
ENV upEnv ""
ENV filebeatEnable false

ADD mybeat /usr/local/project/mybeat.yml
ADD gp-portal-center-docker-cloud.jar gp-portal-center-docker-cloud.jar

EXPOSE 7004

CMD ./run.sh $logstash $filebeatEnable ; java -Denv=$apollo $upEnv -Duser.timezone=GMT+8 -Xms512m -Xmx1024m -jar -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/usr/local/OOM  /usr/local/project/gp-portal-center-docker-cloud.jar
l 基于构建的基础镜像,并规定工作空间为/usr/local/project,和filebeat压缩包同级目录。
l 准备4个环境变量参数。
n apollo: 指定apollo启动的环境,即指定读取apollo服务的地址。
n logstash: 指定logstash服务的IP和端口号
n upEnv: 指定启动程序时的参数。目前可用于指定apollo服务的地址,多用于私有化部署。参数内容为:-Dapollo.meta=http://dev.apollo.com:8099。默认值为空,即使用apollo指定的地址。
n filebeatEnable: 指定是否需要启动filebeat进行日志的推送。
l 将filebeat的配置文件上传至容器内部
l 拷贝程序包
l 通过CMD指定同时执行多个脚本。命令通过分号分隔,意思为不管filebeat是否启动成功,都执行后续的程序包。
2.1.4 准备mybeat文件
  mybeat文件是filebeat读取日志的配置文件。内部指定了程序所需要读取的日志目录,以及读取日志的其他规则。
  示例文件如下所示:
filebeat.inputs:
- type: log
  enabled: true
  close_older: 24h
  max_bytes: 1048576
  scan_frequency: 3s
  backoff: 1s
  max_backoff: 1s
  backoff_factor: 1
  paths:
    - /usr/local/project/gp-portal-center-log/log_debug.log
    - /usr/local/project/gp-portal-center-log/log_error.log
    - /usr/local/project/gp-portal-center-log/log_info.log
    - /usr/local/project/gp-portal-center-log/log_warn.log
  fields:
    log_type: gp-portal-center
    log_format: gp-other
  multiline.pattern: '^\d{4}-\d{1,2}-\d{1,2}\s\d{1,2}:\d{1,2}:\d{1,2}'
  multiline.negate: true
  multiline.match: after
   
2.1.5 重新构建业务镜像
  最后重新构建业务镜像,通过新版本的Dockerfile文件进行构建,并运行容器。
  

2.2.1 准备filebeat启动脚本
与Java程序相同,在tomcat镜像启动的容器中启动filebeat也需要考虑到两个问题,即filebeat的启动可配置和logstash的IP地址可配置。
所以脚本内容和Java程序的一致即可,具体内容如下所示:
#!/bin/bash
logstash=$1
filebeatEnable=$2
if [ $filebeatEnable = "false" ]; then
  echo "Do not start the filebeat program!Because filebeat Archive not exist"
else
  tar -C /usr/local/project -zxvf /usr/local/project/filebeat-7.4.2-linux-x86_64.tar.gz
  cp /usr/local/project/mybeat.yml /usr/local/project/filebeat-7.4.2-linux-x86_64/mybeat.yml
  nohup /usr/local/project/filebeat-7.4.2-linux-x86_64/filebeat -e -E output.logstash.hosts=["$logstash"] -c /usr/local/project/filebeat-7.4.2-linux-x86_64/mybeat.yml & disown
  status=$?
  if [ $status -ne 0 ]; then
    echo "Failed to start filebeat: $status"
    exit $status
  fi
fi
2.2.2 构建基础镜像
  基于原始的tomcat镜像,或者其他tomcat基础镜像构建出一个新版本的镜像。
  新版的基础镜像需要新增两个文件,分别是:
(3) filebeat程序的压缩包。
(4) 启动filebeat程序的启动脚本。
   操作步骤如下:
(6) 基于基础镜像创建容器。
(7) 将程序包拷贝至容器内部。指定目录为/usr/local/project
(8) 将脚本文件拷贝至容器内部。指定目录为/usr/local/project
(9) 修改脚本文件的权限为可执行。
(10) 基于容器构建新版本镜像(bosssoft/tomcat:8.0.1)
   
2.2.3 tomcat程序包,更改Dockerfile
  在容器内部需要同时启动filebeat和应用程序。因此需要修改每个服务的Dockerfile文件。Dockerfile模板示例如下所示:
FROM bosssoft/tomcat:8

MAINTAINER GP-PLATFORM

WORKDIR /usr/local/tomcat/webapps

ENV apollo DEV
ENV logstash 192.168.8.108:5044
ENV upEnv ""
ENV filebeatEnable false

RUN sed -i 's#"8080"#"7002"#' /usr/local/tomcat/conf/server.xml

RUN sed -i '2s#^#CATALINA_OPTS="$CATALINA_OPTS -javaagent:/usr/local/agent/skywalking-agent.jar -Dskywalking.agent.service_name=gp-auth-center -Dskywalking.agent.application_code=gp-auth-center -Denv=$apollo $upEnv";#' /usr/local/tomcat/bin/catalina.sh

RUN sed -i '2a export CATALINA_OPTS' /usr/local/tomcat/bin/catalina.sh

ADD mybeat /usr/local/project/mybeat.yml
ADD gp-auth-center.war gp-auth-center.war

EXPOSE 7002

CMD /usr/local/project/run.sh $logstash $filebeatEnable ; /usr/local/tomcat/bin/catalina.sh run
   
l 基于构建的基础镜像,并规定工作空间为/usr/local/tomcat/webapps。
l 准备4个环境变量参数。
n apollo: 指定apollo启动的环境,即指定读取apollo服务的地址。
n logstash: 指定logstash服务的IP和端口号
n upEnv: 指定启动程序时的参数。目前可用于指定apollo服务的地址,多用于私有化部署。参数内容为:-Dapollo.meta=http://dev.apollo.com:8099。默认值为空,即使用apollo指定的地址。
n filebeatEnable: 指定是否需要启动filebeat进行日志的推送。
l 将参数写入至tomcat的启动脚本中
l 将filebeat的配置文件上传至容器内部
l 拷贝程序包
l 通过CMD指定同时执行多个脚本。命令通过分号分隔,意思为不管filebeat是否启动成功,都执行后续的程序包。
2.2.4 准备mybeat文件
  mybeat文件是filebeat读取日志的配置文件。内部指定了程序所需要读取的日志目录,以及读取日志的其他规则。
  示例文件如下所示:
filebeat.inputs:
- type: log
  enabled: true
  close_older: 24h
  max_bytes: 1048576
  scan_frequency: 3s
  backoff: 1s
  max_backoff: 1s
  backoff_factor: 1
  paths:
    - /usr/local/tomcat/webapps/gp-auth-center-log/log_debug.log
    - /usr/local/tomcat/webapps /gp- auth -center-log/log_error.log
    - /usr/local/tomcat/webapps /gp- auth -center-log/log_info.log
    - /usr/local/tomcat/webapps /gp- auth -center-log/log_warn.log
  fields:
    log_type: gp-auth-center
    log_format: gp-other
  multiline.pattern: '^\d{4}-\d{1,2}-\d{1,2}\s\d{1,2}:\d{1,2}:\d{1,2}'
  multiline.negate: true
  multiline.match: after
   
2.2.5 重新构建业务镜像
  最后重新构建业务镜像,通过新版本的Dockerfile文件进行构建,并运行容器。
 
 filebeat只在测试环境使用了,并没有在线上环境使用,线上环境放弃了featbeat使用elk的集群直接用logstash读取了本地nas存储中的日志文件
  


  
页: [1]
查看完整版本: 7.4.2版本的ELK集群安装