数据库客户端指标的语义约定

状态: 混合

警告

使用 此文档 v1.24.0(或更早版本)的现有数据库仪器化

  • SHOULD NOT 在其现有的主版本中更改其默认发出的数据库约定版本。约定包括(但不限于)属性、指标和 Span 名称,以及度量单位。
  • SHOULD 在其现有的主版本中引入一个环境变量 OTEL_SEMCONV_STABILITY_OPT_IN,该变量是一个类别特定值的逗号分隔列表(例如,http、databases、messaging)。值列表包括:
    • database - 发出稳定的数据库约定,并停止发出仪器化之前发出的实验性数据库约定。
    • database/dup - 同时发出实验性和稳定数据库约定,允许稳定语义约定分阶段推出。
    • 默认行为(如果没有这些值)是继续发出仪器化先前发出的旧实验性数据库约定的任何版本。
    • 注意:如果同时存在 database/dupdatabase 这两个值,则 database/dup 的优先级高于 database
  • SHOULD 在开始发出这两套约定后,至少维护其现有主版本(至少包括安全补丁)六个月。
  • MAY 在其下一个主版本中删除该环境变量,并只发出稳定的数据库约定。

数据库操作

指标: db.client.operation.duration

状态: 稳定

此指标是必需的。

当此指标与数据库操作跨度一起报告时,指标值应与数据库操作跨度持续时间相同。

此指标应使用 ExplicitBucketBoundaries: [ 0.001, 0.005, 0.01, 0.05, 0.1, 0.5, 1, 5, 10 ]

名称Instrument TypeUnit (UCUM)描述Stability实体关联
db.client.operation.durationHistograms数据库客户端操作的持续时间。[1]Stable

[1]: 批量操作应记录为单个操作。

Attributes

Stability需求级别Value Type描述Example Values
db.system.nameStable必需字符串客户端仪器识别的数据库管理系统 (DBMS) 产品。[1]other_sql; softwareag.adabas; actian.ingres
db.collection.nameStable有条件地必需 [2]字符串数据库中的集合(表、容器)的名称。[3]public.users; customers
db.namespaceStable有条件必需 如果可用。字符串数据库中的数据库名称,已根据服务器地址和端口进行完全限定。[4]customers; test.users
db.operation.nameStable有条件地必需 [5]字符串正在执行的操作或命令的名称。[6]findAndModify; HMSET; SELECT
db.response.status_codeStable有条件地必需 [7]字符串数据库响应状态码。[8]102; ORA-17002; 08P01; 404
error.typeStable有条件必需 仅在操作失败时。字符串描述操作结束时的一类错误。[9]timeoutjava.net.UnknownHostExceptionserver_certificate_invalid500
server.portStable有条件地必需 [10]int服务器端口号。[11]80; 8080; 443
db.query.summaryStable推荐 [12]字符串低基数性摘要的数据库查询。[13]SELECT wuser_table; INSERT shipping_details SELECT orders; get user by id
db.stored_procedure.nameStable推荐 [14]字符串数据库中的存储过程名称。[15]GetCustomer
network.peer.addressStable推荐 如果适用于此数据库系统。字符串执行操作的数据库节点对等地址。[16]10.1.2.80/tmp/my.sock
network.peer.portStable推荐 仅当设置了 network.peer.address 时。int网络连接的对等端口号。65123
server.addressStable推荐字符串数据库主机的名称。[17]example.com10.1.2.80/tmp/my.sock
db.query.textStable选择加入字符串正在执行的数据库查询。[18]SELECT * FROM wuser_table where username = ?; SET mykey ?

[1] db.system.name: 实际的 DBMS 可能与客户端识别的有所不同。例如,当使用 PostgreSQL 客户端库连接到 CockroachDB 时,db.system.name 会根据仪器仪表尽力了解设置为 postgresql

[2] db.collection.name: 如果易于获取并且数据库调用是针对单个集合执行的。

[3] db.collection.name: 建议捕获应用程序提供的值,而不尝试进行任何大小写规范化。

当数据库系统支持包含多个集合的查询文本时,不应从 db.query.text 中提取集合名称(对于非批量操作)。

对于批量操作,如果已知各个操作具有相同的集合名称,则应使用该集合名称。

