上一篇:CAT跨语言服务链监控(四)服务端消息分发 下一篇:CAT跨语言服务链监控(六)消息分析器与报表(一)
CAT配置
在CAT中,有非常多的配置去指导监控的行为,每个配置都有相应的配置管理类来管理,都有一个配置名, 配置在数据库或者配置文件中都是以xml格式存储,在运行时会被解析到具体实体类存储。我们选取一个配置的初始化代码来分析:
public class ServerFilterConfigManager implements Initializable {
@Inject
protected ConfigDao m_configDao;
private volatile ServerFilterConfig m_config;
private static final String CONFIG_NAME = "serverFilter";
@Override
public void initialize() throws InitializationException {
try {
Config config = m_configDao.findByName(CONFIG_NAME, ConfigEntity.READSET_FULL);
String content = config.getContent();
m_configId = config.getId();
m_modifyTime = config.getModifyDate().getTime();
m_config = DefaultSaxParser.parse(content);
} catch (DalNotFoundException e) {
try {
String content = m_fetcher.getConfigContent(CONFIG_NAME);
Config config = m_configDao.createLocal();
config.setName(CONFIG_NAME);
config.setContent(content);
m_configDao.insert(config);
m_configId = config.getId();
m_config = DefaultSaxParser.parse(content);
} catch (Exception ex) {
Cat.logError(ex);
}
} catch (Exception e) {
Cat.logError(e);
}
if (m_config == null) {
m_config = new ServerFilterConfig();
}
Threads.forGroup("cat").start(new ConfigReloadTask());
}
}
以上代码是serverFilter配置的初始化逻辑,该配置的管理类是ServerFilterConfigManager,可以看到他实现了Initializable接口,所以,在ServerFilterConfigManager被plexus容器实例化之后,就会调用initialize()做一些初始化的工作,咱们看看他的初始化逻辑。
1、他首先读取cat数据库的config表,如果根据配置名 CONFIG_NAME 找到相关的配置信息。
2、如果 config 表中存在配置信息,则通过 DefaultSaxParser.parse(content) 方法解析xml配置信息,并将解析后的配置信息写入实体对象ServerFilterConfig m_config,我们的xml配置文件必须遵守CAT的解析规则,他们才会被正确的解析成对应的XxxConfig对象,具体配置规则大家在有需要的时候一步步摸索。
3、如果 config 表中不存在配置信息,就会去读取默认 xml 文件, 解析后写入到数据库和实体对象,下次再初始化的时候就是直接从数据库读取了,xml一般存在于cat-core/src/main/resources/config/ 和 cat-home/src/main/resources/config/ 两个目录。
4、其中有两个配置 serverFilter 和 aggreationConfig, 开启了检查更新线程,线程每隔1分钟检查配置是否更新,有更新就重新加载配置。
5、server.xml 配置文件的目录是由环境变量 CAT_HOME指定的,由CatHomeModule在setup安装的时候初始化。
我们来列一列cat有哪些配置
配置名 | 配置管理类 | 实体类 | 配置文件cat-xxxx/src/main/resources/config/*.xml | 用途 |
ServerConfigManager | ServerConfigManager | ServerConfig | 环境变量 CAT_HOME/server.xml | 未知 |
serverFilter | ServerFilterConfigManager | ServerFilterConfig | cat-core/..../serverFilter.xml | 未知 |
all-report-config | AllReportConfigManager | AllConfig | cat-home/..../all-report-config.xml | 未知 |
metricProductLine | ProductLineConfigManager | ProductLineConfig | cat-home/..../metricProductLine.xml | 未知 |
userProductLine | ProductLineConfigManager | ProductLineConfig | cat-home/..../userProductLine.xml | 未知 |
applicationProductLine | ProductLineConfigManager | ProductLineConfig | cat-home/..../applicationProductLine.xml | 未知 |
networkProductLine | ProductLineConfigManager | ProductLineConfig | cat-home/..../networkProductLine.xml | 未知 |
systemProductLine | ProductLineConfigManager | ProductLineConfig | cat-home/..../systemProductLine.xml | 未知 |
databaseProductLine | ProductLineConfigManager | ProductLineConfig | cat-home/..../databaseProductLine.xml |