您现在的位置是:首页 >技术杂谈 >微服务外网部署灵活配置方案(不改代码适配apm和日志中心)网站首页技术杂谈

微服务外网部署灵活配置方案(不改代码适配apm和日志中心)

西邮陈冠希 2024-10-18 12:01:03
简介微服务外网部署灵活配置方案(不改代码适配apm和日志中心)

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"/> &lt;!&ndash; 日志输送到KAFKA时所需要的topic &ndash;&gt;-->
    <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找到服务,点击升级,查看环境变量有没有添加的内容

5.2 在容器里检查配置文件是否改动成功

风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。