[4] db.namespace: 如果数据库系统有多个命名空间组件,它们应从最通用到最具体的命名空间组件连接起来,使用 | 作为组件之间的分隔符。任何缺失的组件(及其关联的分隔符)都应被省略。特定数据库系统的语义约定应记录 db.namespace 在该系统中的含义。建议捕获应用程序提供的值,而不尝试进行任何大小写规范化。

[5] db.operation.name: 如果易于获取并且有一个单一的操作名称来描述数据库调用。

[6] db.operation.name: 建议捕获应用程序提供的值,而不尝试进行任何大小写规范化。

当数据库系统支持包含多个操作的查询文本时,不应从 db.query.text 中提取操作名称(对于非批量操作)。

如果操作名称中可能出现空格,则应将多个连续空格规范化为单个空格。

对于批量操作,如果已知各个操作具有相同的操作名称,则应在前面加上 BATCH ,否则 db.operation.name 应为 BATCH 或其他更适用的数据库系统特定术语。

[7] db.response.status_code: 如果操作失败并且状态码可用。

[8] db.response.status_code: 数据库返回的状态码。通常它代表一个错误代码,但也可以代表部分成功、警告或区分各种成功结果。特定数据库系统的语义约定应记录 db.response.status_code 在该系统中的含义。

[9] error.type: error.type 应与数据库或客户端库返回的 db.response.status_code 或发生的异常的规范名称匹配。使用规范异常类型名称时,仪器仪表应尽最大努力报告最相关的类型。例如,如果原始异常被包装到一个通用异常中,则应优先选择原始异常。仪器仪表应记录 error.type 的填充方式。

[10] server.port: 如果使用非默认端口用于此 DBMS,并且设置了 server.address

[11] server.port: 从客户端角度观察,并且当通过中介通信时,server.port 应代表任何中介(例如代理)之后的服务器端口,如果可用的话。

[12] db.query.summary: 如果可通过仪器仪表钩子获得,或者如果仪器仪表支持生成查询摘要。

[13] db.query.summary: 查询摘要描述了一类数据库查询,并可用作分组键,特别是在分析涉及复杂查询的数据库调用遥测数据时。

摘要可能通过仪器化钩子或其他方式提供给仪器化。如果不可用,支持查询解析的仪器化应遵循 生成查询摘要 部分来生成摘要。

[14] db.stored_procedure.name: 如果操作适用于特定的存储过程。

[15] db.stored_procedure.name: 建议捕获应用程序提供的值,而不尝试进行任何大小写规范化。

对于批量操作,如果已知各个操作具有相同的存储过程名称,则应使用该存储过程名称。

[16] network.peer.address: 特定数据库系统的语义约定应记录 network.peer.* 属性是否适用。当应用程序直接与单个数据库节点交互时,网络对等地址和端口很有用。如果数据库操作涉及多个网络调用(例如重试),则应使用最后联系的节点的地址。

[17] server.address: 当从客户端观察时,并且通过中间人进行通信时,server.address 应表示任何中间人(例如代理)之后的服务器地址,如果可用。

[18] db.query.text: 有关清理,请参阅 db.query.text 的清理。对于批量操作,如果已知单个操作具有相同的查询文本,则应使用该查询文本;否则,所有单个查询文本都应使用 ; 作为分隔符连接,或者如果更适用,则使用其他数据库系统特定的分隔符。参数化查询文本不应被清理。即使参数化查询文本可能包含敏感数据,通过使用参数化查询,用户就发出了一个强烈信号,表明任何敏感数据都将作为参数值传递,并且默认捕获查询文本静态部分的可观察性收益超过了风险。


db.system.name 具有以下常用值列表。如果其中一个适用,则必须使用相应的值;否则,可以根据需要使用自定义值。

