目录
一.环境介绍:
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 [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启动成功
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存储中的日志文件