ARTIFACTORY:元数据服务故障排除
相关版本:此信息属于Artifactory版本7.x
Metadata是一个用Go语言编写的微服务,与Artifactory 7.x捆绑在一起。它用于存储来自JFrog服务(如Artifactory和Xray)的元数据信息包,并有自己的配置设置和日志文件。由于Artifactory是用另一种语言(Java)编写的,这可能会产生几个问题。因此,当元数据出现任何问题时,通过查看$ARTIFACTORY_HOME/var/log目录中的以下文件来开始故障排除:
- metadata-service.log
- metadata-request.log
- console.log
您可能遇到的最常见的用例之一是Artifactory提供连接字符串(通过system.yaml配置文件)。在启动过程中,Artifactory解析其Java连接字符串和参数,然后将其转换为Go格式。然而,在某些边缘情况下,这个过程可能会失败。以下是其他几个可能发生的常见问题,以及关于如何解决这些问题的建议,每个错误都可以在metadata-service.log中找到:
如果你的Artifactory实例与外部Oracle DB一起运行,你可能会遇到这个错误:2020-03-19T18:26:17.366Z [jfmd] [PANIC] [4302998e04479677] [database_持有人。]go:51] [main] - Could not initialize database (db config: {oracle ARTIFACTORY_TEST/***@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=pepldr00237.co . pepe .pvt)(PORT=60003))(CONNECT_DATA=(SERVER=DEDICATED)(SID=stm1d)))}): ORA-00000: DPI-1047: Cannot locate a 64-bit oracle Client library: "The specified module Could not be found"。请访问https://oracle.github.io/odpi/doc/installation.html#windows寻求帮助
连接数据库出错。放弃
.init www.si-fil.com/metadata/services/common。(* databaseBearer)
元数据/服务/共同/ database_bearer.go: 84
www.si-fil.com/metadata/services/common.NewDatabaseBearer
元数据/服务/共同/ database_bearer.go: 49
...
/ database_bearer。: 51 + 0 x2a8
main.main ()
元数据/元数据。: 29 + 0 x435
从系统读取配置错误。yaml: Type:, Url:: could not set db properties to application configuration: could not parse jdbc Url 's connect part: ldap://uoid.rsv。se: 7389 / ZV3T001 cn = OracleContext, dc = rsv, dc =
Goroutine 1[运行]:
这里的连接字符串如下:jdbc: oracle:薄:@ldap: / / mydomain.nex。答:7389 / ZV3T001 cn = OracleContext, dc = rsv, dc =元数据尝试将JDBC连接字符串转换为Go连接字符串,但失败。
变通办法是进入你的系统。Yaml和元数据。数据库部分,添加一个Go:前缀的Go连接字符串,然后添加一个Go样式的连接字符串,而不是JDBC连接字符串。关于如何为Oracle构建连接字符串的详细信息可以在这里找到。例如,如果连接字符串是oracle://user:passw@service_name,你需要将值设置为:oracle://user:passw@service_name。ֿ
2020-03-22T18:25:10.663Z [jfmd] [ERROR] [4104ec4b9d67964e] [database_载体。]go:51] [main] -无法初始化数据库(db config: {mysql artifactory:***@tcp(adim-mysql. cooa7fn0wpy.us - west2.rds .amazonaws.com:3306)/artdb?charset=utf8&tls=true&parseTime=true&clientFoundRows=true}): x509:证书由未知授权错误连接到数据库。放弃
.init www.si-fil.com/metadata/services/common。(* databaseBearer)
/ src / www.si-fil.com/metadata/services/common/database_bearer.go: 84
www.si-fil.com/metadata/services/common.NewDatabaseBearer
/ src / www.si-fil.com/metadata/services/common/database_bearer.go: 49
main.main
/ src / www.si-fil.com/metadata/metadata.go: 29
runtime.main
/ src /运行/ proc.go: 203
runtime.goexit
/ src /运行/ asm_amd64.s: 1357
这表示缺少SSL/TLS证书。要解决这个问题,在Artifactory机器上,需要在/etc/ssl/certs文件夹中添加适当的证书文件。
共享:
数据库:
司机:org.postgresql.Driver
密码:very_secret_password
类型:postgresql
url: " jdbc: postgresql: / / mydatabase.net: 5432 / artifactory”
用户名:artifactory
元数据:
数据库:
Url: go:user='artifactory' password='${共享。数据库。' dbname=artifactory host= mydatabe.net port=5432 sslmode=disable
当读取Go连接字符串时,${shared.database. netPassword}将被读取为very_secret_password(文件内容不会改变),并且very_secret_password将像往常一样由路由器服务加密在物理文件中。您可以在占位符中使用任何配置键,甚至环境变量。
2020-06-15t7:25:47. 196z [jfmd] [INFO] [60ebe5752c965a8d] [database_holder .]go:84] [main] - connection to (db config: {postgresql user='artifactory' password='***' dbname=artifactory host=127.0.0.1 port=5432 sslmode=disable}) [database]
2020-06-15t7:25:47. 214z [jfmd] [PANIC] [60ebe5752c965a8d] [database_载体。]go:68] [main] - Could not initialize database (db config: {postgresql user='artifactory' password='***' dbname=artifactory host=127.0.0.1 port=5432 sslmode=disable}):连接数据库出错
.init www.si-fil.com/metadata/services/common/db。(* databaseBearer)
/ src / www.si-fil.com/metadata/services/common/db/database_bearer.go: 114
www.si-fil.com/metadata/services/common/db.NewDatabaseBearer
/ src / www.si-fil.com/metadata/services/common/db/database_bearer.go: 66
main.main / src / www.si-fil.com/metadata/metadata.go: 38
runtime.main
/ src /运行/ proc.go: 203
runtime.goexit
/ src /运行/ asm_amd64.s: 1373
Goroutine 1[运行]:
运行/调试。堆栈(0x38, 0xc000160300, 0xc00032c200)
/ src /运行/调试/堆栈。: 24 + 0 x9d
www.si-fil.com/jfrog-go-commons/pkg/log.(*standardLogger).Panicfc(0xc000554ac0, 0x16058a0, 0xc0004d9bf0, 0x1390d88, 0x32, 0xc00032c200, 0x2, 0x2)
/ src / www.si-fil.com/go-commons/pkg/log/standard_logger.go: 42 + 0 x6a
www.si-fil.com/metadata/services/common/db.NewDatabaseBearer(0x16058a0, 0xc0004d9bf0, 0x16064e0, 0xc000090b90, 0x160a760, 0xc0004e5810, 0x15fd860, 0xc0000bf2e8, 0x15e0aa0, 0xc000554a90,…)
x2d4 / src / www.si-fil.com/metadata/services/common/db/database_bearer.go: 68 + 0
main.main ()
/ src / www.si-fil.com/metadata/metadata.go: 38 + 0 x5b7
(数据库)
这是因为连接到PostgreSQL数据库的密码包含反斜杠字符,无法解析。这里有一些可行的变通方法:
- 创建一个新密码,但不删除密码中的反斜杠字符(注意:此更改也必须在DB端进行)。
- 使用编码字符(而不是“)提供密码。
- 类似于上述问题#2的解决方法,将Go连接字符串显式提供给元数据服务,该服务位于YAML配置文件中。
- 修改您的JDBC URL如下:
url: jdbc::状态"置疑" / / <你的数据库- dns >: <口>;都= < instan-name >; sendStringParametersAsUnicode = false;数据库名= <数据库名称>
例如:url: jdbc::状态"置疑" / / vtcFxzh@myartifactorydb: 1385;都= ARTIFACTORY; sendStringParametersAsUnicode = false;数据库名= ARTIFACTORY
这是JDBC的另一个版本,它不包含反斜杠,将被元数据服务接受。
- 另一种选择是为Metadata服务单独提供MSSQL Go连接字符串(在这里的示例中指定)。
如果您遇到任何没有在这里讨论的问题,请向Jfrog支持开放门票,我们将进一步调查。
发布日期:2020年12月28日
最后更新:2020年5月31日
关键词:元数据,数据库