描述Stability
actian.ingresActian IngresDevelopment
aws.dynamodbAmazon DynamoDBDevelopment
aws.redshiftAmazon RedshiftDevelopment
azure.cosmosdbAzure Cosmos DBDevelopment
cassandraApache CassandraDevelopment
clickhouseClickHouseDevelopment
cockroachdbCockroachDBDevelopment
couchbaseCouchbaseDevelopment
couchdbApache CouchDBDevelopment
derbyApache DerbyDevelopment
elasticsearchElasticsearchDevelopment
firebirdsqlFirebirdDevelopment
gcp.spannerGoogle Cloud SpannerDevelopment
geodeApache GeodeDevelopment
h2databaseH2 DatabaseDevelopment
hbaseApache HBaseDevelopment
hiveApache HiveDevelopment
hsqldbHyperSQL DatabaseDevelopment
ibm.db2IBM Db2Development
ibm.informixIBM InformixDevelopment
ibm.netezzaIBM NetezzaDevelopment
influxdbInfluxDBDevelopment
instantdbInstantDevelopment
intersystems.cacheInterSystems CachéDevelopment
mariadbMariaDBStable
memcachedMemcachedDevelopment
microsoft.sql_serverMicrosoft SQL ServerStable
mongodbMongoDBDevelopment
mysqlMySQLStable
neo4jNeo4jDevelopment
opensearchOpenSearchDevelopment
oracle.dbOracle DatabaseDevelopment
other_sql其他 SQL 数据库。仅用作回退。Development
postgresqlPostgreSQLStable
redisRedisDevelopment
sap.hanaSAP HANADevelopment
sap.maxdbSAP MaxDBDevelopment
softwareag.adabasAdabas (Adaptable Database System)Development
sqliteSQLiteDevelopment
teradataTeradataDevelopment
trinoTrinoDevelopment

error.type 具有以下已知值列表。如果其中一个适用,则必须使用相应的值;否则,可以使用自定义值。

描述Stability
_OTHER当检测不到自定义值时使用的回退错误值。Stable

开发中

状态: 开发中

数据库响应

以下指标仪器描述了数据库查询响应。

指标: db.client.response.returned_rows

此指标是推荐的。

此指标应使用 ExplicitBucketBoundaries: [1, 2, 5, 10, 20, 50, 100, 200, 500, 1000, 2000, 5000, 10000]

解释分桶配置

  1. 1, 2, 5, 10, 50, 100:这些分桶对于捕获仅返回少量项的场景很有用。这种小型查询在性能和快速响应至关重要的实时或交互式应用程序中很常见。
  2. 200, 500, 1000:这些值代表中等数量数据在每次查询中返回的典型工作负载。
  3. 2000, 5000:这些边界捕获查询返回大型数据集的场景。这些较大的页面大小可能增加内存或 CPU 使用率,并可能导致更长的查询执行时间,因此跟踪这些范围内的性能很重要。
  4. 10000:包含此边界是为了捕获罕见的、非常大的响应大小。此类查询可能对系统资源(包括内存、CPU 和网络带宽)造成巨大压力,并且通常会导致性能问题,例如高延迟甚至网络中断。
名称Instrument TypeUnit (UCUM)描述Stability实体关联
db.client.response.returned_rowsHistogram{row}数据库操作返回的实际记录数。Development

Attributes

Stability需求级别Value Type描述Example Values
db.system.nameStable必需字符串客户端仪器识别的数据库管理系统 (DBMS) 产品。[1]other_sql; softwareag.adabas; actian.ingres
db.collection.nameStable有条件地必需 [2]字符串数据库中的集合(表、容器)的名称。[3]public.users; customers
db.namespaceStable有条件必需 如果可用。字符串数据库中的数据库名称,已根据服务器地址和端口进行完全限定。[4]customers; test.users
db.operation.nameStable有条件地必需 [5]字符串正在执行的操作或命令的名称。[6]findAndModify; HMSET; SELECT
db.response.status_codeStable有条件地必需 [7]字符串数据库响应状态码。[8]102; ORA-17002; 08P01; 404
error.typeStable有条件必需 仅在操作失败时。字符串描述操作结束时的一类错误。[9]timeoutjava.net.UnknownHostExceptionserver_certificate_invalid500
server.portStable有条件地必需 [10]int服务器端口号。[11]80; 8080; 443
db.query.summaryStable推荐 [12]字符串低基数性摘要的数据库查询。[13]SELECT wuser_table; INSERT shipping_details SELECT orders; get user by id
network.peer.addressStable推荐 如果适用于此数据库系统。字符串执行操作的数据库节点对等地址。[14]10.1.2.80/tmp/my.sock
network.peer.portStable推荐 仅当设置了 network.peer.address 时。int网络连接的对等端口号。65123
server.addressStable推荐字符串数据库主机名。[15]example.com10.1.2.80/tmp/my.sock
db.query.textStable选择加入字符串正在执行的数据库查询。[16]SELECT * FROM wuser_table where username = ?; SET mykey ?

