9.5 应用配置解析
因为用户的配置的格式是多种多样,我们需要用户自己设置的配置模板,来解析对应的配置。以下举一个例子 例如一个用户的MySQL配置可能存在如下三种配置方式。
ip = "ip"
port = "port"
user = "hello"
[mysqlconfig]
dsn = "user:password@ip:port"
在我们不清楚用户配置的字段情况下,我们是无法将这些配置解析出来。所以我们必须设计一种方式,能够让我们的Juno agent
能够准确理解用户的这些配置。
为了适应用户不同配置方式,所以我们首先需要引入模板的概念。 我们要将用户不同的配置方式,配置成一个解析模板,将这种模板存入到数据库中,将其标记为一种类型,我们把这种类型称之为JunoTpl
,那么我们可以把上面的三种mysql配置方式,可以将配置设置为JunoTpl
\=1,JunoTpl
\=2,\=3,这样我们就可以去类型去解析不同的配置方式。
但这样只是解决了配置的方式,但是我们的Juno agent
还是无法理解模板里的字段类型,这个字段是将起解析为ip,还是port,还是dsn,我们需要一个基础结构去识别。 在这里Juno agent
规范了基本的几个基础结构,定义如下:
- $SCHEME
- $IP
- $PORT
- $DSN
- $USERNAME
- $PASSWORD
目前Juno agent
支持以下类型
- $MYSQL
- $REDIS
- $GRPC
后续会支持更多类型
根据上述的介绍,我们的Juno agent
可以将之前多样性的而用户配置完全解析。
我们在用户端的配置的表现形式将是
addr = $IP:$PORT
password = $PASSWORD
JunoType = $MYSQL
我们在用户端的配置的表现形式将是
ip = "ip"
port = "port"
user = "hello"
password = "world"
JunoTpl = 2
我们在后台配置JunoTpl为2的模板内容以下所示,该数据存储在ETCD中。 keyname为/Juno-agent/configtpl/2 value如下所示
我们在用户端的配置的表现形式将是
[mysqlconfig]
dsn = "user:password@ip:port"
JunoTpl = 3
我们在后台配置JunoTpl为3的模板内容以下所示,该数据存储在ETCD中。 keyname为/Juno-agent/configtpl/3 value如下所示
dsn = $DSN