概述
【踩坑】cat3.x服务端部署, springboot客户端接入
- 前言
- 服务器部署问题
- 1. 数据库连不上
- 2. 不要创建server.xml
- 客户端注册问题
- 1. client.xml信息错误
- 2. 应用注册名建议不要有特殊符号
- 3. 缓存/本地文件的干扰
前言
这两天在看有什么好一点, 全面, 轻量的监控工具. 其中就看到了Cat想要试一试, 结果部署半天出了一堆问题. 这里记录下, 希望能帮到小伙伴们.
总结了下. 服务器部署关键的几步:
- 去git上拉代码
- 将sql脚本执行,创建数据库和表
- 关键, 查看pom依赖, 根据自己的mysql版本选择合适的
mysql-connecor-java
版本 - maven clean package编译出war包, 改名
- 创建
/data/appdatas/cat
文件夹, windows的话一样,mkdir -p
/data/appdatas/cat`就好 - 目录下创建两个配置文件, 一个是数据库的, 一个是客户端的
- war包在tomcat中部署, 正常的话打开cat平台, 在线修改服务配置和路由配置
服务器部署问题
下面的日志文件, 都可以在/data/applogs/cat
中找到.
1. 数据库连不上
出现如下日志:
Caused by: java.sql.SQLException: Connections could not be acquired from the underlying database!
…
Caused by: com.mchange.v2.resourcepool.CannotAcquireResourceException: A ResourcePool could not acquire a resource from its primary factory or source.
…
[02-03 17:08:26.724] [ERROR] [StandardWrapper] Servlet initializing failed. javax.servlet.ServletException: java.lang.RuntimeException: Error when initializing modules! Exception: java.lang.RuntimeException: Unable to get component: class com.dianping.cat.analysis.TcpSocketReceiver.
javax.servlet.ServletException: java.lang.RuntimeException: Error when initializing modules! Exception: java.lang.RuntimeException: Unable to get component: class com.dianping.cat.analysis.TcpSocketReceiver.
- 如果是mysql8.x版本, 需要修改git拉取/下载的原码中, pom.xml中的
mysql-connecor-java
版本到8.x, 默认是5.x. 然后修改配置driver为com.mysql.cj.jdbc.Driver
- 确认
datasources.xml
jdbc相关配置没有填写错误. - 正确配置实例: mysql8.x版本
<?xml version="1.0" encoding="utf-8"?>
<data-sources>
<data-source id="cat">
<maximum-pool-size>3</maximum-pool-size>
<connection-timeout>1s</connection-timeout>
<idle-timeout>10m</idle-timeout>
<statement-cache-size>1000</statement-cache-size>
<properties>
<driver>com.mysql.cj.jdbc.Driver</driver>
<url><![CDATA[jdbc:mysql://localhost:3306/cat]]></url>
<user>root</user>
<password>123456</password>
<connectionProperties><![CDATA[useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&socketTimeout=120000]]></connectionProperties>
</properties>
</data-source>
</data-sources>
2. 不要创建server.xml
我看有些教程中提到, 除了要创建client.xml
, datasources.xml
, 还要创建server.xml
, 其实并不是必要, 而且容易出错, 多一事不如少一事. 不要创建.
这里说下我对这几个配置文件的理解.
- datasources.xml 不用多说, 数据库的配置
- client.xml 客户端的配置, 如果cat服务端也在这个机器上, 也会读取这个配置, 因为cat服务本身也是一个客户端.
然后普通的客户端, 比如springboot应用, 在接入了jar包后, 也是需要读取这个配置中的服务端的ip和端口号, 每隔10s会去尝试连接请求一次, 将自身的信息主动注册到cat服务端.
下面就是我关闭服务端后, 客户端日志的打印情况. (客户端和服务端输出的日志都是/data/applogs/cat
, 甚至是同一个文件. 这里要注意)
[02-03 20:52:26.986] [INFO] [ChannelManager] start connect server10.20.6.561:2281
[02-03 20:52:26.988] [ERROR] [ChannelManager] Error when try connecting to 10.20.6.561:2281
[02-03 20:52:37.003] [WARN] [DefaultClientConfigManager] error when connect cat server config url http://10.20.6.561:7070/cat/s/router?domain=cat-demo&ip=10.20.6.56&op=json
[02-03 20:52:37.003] [INFO] [ChannelManager] start connect server10.20.6.561:2281
[02-03 20:52:37.004] [ERROR] [ChannelManager] Error when try connecting to 10.20.6.561:2281
客户端注册问题
下面是能打开cat服务平台, 但是没有看到实例注册, 或者application页面打开直接报错500的情况
1. client.xml信息错误
有些教程中提到不要将ip设置为127.0.0.1
, 这其实就是因为如果服务端和客户端如果不在同一个机器的话, 客户端拿到的服务ip就是个错误的本地ip
检查ip, 端口是否设置正确
2. 应用注册名建议不要有特殊符号
因为客户端会主动将应用名通过http请求作为query参数
注册到cat服务端. 所以如果含{|}
等特殊符号, tomcat会报错.
tomcat9
和tomcat7,tomcat8
针对这种情况解决的方式也不太一样. 最简单的方式就是不要设置复杂的名字
会出现的错误:
Note: further occurrences of HTTP header parsing errors will be logged at DEBUG level.
java.lang.IllegalArgumentException: Invalid character found in the request target. The valid characters are defined in RFC 7230 and RFC 3986
3. 缓存/本地文件的干扰
如果上面的几个问题都多多少少遇到了, 并且也解决了, 但是Application
页面的Transaction
localhost:8080/cat/r/t
打开还是报500, 这里建议删除掉dataappdatascat
目录下的除了配置文件的其他东西, 再重启tomcat
最后
以上就是默默树叶为你收集整理的【踩坑】cat3.x服务端部署, springboot客户端接入前言服务器部署问题客户端注册问题的全部内容,希望文章能够帮你解决【踩坑】cat3.x服务端部署, springboot客户端接入前言服务器部署问题客户端注册问题所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复