[1] db.system.name: 实际的 DBMS 可能与客户端识别的有所不同。例如,当使用 PostgreSQL 客户端库连接到 CockroachDB 时,db.system.name 会根据仪器仪表尽力了解设置为 postgresql

[2] db.collection.name: 如果易于获取并且数据库调用是针对单个集合执行的。

[3] db.collection.name: 建议捕获应用程序提供的值,而不尝试进行任何大小写规范化。

当数据库系统支持包含多个集合的查询文本时,不应从 db.query.text 中提取集合名称(对于非批量操作)。

对于批量操作,如果已知各个操作具有相同的集合名称,则应使用该集合名称。

[4] db.namespace: 如果数据库系统有多个命名空间组件,它们应从最通用到最具体的命名空间组件连接起来,使用 | 作为组件之间的分隔符。任何缺失的组件(及其关联的分隔符)都应被省略。特定数据库系统的语义约定应记录 db.namespace 在该系统中的含义。建议捕获应用程序提供的值,而不尝试进行任何大小写规范化。

[5] db.operation.name: 如果易于获取并且有一个单一的操作名称来描述数据库调用。

[6] db.operation.name: 建议捕获应用程序提供的值,而不尝试进行任何大小写规范化。

当数据库系统支持包含多个操作的查询文本时,不应从 db.query.text 中提取操作名称(对于非批量操作)。

如果操作名称中可能出现空格,则应将多个连续空格规范化为单个空格。

对于批量操作,如果已知各个操作具有相同的操作名称,则应在前面加上 BATCH ,否则 db.operation.name 应为 BATCH 或其他更适用的数据库系统特定术语。

[7] db.response.status_code: 如果操作失败并且状态码可用。

[8] db.response.status_code: 数据库返回的状态码。通常它代表一个错误代码,但也可以代表部分成功、警告或区分各种成功结果。特定数据库系统的语义约定应记录 db.response.status_code 在该系统中的含义。

[9] error.type: error.type 应与数据库或客户端库返回的 db.response.status_code 或发生的异常的规范名称匹配。使用规范异常类型名称时,仪器仪表应尽最大努力报告最相关的类型。例如,如果原始异常被包装到一个通用异常中,则应优先选择原始异常。仪器仪表应记录 error.type 的填充方式。

[10] server.port: 如果使用非默认端口用于此 DBMS,并且设置了 server.address

[11] server.port: 从客户端角度观察,并且当通过中介通信时,server.port 应代表任何中介(例如代理)之后的服务器端口,如果可用的话。

[12] db.query.summary: 如果可通过仪器仪表钩子获得,或者如果仪器仪表支持生成查询摘要。

[13] db.query.summary: 查询摘要描述了一类数据库查询,并可用作分组键,特别是在分析涉及复杂查询的数据库调用遥测数据时。

摘要可能通过仪器化钩子或其他方式提供给仪器化。如果不可用,支持查询解析的仪器化应遵循 生成查询摘要 部分来生成摘要。

[14] network.peer.address: 特定数据库系统的语义约定应记录 network.peer.* 属性是否适用。当应用程序直接与单个数据库节点交互时,网络对等地址和端口很有用。如果数据库操作涉及多个网络调用(例如重试),则应使用最后联系的节点的地址。

[15] server.address: 从客户端角度观察,并且当通过中介通信时,server.address 应代表任何中介(例如代理)之后的服务器地址,如果可用的话。

[16] db.query.text: 有关清理,请参阅 db.query.text 的清理。对于批量操作,如果已知单个操作具有相同的查询文本,则应使用该查询文本;否则,所有单个查询文本都应使用 ; 作为分隔符连接,或者如果更适用,则使用其他数据库系统特定的分隔符。参数化查询文本不应被清理。即使参数化查询文本可能包含敏感数据,通过使用参数化查询,用户就发出了一个强烈信号,表明任何敏感数据都将作为参数值传递,并且默认捕获查询文本静态部分的可观察性收益超过了风险。


db.system.name 具有以下常用值列表。如果其中一个适用,则必须使用相应的值;否则,可以根据需要使用自定义值。

