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

news2024/11/19 15:18:57

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 在容器里检查配置文件是否改动成功

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/641276.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

TensorFlowLite 声音识别

开发 添加tensorflow的核心依赖 implementation org.tensorflow:tensorflow-lite-task-audio:0.4.0将训练模型放到main/assets文件夹下 在build.gradle中配置 因为打包时tflite文件可能会被压缩,所以需要配置如下 buildFeatures {viewBinding true}androidResources {noComp…

2023 开放原子全球开源峰会高峰论坛成功举办

6 月 11 日&#xff0c;以 “开源赋能&#xff0c;普惠未来” 为主题的 2023 开放原子全球开源峰会高峰论坛在北京成功举办。工业和信息化部相关司局、北京市经济和信息化局、北京经济技术开发区管理委员会相关领导出席并致辞。 北京市经济和信息化局副局长王磊在致辞中表示&am…

4、5类LSA案例

拓扑 需求 实现PC1和PC3互联互通 配置步骤 1&#xff09;配置接口信息 - 配置PC的IP地址 - 配置路由器的接口 2&#xff09;配置OSPF单区域 - 创建ospf进程&#xff0c;定义router-id - 指定相应区域 - 宣告网段进入ospf 3&#xff09;配置OSPF多区域 4) R6配置去往PC3的静…

Matlab论文插图绘制模板第103期—分组散点图

在之前的文章中&#xff0c;分享了Matlab散点图的绘制模板&#xff1a; 进一步&#xff0c;再来分享一下分组散点图的绘制模板。 先来看一下成品效果&#xff1a; 特别提示&#xff1a;本期内容『数据代码』已上传资源群中&#xff0c;加群的朋友请自行下载。有需要的朋友可以…

【裸机开发】按键输入实验

目录 一、硬件原理分析 二、寄存器分析 1、时钟源初始化 2、设置 IO 复用 3、初始化 IO 复用引脚&#xff08;设置电气属性&#xff09; 4、初始化GPIO 三、汇编代码&#xff08;start.s&#xff09; 四、公共头文件&#xff08;imx6u.h&#xff09; 四、C 代码编写 …

【6.13 代随_56day】 两个字符串的删除操作、编辑距离

两个字符串的删除操作、编辑距离 两个字符串的删除操作1.方法图解步骤代码 编辑距离1.方法图解步骤代码 两个字符串的删除操作 力扣连接&#xff1a;583. 两个字符串的删除操作&#xff08;中等&#xff09; 1.方法 确定递推公式 当word1[i - 1] 与 word2[j - 1]相同的时候 …

STL之list

目录 list模拟实现一. list的基本框架二. list_node类1.构造函数2.其他函数 三. 迭代器&#xff08;iterator&#xff09;1.结构2. 构造函数3. 运算符重载operator-> 四.反向迭代器1.结构2.构造函数3.运算符重载 五. list常用方法及实现1. 默认构造函数a.empty_init 2.迭代器…

8. WebGPU 平移变换

我们将开始编写与顶点缓冲区文章中的示例类似的代码&#xff0c;但这次将绘制单个 F 而不是一堆圆&#xff0c;并使用索引缓冲区来保持数据更小。 让我们在像素空间而不是裁剪空间中工作&#xff0c;就像 Canvas 2D API 我们将制作一个 F&#xff0c;将从 6 个三角形构建它 …

啥?PCB拼版对SMT组装有影响!

PCB为什么要拼版&#xff1f; 拼版主要是为了满足生产的需求&#xff0c;有些PCB板太小&#xff0c;不满足做夹具的要求&#xff0c;所以需要拼在一起进行生产。 拼版也可以提高SMT贴片的焊接效率&#xff0c;如只需要过一次SMT&#xff0c;即可完成多块PCB的焊接。 同时也可…

你知道ai绘画工具都有哪些吗?ai画图的软件分享给你

大家好&#xff01;你有没有想过&#xff0c;如果我们能有一种神奇的工具&#xff0c;可以帮助我们实现想象中的绘画作品&#xff0c;该有多好呢&#xff1f;现在&#xff0c;随着人工智能的发展&#xff0c;我们可以借助ai绘画工具来探索艺术的奇妙世界了&#xff01;不过你是…

又双叕搞事?我拿着这份“满级”的JVM笔记,拼进了阿里

JVM JVM&#xff0c;一个熟悉又陌生的名词&#xff0c;从认识Java的第一天起&#xff0c;我们就会听到这个名字&#xff0c;在参加工作的前一两年&#xff0c;面试的时候还会经常被问到JDK&#xff0c;JRE&#xff0c;JVM这三者的区别。 JVM&#xff08;Java Virtual Machine…

汽车IVI中控开发中视频相关的一些知识点

前言: 视频最早的渊源来源于电视。做汽车仪表/IVI中控,尤其是IVI信息娱乐部分,都要涉及到视频这个知识点,各种概念很多,首先需要明确一条主线,那就是SDTV标清电视->HDTV高清电视->UHDTV超高清电视的一个发展脉络,BT601/656是SDTV标清电视接口,BT1120则对应HDTV高…

ShardingSphere

一、基本概念 1、什么是ShardingSphere 1、一套开源的分布式数据库中间件解决方案 2、有三个产品&#xff1a;Sharding-JDBC和Sharding-Proxy、Sharding-Sidecar 3、定位为关系型数据库中间件&#xff0c;合理在分布式环境下使用关系型数据库操作 2、分库分表 1什么是分库…

文物和古建筑防雷综合解决方案

文物和古建筑作为珍贵的历史遗产&#xff0c;需要受到专业的防雷保护&#xff0c;以保持其完整性和安全性。本文将介绍详细的文物和古建筑防雷方案和措施&#xff0c;包括避雷针安装、接地系统建设、监测技术和定期维护等。 引言&#xff1a; 文物和古建筑承载着珍贵的历史记忆…

防雷抗浪涌插排插座推荐,同为科技(TOWE)防雷桌面PDU安全可靠

同为科技TOWE双排防雷抗浪涌桌面PDU插座 随着夏天天气越来越热&#xff0c;强对流天气增多&#xff0c;雷雨天气频发。在雷电季节&#xff0c;通常影响家用电器安全的主要原因是由于雷电感应的侵入&#xff0c;特别是对绝缘强度低、过电压耐受力差的微电子产品影响甚大。而所谓…

JVM笔记(二)

JVM内存管理 在之前&#xff0c;我们了解了JVM的大致运作原理以及相关特性&#xff0c;这一章&#xff0c;我们首先会从内存管理说起。 在传统的C/C开发中&#xff0c;我们经常通过使用申请内存的方式来创建对象或是存放某些数据&#xff0c;但是这样也带来了一些额外的问题&…

一次XxlJob调度任务重复执行的问题排查

目录 东老师的问题1. 为什么会重复执行2. 为什么时间间隔改为1min就不会重复执行** 开始排查先看下任务配置 任务第一次执行排查执行类 》JobThreadJobThread的核心逻辑1.循环消费 一个阻塞队列 不断的去消费队列中TriggerParam 这个参数2.看下TriggerParam&#xff0c;这正是我…

硬件学习 软件 Cadence day10 查看网表导入进度,钻孔保护等一些操作

1. 查看网表导入状态。 2. 放置元器件 之前 画板框 3.放置元器件 4.把导入的DXF 文件变成板框 1.首先导入DXF文件 2. 点击按钮 3. 鼠标点击需要 调整为板框的地方 3.1 其中包括边框 3.2 固定的钻孔 5.给钻孔打上保护&#xff08;防止布线的时候区域错误&#xff0c;在固定的时…

12. AbstractQueuedSynchronizer之AQS

12.1 前置知识 ● 公平锁和非公平锁 ○ 公平锁&#xff1a;锁被释放以后&#xff0c;先申请的线程先得到锁。性能较差一些&#xff0c;因为公平锁为了保证时间上的绝对顺序&#xff0c;上下文切换更频繁 ○ 非公平锁&#xff1a;锁被释放以后&#xff0c;后申请的线程可能会先获…

第58讲:Python编程中最难以理解的递归函数核心概念以及应用案例

文章目录 1.递归函数的概念2.递归函数的使用2.1.案例一2.1.1.需求描述2.1.2.使用常规的循环来实现2.1.3.使用递归函数实现 2.2.案例二2.2.1.需求描述2.2.2.使用常规的循环来实现2.2.3.使用递归函数实现 3.使用递归函数计算阶乘3.1.阶乘的概念3.2.使用递归函数实现阶乘的算法3.3…