目录

.环境介绍:

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

 

架构图


image.png

image.png

 1.1软件介绍

Elasticsearch

Elasticsearch 是一个分布式、RESTful 风格的搜索和数据分析引擎,能够解决不断涌现出的各种用例。 作为 Elastic Stack 的核心,它主要是集中存储数据。

Kibana

Kibana 是一个可扩展的用户界面,主要是将数据可视化展示和管理

Logstash

Logstash 是动态数据收集管道,拥有可扩展的插件生态系统。

Beats

Beats 是一个面向轻量型采集器的平台,这些采集器可从边缘机器发送数据。本次使用的是Beats中的FilebeatFilebeat主要作用是抓取日志文件。

日志抓取流程

1. 在每台服务器中安装一个FilebeatFilebeat就能抓取该服务器中不同程序产生的日志;

2. FileBeat将抓取的日志转发给Logstash

3.Logstash整合每台服务器发送过来的日志信息,可以实现过滤、转换格式等;

4. Logstash将转换好的日志信息发送给Elasticsearch

5. Elasticsearch收到日志信息后,将其存储在服务器中,并支持数据转换等操作;

1.2操作系统版本

linux-el7.x86_6448G

 

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,注意有安全要求时设置复杂密码

image.png


添加一个管理员并设置密码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 网络地址和端口,用于httptranport服务使用

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'

 image.png

能够访问代表es的身份认证和es启动都没有问题,但是数据没有更新需要将data目录下面的删除掉然后再进行重启,即可

/usr/local/elk/elasticsearch-7.4.2-02/data

 image.png

这样显示的则是正常的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

 image.png

image.png

image.png

 

 

 

 

.部署logstash

1.解压logstash

2.修改配置文件gp-logstash.conf

cat gp-logstash.conf

input {

  beats{

    port => "5044"

  }

}

filter {

  if [fields][log_format] == "gp-gpc"{

    grok {

      match => {"message" => "%{TIME:logTime} %{WORD:logType} %{DATA:class}-%{GREEDYDATA:logMessage}"}

    }

  } else if [fields][log_format] == "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 [fields][log_format] == "gp-count"{

      grok {

        match => {"message" => "%{TIMESTAMP_ISO8601:logTime} \[%{DATA:thread}\] %{GREEDYDATA:log_json}"}

      }

      json {

        source => "log_json"

        remove_field=>["log_json"]

      }

    } else if [fields][log_format] == "gp-gpx"{

      grok {

        match => {"message" => "%{TIMESTAMP_ISO8601:logTime} %{DATA:logType} %{NUMBER:Pid} --- \[%{DATA:thread}\] %{DATA:class}:%{GREEDYDATA:logMessage}"}

      }

    } else if [fields][log_format] == "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 => "%{[fields][log_type]}-%{+YYYY.MM.dd}"

    }

}

 

 

3.启动logstash

nohup ./logstash -f config/gp-logstash.conf &

 

logstash启动成功

 image.png

 

 

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

 image.png

Heartbeat 运行监测

 image.png

根据上面地址下载插件然后安装即可   

image.png

安装完成修改配置文件/etc/heartbeat/heartbeat.yml

 image.png

修改完成配置文件后使用命令heartbeat setupsetup 命令加载 Kibana 索引模式

 image.png

启动heartbeat 服务

image.png

检查数据

 image.png

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

 

 

 

 

.检查所有服务启动情况

检查elasticsearch


image.pngimage.png

 

检查filebeat


image.png


检查kibana


image.png

检查logstash

 image.png

 

 


针对如下两种情况才推出的轻量级的filebeat,获取容器中的日志说明

(1) 日志从容器挂载至ELK服务器缓慢

(2) 日志在Logstash格式化解析缓慢

filebeat存在一个严重的弊端会占用系统资源,日志量越大消耗的系统资源情况越多,有的企业节点机或者容器给的资源紧缺,所以就放弃使用了filebeat

现在服务器产生的日志有以下几种

1) 程序自定义产生的日志(*.log或者*.file文件)

2) Java程序后台启动的日志输出文件nohup.out

3) tomcat程序的日志输出文件catalina.out

4) 容器的日志(获取的内容是容器内部的标准化控制台输出)

这几种日志的nohup.outcatalina.out、容器日志都会被华为云的AOM所截取(并不会保留相关文件)。

因此ELK想要获取程序的日志,只能通过程序自定义产生的日志。使用程序自定义产生的日志可控性更高。

1.2.2 ELK概述

ELK日志管理系统提供了强大的日志管理能力。

ELK总体上分为四部分,ES用于日志的存储、Logstash用于日志的解析和格式化、Kibana用于日志界面的展示、Filebeat用于日志的截取。

ELK包含了日志定期清理功能(清除ES存储的日志)。

ELK日志管理系统可以不影响AOM的使用。

1.2.3 日志传输

旧版使用ELK获取容器内部日志的流程如下图所示:

image.png

此流程在日志文件挂载和日志切割格式化过程耗时缓慢。

新版方案如下图所示:

image.png

此方案由容器内部进行日志的获取和推送,减少了日志挂载过程中的耗时问题。在开发环境测试时,日志切割格式化缓慢的原因很大程度在于服务器资源不够。如果能提高服务器资源,可以提高日志格式化的效率。

此方案的弊端机器耗费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 programBecause 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

基于构建的基础镜像,并规定工作空间为/usr/local/project,和filebeat压缩包同级目录。

准备4个环境变量参数。

apollo: 指定apollo启动的环境,即指定读取apollo服务的地址。

logstash: 指定logstash服务的IP和端口号

upEnv: 指定启动程序时的参数。目前可用于指定apollo服务的地址,多用于私有化部署。参数内容为:-Dapollo.meta=http://dev.apollo.com:8099。默认值为空,即使用apollo指定的地址。

filebeatEnable: 指定是否需要启动filebeat进行日志的推送。

filebeat的配置文件上传至容器内部

拷贝程序包

通过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的启动可配置和logstashIP地址可配置。

所以脚本内容和Java程序的一致即可,具体内容如下所示:

#!/bin/bash
logstash=$1
filebeatEnable=$2
if [ $filebeatEnable = "false" ]; then
  echo "Do not start the filebeat programBecause 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

 

基于构建的基础镜像,并规定工作空间为/usr/local/tomcat/webapps

准备4个环境变量参数。

apollo: 指定apollo启动的环境,即指定读取apollo服务的地址。

logstash: 指定logstash服务的IP和端口号

upEnv: 指定启动程序时的参数。目前可用于指定apollo服务的地址,多用于私有化部署。参数内容为:-Dapollo.meta=http://dev.apollo.com:8099。默认值为空,即使用apollo指定的地址。

filebeatEnable: 指定是否需要启动filebeat进行日志的推送。

将参数写入至tomcat的启动脚本中

filebeat的配置文件上传至容器内部

拷贝程序包

通过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存储中的日志文件