描述Stability
actian.ingresActian IngresDevelopment
aws.dynamodbAmazon DynamoDBDevelopment
aws.redshiftAmazon RedshiftDevelopment
azure.cosmosdbAzure Cosmos DBDevelopment
cassandraApache CassandraDevelopment
clickhouseClickHouseDevelopment
cockroachdbCockroachDBDevelopment
couchbaseCouchbaseDevelopment
couchdbApache CouchDBDevelopment
derbyApache DerbyDevelopment
elasticsearchElasticsearchDevelopment
firebirdsqlFirebirdDevelopment
gcp.spannerGoogle Cloud SpannerDevelopment
geodeApache GeodeDevelopment
h2databaseH2 DatabaseDevelopment
hbaseApache HBaseDevelopment
hiveApache HiveDevelopment
hsqldbHyperSQL DatabaseDevelopment
ibm.db2IBM Db2Development
ibm.informixIBM InformixDevelopment
ibm.netezzaIBM NetezzaDevelopment
influxdbInfluxDBDevelopment
instantdbInstantDevelopment
intersystems.cacheInterSystems CachéDevelopment
mariadbMariaDBStable
memcachedMemcachedDevelopment
microsoft.sql_serverMicrosoft SQL ServerStable
mongodbMongoDBDevelopment
mysqlMySQLStable
neo4jNeo4jDevelopment
opensearchOpenSearchDevelopment
oracle.dbOracle DatabaseDevelopment
other_sql其他 SQL 数据库。仅用作回退。Development
postgresqlPostgreSQLStable
redisRedisDevelopment
sap.hanaSAP HANADevelopment
sap.maxdbSAP MaxDBDevelopment
softwareag.adabasAdabas (Adaptable Database System)Development
sqliteSQLiteDevelopment
teradataTeradataDevelopment
trinoTrinoDevelopment

error.type 具有以下已知值列表。如果其中一个适用,则必须使用相应的值;否则,可以使用自定义值。

描述Stability
_OTHER当检测不到自定义值时使用的回退错误值。Stable

连接池

以下指标仪器描述了数据库客户端连接池操作。

指标: db.client.connection.count

此指标是必需的。

名称Instrument TypeUnit (UCUM)描述Stability实体关联
db.client.connection.countUpDownCounter{connection}当前处于 state 属性描述状态的连接数。Development

Attributes

Stability需求级别Value Type描述Example Values
db.client.connection.pool.nameDevelopment必需字符串连接池的名称;在仪器仪表化的应用程序中是唯一的。如果连接池实现不提供名称,仪器仪表应使用一组参数的组合来使名称唯一,例如,组合属性 server.addressserver.portdb.namespace,格式为 server.address:server.port/db.namespace。遵循不同模式生成连接池名称的仪器仪表应记录其格式。myDataSource
db.client.connection.stateDevelopment必需字符串池中连接的状态idle

db.client.connection.state 具有以下已知值列表。如果其中一个适用,则必须使用相应的值;否则,可以不使用自定义值。

描述Stability
idleidleDevelopment
usedusedDevelopment

指标: db.client.connection.idle.max

此指标是推荐的。

名称Instrument TypeUnit (UCUM)描述Stability实体关联
db.client.connection.idle.maxUpDownCounter{connection}允许的空闲连接的最大数量。Development

Attributes

Stability需求级别Value Type描述Example Values
db.client.connection.pool.nameDevelopment必需字符串连接池的名称;在仪器仪表化的应用程序中是唯一的。如果连接池实现不提供名称,仪器仪表应使用一组参数的组合来使名称唯一,例如,组合属性 server.addressserver.portdb.namespace,格式为 server.address:server.port/db.namespace。遵循不同模式生成连接池名称的仪器仪表应记录其格式。myDataSource

指标: db.client.connection.idle.min

此指标是推荐的。

名称Instrument TypeUnit (UCUM)描述Stability实体关联
db.client.connection.idle.minUpDownCounter{connection}允许的空闲连接的最小数量。Development

Attributes

Stability需求级别Value Type描述Example Values
db.client.connection.pool.nameDevelopment必需字符串连接池的名称;在仪器仪表化的应用程序中是唯一的。如果连接池实现不提供名称,仪器仪表应使用一组参数的组合来使名称唯一,例如,组合属性 server.addressserver.portdb.namespace,格式为 server.address:server.port/db.namespace。遵循不同模式生成连接池名称的仪器仪表应记录其格式。myDataSource

