1.综述
之前微服务在进行部署时,有关日志中心和apm相关的配置都是放在代码相应的配置文件中的。
日志中心:
/src/main/resources/logback-spring.xml
/PIPELINE/docker/flume/hosts
apm:
/PIPELINE/docker/apm/apm_agent_dev.config
/PIPELINE/docker/apm/apm_agent_prod.config
在外网部署时,我们需要修改上述文件的内容,这样每增加一套新环境就需要修改代码和重新编译镜像,没法做到一套代码适配所有。
所以我们需要想办法将apm和日志中心在不同环境的配置,放在部署脚本environment环境变量中,这样就能做到灵活配置了
2.cpaas-compose.yml文件修改
在环境变量中新增外网测试环境和生产环境对应的配置项
services: # 服务列表
zte-icenter-open-appmc: # 服务名
image: swr:2512/admin/zte-icenter-open-appmc:v1.0.0_build_20211227165132 # 镜像名
scale: 1 # 实例数
mem_limit: 4294967296 # 内存限制
mem_reservation: 1.0737418e+09
environment: # 环境变量
runmode: dev
ITNODE01: 10.5.218.11
ITNODE02: 10.5.218.12
ITNODE03: 10.5.218.13
DAP01: 10.54.154.131
DAP02: 10.54.154.132
DAP03: 10.54.154.133
DAP151: 10.54.154.131
DAP154: 10.54.154.132
PINPOINT_IP: 10.54.154.137
PINPOINT_SPAN_PORT: "9996"
PINPOINT_STAT_PORT: "9995"
PINPOINT_TCP_PORT: "9994"
JAVA_OPTS: -Dlog4j2.formatMsgNoLookups=true
eureka.client.serviceUrl.defaultZone: http:///zte-paas-msp-registrycenter/eureka
msa.instance.metadata.appid: ""
msa.instance.metadata.az: ""
msa.instance.metadata.cluster: tcf-bj-test01
msa.instance.metadata.dc: ""
msa.instance.metadata.idc: ""
profiles_active: dev
spring.cloud.config.label: zte-icenter-open
spring.cloud.config.password: zte-itp-emp
spring.cloud.config.uri: http://st-itconfig.msp.zte.com.cn/it-config-server
spring.cloud.config.username: zte-itp-emp
spring.profiles.active: dev,v1.0.0
health_check: # 健康检查配置
healthy_threshold: 2 # 健康门线
response_timeout: 20000 # 请求超时时间
port: 80 # 健康检查端口
unhealthy_threshold: 3 # 不健康门线
initializing_delay: 360000 # 服务初始化延迟时间
live_init_delay: 180000
interval: 2000 # 服务健康检查时间间隔
request_line: GET "/zte-icenter-open-appmc/info" "HTTP/1.0" # 健康检查请求方式 及上下文
routes: # 服务路由配置
- context: zte-icenter-open-appmc # 服务上线文
protocol: http # 服务路由协议
port: 80 # 服务端口
3.日志中心的修改
日志中心的kafka地址的IP,原来读取的是/PIPELINE/dockder/flume/hosts文件中的配置
3.1 修改run.sh(日志中心kafka IP)
现在我们设置了环境变量之后,需要修改/PIPELINE/dockder/run.sh的脚本,增加一段在/root/hosts被拷贝到/etc/hosts之前,读取环境变量改写一下内容再拷贝。
文字版:
if [ "$ITNODE01" != "" ]; then sed -i 's#.*itnode01.bigdata$#'${ITNODE01}' itnode01.bigdata#g' /root/hosts fi if [ "$ITNODE02" != "" ]; then sed -i 's#.*itnode02.bigdata$#'${ITNODE02}' itnode02.bigdata#g' /root/hosts fi if [ "$ITNODE03" != "" ]; then sed -i 's#.*itnode03.bigdata$#'${ITNODE03}' itnode03.bigdata#g' /root/hosts fi if [ "$DAP01" != "" ]; then sed -i 's#.*dap01$#'${DAP01}' dap01#g' /root/hosts fi if [ "$DAP02" != "" ]; then sed -i 's#.*dap02$#'${DAP02}' dap02#g' /root/hosts fi if [ "$DAP03" != "" ]; then sed -i 's#.*dap03$#'${DAP03}' dap03#g' /root/hosts fi if [ "$DAP151" != "" ]; then sed -i 's#.*dap151$#'${DAP151}' dap151#g' /root/hosts fi if [ "$DAP154" != "" ]; then sed -i 's#.*dap154$#'${DAP154}' dap154#g' /root/hosts fi
3.2 修改配置中心(日志中心topic及端口号)
日志中心的kafka topic和端口号,可以使用配置中心来做。在配置中心新建如下两个配置项,然后在/src/main/resources/logback-spring.xml里读取
isoalog.kafka.topic
isoalog.kafka.port
文字版:
<!-- 对接日志中心,测试环境9092,生产环境6667,天翼云180生产环境为9092 --> <springProperty scope="context" name="logPort" source="isoalog.kafka.port" defaultValue="9092"/> <!-- 务必修改topic,格式:ms_zte_领域_app,有效topic参考WIKI:https://wiki.zte.com.cn/pages/viewpage.action?pageId=341289787 --> <!-- <property name="isoalog.kafka.topic" value="ms_zte_itp_app"/> <!– 日志输送到KAFKA时所需要的topic –>--> <springProperty scope="context" name="logTopic" source="isoalog.kafka.topic" defaultValue="ms_zte_itp_app"/> <!-- 日志输送到KAFKA时所需要的topic -->
4.APM的修改
APM是pinpoint要配置的地址和端口,之前是从如下两个文件读取的,分别代表测试环境和生产环境
/PIPELINE/docker/apm/apm_agent_dev.config
/PIPELINE/docker/apm/apm_agent_prod.config
4.1 修改run.sh(IP及端口)
现在我们设置了环境变量之后,需要修改/PIPELINE/dockder/run.sh的脚本,在脚本中根据环境选择把apm_agent_dev.config或apm_agent_prod.config拷贝到/apm-agent/pinpoint.config之后,增加一段,将这个最终文件pinpoint.config再根据环境变量修改一下
文字版:
if [ "$PINPOINT_IP" != "" ]; then sed -i 's#profiler.collector.ip=.*$#profiler.collector.ip='${PINPOINT_IP}'#g' ./apm-agent/pinpoint.config fi if [ "$PINPOINT_SPAN_PORT" != "" ]; then sed -i 's#profiler.collector.span.port=.*$#profiler.collector.span.port='${PINPOINT_SPAN_PORT}'#g' ./apm-agent/pinpoint.config fi if [ "$PINPOINT_STAT_PORT" != "" ]; then sed -i 's#profiler.collector.stat.port=.*$#profiler.collector.stat.port='${PINPOINT_STAT_PORT}'#g' ./apm-agent/pinpoint.config fi if [ "$PINPOINT_TCP_PORT" != "" ]; then sed -i 's#profiler.collector.tcp.port=.*$#profiler.collector.tcp.port='${PINPOINT_TCP_PORT}'#g' ./apm-agent/pinpoint.config fi
5.验证是否生效:
5.1检查环境变量是否添加成功
在esm找到服务,点击升级,查看环境变量有没有添加的内容