新手必看!10分钟带你解决 CAT 链路跟踪。
CAT 是美团点评开源的实时应用监控平台,提供了 Tracsaction、Event、Problem、Business 等丰富的指标项。在官方的 Issue 经常遇到以下几个问题
为什么 CAT 启动不起来?
能不能支持链路跟踪?
如何配置告警?
能不能接入钉钉、飞书机器人推送?
基于上面的需求,笔者 fork 了官方最新的源码进行二次开发,并打包镜像到 Docker Hub,方便大家使用。
Github 地址:传送门
Docker Hub 地址:传送门
改进了什么?
Docker 部署更方便,不需要额外挂载配置文件,只需要提供 JVM 参数和 MySQL 配置即可完成部署。
1docker run -e MYSQL_URL="127.0.0.1" -e MYSQL_PORT="3306" -e MYSQL_SCHEMA="cat" -e MYSQL_USERNAME="数据库账号" -e MYSQL_PASSWD="数据库密码" -p 8080:8080 --name=cat- ...
MySQL 存储 emoji 报错,怎么解决?
问题描述在特定业务场景(帖子、评论、个人签名)存储 emoji 表情。如果使用 utf8 字符集存储,会抛出如下错误:java.sql.SQLException: Incorrect string value: '\xF0\x9F\x92\x94' for column 'name' at row 1
原因分析MySQL 的 utf8 编码最多支持 3 个字节,而 emoji 表情需要占用 4 个字节,在早期的版本并没有实现真正意义上的 utf8 字符集。MySQL 从 5.5.3 版本开始支持 utf8mb4 字符集。
解决方案
备选方案
改造点
优缺点
把 utf8 编码改为 utf8mb4
客户端修改会话字符集服务端调整相关库表的字符集
更改大数据表困难
写入数据时编码,读取数据时解码还原
程序对每一个需要处理的字段进行修改,工作量不可控
不用修改生产数据库,DB 可读性差,额外性能消耗
正常情况下,我们会选择前者来解决这个问题。
查看 MySQL 服务端的字符集,确认是否为 utf8mb4。
1SHOW VARIABLES ...
深度排查 MySQL 时区误差 5 小时问题
问题描述最近经业务部门反馈,我们有个 APP 升级后,在 2023-01-09 22:47 发现,当前账号的最近登录时间为 2023-01-10 03:47,相差了 5 个小时。
第一轮排查:我们第一印象会认为是刚升级的代码出了问题,有可能是日期格式化没处理好,也有可能是 JSON 序列化没有指定时区,经过 Git diff 排查,我们并没有修改相关代码。
第二轮排查:可能是有人动了生产配置!排除了配置中心的改动,也检查了 K8s 的 Deployment 是否正确设置了 TZ=Asia/Shanghai,依然无果。
第三轮排查:提取线上部署的 jar,经过对比,我们发现 MySQL 驱动从原来的 5.1.45 升级到了 8.0.22 版本。
原因分析
生产数据库的配置是 time_zone=SYSTEM(对应 system_time_zone=CST,CST 时区没有标准,我们在使用 Java 客户端连接默认会把 CST 解析为时区+3,也就是当时事故出现的 5 小时误差)。
应用配置连接数据库的 jdbc-url 没有显示设置时区。MySQL驱动如果升 ...