指标: db.client.connection.max

此指标是推荐的。

名称Instrument TypeUnit (UCUM)描述Stability实体关联
db.client.connection.maxUpDownCounter{connection}允许打开的最大连接数。Development

Attributes

Stability需求级别Value Type描述Example Values
db.client.connection.pool.nameDevelopment必需字符串连接池的名称;在仪器仪表化的应用程序中是唯一的。如果连接池实现不提供名称,仪器仪表应使用一组参数的组合来使名称唯一,例如,组合属性 server.addressserver.portdb.namespace,格式为 server.address:server.port/db.namespace。遵循不同模式生成连接池名称的仪器仪表应记录其格式。myDataSource

指标: db.client.connection.pending_requests

此指标是推荐的。

名称Instrument TypeUnit (UCUM)描述Stability实体关联
db.client.connection.pending_requestsUpDownCounter{request}当前正在等待打开连接的请求数量。Development

Attributes

Stability需求级别Value Type描述Example Values
db.client.connection.pool.nameDevelopment必需字符串连接池的名称;在仪器仪表化的应用程序中是唯一的。如果连接池实现不提供名称,仪器仪表应使用一组参数的组合来使名称唯一,例如,组合属性 server.addressserver.portdb.namespace,格式为 server.address:server.port/db.namespace。遵循不同模式生成连接池名称的仪器仪表应记录其格式。myDataSource

指标: db.client.connection.timeouts

此指标是推荐的。

名称Instrument TypeUnit (UCUM)描述Stability实体关联
db.client.connection.timeoutsCounter{timeout}尝试从连接池获取连接时发生的连接超时次数。Development

Attributes

Stability需求级别Value Type描述Example Values
db.client.connection.pool.nameDevelopment必需字符串连接池的名称;在仪器仪表化的应用程序中是唯一的。如果连接池实现不提供名称,仪器仪表应使用一组参数的组合来使名称唯一,例如,组合属性 server.addressserver.portdb.namespace,格式为 server.address:server.port/db.namespace。遵循不同模式生成连接池名称的仪器仪表应记录其格式。myDataSource

指标: db.client.connection.create_time

此指标是推荐的。

名称Instrument TypeUnit (UCUM)描述Stability实体关联
db.client.connection.create_timeHistograms创建新连接所花费的时间。Development

Attributes

Stability需求级别Value Type描述Example Values
db.client.connection.pool.nameDevelopment必需字符串连接池的名称;在仪器仪表化的应用程序中是唯一的。如果连接池实现不提供名称,仪器仪表应使用一组参数的组合来使名称唯一,例如,组合属性 server.addressserver.portdb.namespace,格式为 server.address:server.port/db.namespace。遵循不同模式生成连接池名称的仪器仪表应记录其格式。myDataSource

指标: db.client.connection.wait_time

此指标是推荐的。

名称Instrument TypeUnit (UCUM)描述Stability实体关联
db.client.connection.wait_timeHistograms从连接池获取打开连接所花费的时间。Development

Attributes

Stability需求级别Value Type描述Example Values
db.client.connection.pool.nameDevelopment必需字符串连接池的名称;在仪器仪表化的应用程序中是唯一的。如果连接池实现不提供名称,仪器仪表应使用一组参数的组合来使名称唯一,例如,组合属性 server.addressserver.portdb.namespace,格式为 server.address:server.port/db.namespace。遵循不同模式生成连接池名称的仪器仪表应记录其格式。myDataSource

指标: db.client.connection.use_time

此指标是推荐的。

名称Instrument TypeUnit (UCUM)描述Stability实体关联
db.client.connection.use_timeHistograms借用连接到将其返回到池之间的时间。Development

Attributes

Stability需求级别Value Type描述Example Values
db.client.connection.pool.nameDevelopment必需字符串连接池的名称;在仪器仪表化的应用程序中是唯一的。如果连接池实现不提供名称,仪器仪表应使用一组参数的组合来使名称唯一,例如,组合属性 server.addressserver.portdb.namespace,格式为 server.address:server.port/db.namespace。遵循不同模式生成连接池名称的仪器仪表应记录其格式。myDataSource