可观测性指标监控告警APM后端链路追踪【免费下载链接】catCAT 作为服务端项目基础组件提供了 Java, C/C, Node.js, Python, Go 等多语言客户端已经在美团点评的基础架构中间件框架MVC框架RPC框架数据库框架缓存框架等消息队列配置系统等深度集成为美团点评各业务线提供系统丰富的性能指标、健康状况、实时告警等。项目地址https://gitcode.com/gh_mirrors/ca/cat点击查看免费下载本指南以 CATCentral Application Tracking开源仓库 docker/README.md 为骨架完整讲解基于 Docker 的 CAT 服务端镜像打包、容器编排与核心配置。读完本文你将掌握如何用一条命令构建 CAT 服务端镜像、通过 docker-compose 快速拉起「CAT MySQL」整套环境并能独立配置数据源、客户端路由与端口映射从零开始部署一套可运行的 CAT 监控服务端。一、CAT 服务端 Docker 化总览CAT 是美团点评开源的服务端监控基础组件本仓库以多模块 Maven 工程组织pom.xml 中声明了cat-client、cat-core、cat-consumer、cat-hadoop、cat-home、cat-alarm六个子模块其中cat-home 以 WAR 形式打包成 Web 应用见 cat-home/pom.xml 的packagingwar/packaging是整个服务端的核心入口对外提供监控报表页面与消息接收端口。在正式部署时服务端通常需要同时满足Web 管理端展示 Transaction、Problem、Heartbeat 等各类报表默认 8080 端口客户端数据接收端接收各语言客户端上报的消息默认 2280 端口MySQL 持久化存储报表与配置数据依赖 script/CatApplication.sql 初始化表结构。Docker 化方案将以上三部分拆解为两件事镜像打包把 cat-home 编译为 WAR 并塞进 Tomcat与容器编排用 docker-compose 同时拉起 CAT 服务与 MySQL仓库 docker 目录下的 6 个文件共同完成了这件事。二、镜像打包基于 Dockerfile 构建 CAT 服务端镜像Dockerfile 采用多阶段构建multi-stage build把「Maven 编译」和「Tomcat 运行」两个阶段解耦最终镜像只保留运行所需内容。2.1 阶段一Maven 编译产出 WARFROM maven:3.8.4-openjdk-8 as mavenrepo WORKDIR /app COPY cat-alarm cat-alarm COPY cat-consumer cat-consumer COPY cat-hadoop cat-hadoop COPY cat-client cat-client COPY cat-core cat-core COPY cat-home cat-home COPY pom.xml pom.xml RUN mvn clean package -DskipTests该阶段做了三件事使用maven:3.8.4-openjdk-8基础镜像CAT 4.x 构建环境需要 JDK 8将六个 Maven 子模块与根 pom.xml 拷贝进/app保证各模块间依赖关系可以被正确解析执行mvn clean package -DskipTests跳过测试完成编译产物为cat-home/target/cat-home.war。2.2 阶段二Tomcat 运行环境FROM tomcat:8.5.41-jre8-alpine ENV TZAsia/Shanghai COPY --frommavenrepo /app/cat-home/target/cat-home.war /usr/local/tomcat/webapps/cat.war COPY docker/datasources.xml /data/appdatas/cat/datasources.xml COPY docker/datasources.sh datasources.sh RUN sed -i s/port\8080\/port\8080\\ URIEncoding\utf-8\/g $CATALINA_HOME/conf/server.xml chmod x datasources.sh RUN ln -s /lib /lib64 \ apk add --no-cache bash tini libc6-compat linux-pam krb5 krb5-libs CMD [/bin/sh, -c, ./datasources.sh catalina.sh run]几个关键点值得展开WAR 重命名为cat.warTomcat 会自动解压并部署访问路径即为/cat数据源模板预置将 datasources.xml 放入 CAT 约定的配置目录/data/appdatas/cat/CAT 在运行时按此路径读取数据源配置见 ComponentsConfigurator.java 中通过datasources.xml注册 JDBC 数据源组件UTF-8 编码修正通过sed为 Tomcatserver.xml中的 8080 Connector 追加URIEncodingutf-8避免 URL 中文参数乱码基础系统依赖Alpine 镜像需要补充bash、libc6-compat兼容动态链接库、linux-pam、krb5Kerberos 认证库等运行依赖并引入tini作为容器 init 进程容器启动流程先执行datasources.sh将环境变量渲染进datasources.xml再启动catalina.sh run前台运行 Tomcat。2.3 执行镜像打包命令依据 docker/README.md在项目根目录下执行docker build -f docker/Dockerfile -t cat:{tag} .参数说明-f docker/Dockerfile指定 Dockerfile 路径默认名为Dockerfile因位于docker/子目录所以必须显式指定-t cat:{tag}为镜像打标签{tag}替换为你的版本号例如cat:4.0-RC1与根 pom.xml 中的版本号4.0-RC1对应.构建上下文必须为项目根目录因为 Dockerfile 中COPY cat-alarm、COPY pom.xml等均相对根目录寻址。构建完成后可通过docker images确认镜像生成并可用docker run -p 8080:8080 -p 2280:2280 cat:{tag}快速启动验证。三、docker-compose 一键编排CAT MySQL 整栈拉起除了手动构建仓库还提供了 docker-compose.ymlCompose 文件版本2.2将 CAT 服务端与 MySQL 数据库作为一个整体编排一条命令即可拉起整套环境。3.1 服务一CAT 服务端catcat: image: meituaninc/cat:3.0.1 container_name: cat environment: - MYSQL_URLcat-mysql - MYSQL_PORT3306 - MYSQL_USERNAMEroot - MYSQL_PASSWD - MYSQL_SCHEMAcat # 必须设置成你的机器IP地址 # - SERVER_IPYOUR IP volumes: - ./client.xml:/data/appdatas/cat/client.xml links: - mysql depends_on: - mysql ports: - 8080:8080 - 2280:2280配置要点镜像来源默认使用 DockerHub 官方镜像meituaninc/cat:3.0.1对应 docker/README.md 中给出的 DockerHub 地址若想使用本地构建的镜像取消build段注释即可切换为从源码构建# build: # context: ../ # dockerfile: ./docker/Dockerfile数据库环境变量MYSQL_URL指向 MySQL 服务的容器名cat-mysqlCompose 的links会维护/etc/hosts解析MYSQL_PORT、MYSQL_USERNAME、MYSQL_PASSWD、MYSQL_SCHEMA分别对应主机、端口、账号、密码与库名SERVER_IP注释明确指出必须设置成你的机器 IP 地址CAT 服务端会以此 IP 向客户端广播路由若使用默认值将导致客户端无法连接这是容器化部署中最常见的坑之一客户端路由配置挂载将宿主机的 client.xml 挂载到容器内/data/appdatas/cat/client.xml用于声明服务端集群地址详见第四节端口映射8080为 Web 管理端2280为客户端消息接收端口TCP两者必须同时暴露依赖关系通过links与depends_on确保 MySQL 先启动。3.2 服务二MySQLmysqlmysql: container_name: cat-mysql image: mysql:5.7.37 ports: - 3306:3306 volumes: - ./mysql/volume:/var/lib/mysql - ../script/:/docker-entrypoint-initdb.d/ command: mysqld -uroot --character-set-serverutf8mb4 --collation-serverutf8mb4_unicode_ci --init-connectSET NAMES utf8mb4; --innodb-flush-log-at-trx-commit0 environment: MYSQL_ALLOW_EMPTY_PASSWORD: true MYSQL_DATABASE: cat MYSQL_PASSWORD: 配置要点MySQL 5.7 镜像与 CAT 官方支持版本一致数据持久化将./mysql/volume挂载为 MySQL 数据目录注释明确警告「without this line, your data will be lost」——删除该挂载会导致容器重建后数据全部丢失自动初始化表结构将仓库 script 目录挂载到/docker-entrypoint-initdb.d/MySQL 容器首次启动时会自动执行其中的 CatApplication.sql完成 dailyreport、weeklyreport、monthreport、hostinfo 等核心表的创建字符集与性能参数--character-set-serverutf8mb4与--collation-serverutf8mb4_unicode_ci保证中文与 emoji 存储正确--innodb-flush-log-at-trx-commit0降低落盘频率以提升写入性能代价是崩溃时可能丢失最近 1 秒的事务日志空密码方案MYSQL_ALLOW_EMPTY_PASSWORDtrue允许 root 空密码与 CAT 服务的MYSQL_PASSWD空密码配置保持一致。3.3 启动与验证docker-compose up -d # 后台启动全部服务 docker-compose ps # 查看容器状态 docker-compose logs -f cat # 跟踪 CAT 容器日志验证步骤等待 MySQL 初始化完成首次启动需执行CatApplication.sql耗时较长访问http://宿主机IP:8080/cat打开 CAT 管理端用客户端 SDK 配置client.xml指向宿主机 2280 端口观察报表是否产生数据。四、核心配置文件解析4.1 数据源模板 datasources.xmldatasources.xml 是 CAT 服务端连接 MySQL 的 JDBC 数据源模板其中主机、端口、库名、账号、密码全部使用占位符?xml version1.0 encodingutf-8? data-sources data-source idcat maximum-pool-size3/maximum-pool-size connection-timeout1s/connection-timeout idle-timeout10m/idle-timeout statement-cache-size1000/statement-cache-size properties drivercom.mysql.jdbc.Driver/driver url![CDATA[jdbc:mysql://MYSQL_URL:MYSQL_PORT/MYSQL_SCHEMA]]/url userMYSQL_USERNAME/user passwordMYSQL_PASSWD/password connectionProperties![CDATA[useUnicodetruecharacterEncodingUTF-8autoReconnecttruesocketTimeout120000]]/connectionProperties /properties /data-source /data-sources模板包含两类参数连接池参数cat-home 运行时解析参数示例值含义maximum-pool-size3连接池最大连接数connection-timeout1s获取连接的超时时间idle-timeout10m空闲连接回收超时statement-cache-size1000PreparedStatement 缓存条数JDBC 连接参数drivercom.mysql.jdbc.DriverMySQL Connector/J 5.x 驱动url拼接占位符得到最终地址例如jdbc:mysql://cat-mysql:3306/catconnectionProperties开启useUnicodetruecharacterEncodingUTF-8保证编码正确autoReconnecttrue支持断线重连socketTimeout120000设置 socket 读超时 120 秒。4.2 环境变量渲染脚本 datasources.shdatasources.sh 是容器启动时执行的占位符替换脚本用sed将环境变量逐一写入模板#!/usr/bin/env bash sed -i s/MYSQL_URL/${MYSQL_URL}/g /data/appdatas/cat/datasources.xml; sed -i s/MYSQL_PORT/${MYSQL_PORT}/g /data/appdatas/cat/datasources.xml; sed -i s/MYSQL_USERNAME/${MYSQL_USERNAME}/g /data/appdatas/cat/datasources.xml; sed -i s/MYSQL_PASSWD/${MYSQL_PASSWD}/g /data/appdatas/cat/datasources.xml; sed -i s/MYSQL_SCHEMA/${MYSQL_SCHEMA}/g /data/appdatas/cat/datasources.xml;这套「模板 环境变量 sed 渲染」的设计使得同一镜像无需重新构建即可通过不同环境变量接入不同数据库。若不想用环境变量docker-compose 也提供了替代方案将宿主机./datasources.xml挂载到/data/appdatas/cat/datasources.xml直接覆盖模板注释中已给出示例。4.3 客户端路由配置 client.xmlclient.xml 是客户端侧的路由配置声明 CAT 服务端集群地址?xml version1.0 encodingutf-8? config modeclient servers server ip127.0.0.1 port2280 http-port8080/ /servers /configip服务端地址默认127.0.0.1docker-compose 注释明确建议修改为真实服务器集群地址如部署在多机环境应写各节点 IPport2280客户端消息上报端口必须与 CAT 服务端容器暴露的 2280 端口一致http-port8080服务端 Web 端口用于客户端回退查询路由信息。客户端 SDK 在启动时会读取该文件完成服务端寻址可参考 cat-client 模块中 CatBootstrap.java 与 CatClientConstants.java 对client.xml路径与配置项的解析逻辑。在多语言客户端场景下Java、C/C、Node.js、Python、Go 等客户端共用同一套路由协议ip:2280即为它们统一的接入点。五、常见部署问题与排查建议结合 Dockerfile 与 docker-compose 的注释汇总容器化部署中的高频问题客户端连不上服务端优先检查SERVER_IP是否设置为宿主机真实 IP以及client.xml中ip是否指向可路由地址——默认127.0.0.1仅适用于本机自测页面中文乱码确认镜像基于 Dockerfile 构建其中已通过URIEncodingutf-8修正 Tomcat 编码若自建镜像可对照该行补丁容器重建后数据丢失检查 MySQL 服务的./mysql/volume:/var/lib/mysql挂载是否存在首次启动报表为空确认../script/挂载生效且CatApplication.sql已执行可通过docker logs cat-mysql观察初始化日志端口冲突8080与2280需在宿主机保持空闲若被占用可修改ports映射为8081:8080这类形式但客户端http-port与port需同步调整。六、总结CAT 服务端的 Docker 化部署链路清晰完整docker/README.md给出镜像打包命令与官方镜像地址Dockerfile以多阶段构建将 Maven 编译与 Tomcat 运行解耦docker-compose.yml将 CAT 与 MySQL 整栈编排并自动初始化数据库datasources.xmldatasources.sh实现数据源的环境变量化渲染client.xml打通客户端路由。掌握这套方案即可在开发环境快速验证也能以此为模板扩展出生产级的多节点集群部署。赞分享可观测性指标监控告警APM后端链路追踪【免费下载链接】catCAT 作为服务端项目基础组件提供了 Java, C/C, Node.js, Python, Go 等多语言客户端已经在美团点评的基础架构中间件框架MVC框架RPC框架数据库框架缓存框架等消息队列配置系统等深度集成为美团点评各业务线提供系统丰富的性能指标、健康状况、实时告警等。项目地址https://gitcode.com/gh_mirrors/ca/cat点击查看免费下载相关推荐MinerU Docker 部署实战基于 vLLM 基础镜像构建镜像与 Compose 多服务编排指南MinerU Docker 部署实战基于 vLLM 基础镜像构建镜像与 Compose 多服务编排指南 本文以 MinerU 官方文档 Docker 部署指南人工智能大模型OCR计算机视觉音乐歌词高效管理全攻略163MusicLyrics工具深度解析音乐歌词高效管理全攻略163MusicLyrics工具深度解析 在数字音乐时代歌词不仅是歌曲的灵魂更是音乐欣赏体验的重要组成部分。然而面对网易云音乐、Q可观测性后端微服务AI编程防错指南Karpathy四条编码原则AI编程防错指南Karpathy四条编码原则 你需要的那个文件上传功能是 50 行AI 给你交回来 200 行还带抽象工厂和重试策略。——同事指着屏幕说了AI 技能提示工程创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考