原始网页:https://www.cockroachlabs.com/docs/stable/diagnostics-reporting.html


默认情况下,Admin界面和CockroachDB集群的每个节点会匿名向Cockroach Labs分享CockroachDB集群的使用细节。这些完全抹去个人信息的运行报告能够极大地帮助我们理解和改进系统在实际场景中的行为。

本小节将介绍了用于分享的诊断报告的内容,以及如何取消分享诊断报告。

TIPS: 为深入了解集群的性能和运行状况,请使用内置的Admin界面或第三方监控工具(如Prometheus

报告内容

启用分享诊断报告时,CockroachDB集群的每个节点以1小时为单位定期向Cockroach Labs分享匿名的存储信息、SQL表结构信息、SQL查询统计信息,也包括崩溃报告。如果用户访问Admin UI,会上传匿名的用户信息和页面视图。报告内容可能会随版本变更发生变化。一旦发生变化,我们将在此页面和发布日志上及时地告知用户。

存储信息

CockroachDB集群的每个节点以1小时为单位定期地分享存储相关的信息,包括:

内容项 简介
Node ID 节点的ID
Store ID 节点上存储设备的ID
Bytes 节点和每个存储设备上应用程序数据和系统数据的活跃数据量,不包含历史数据和已删除的数据。
Range Count 节点和每个存储设备上Range的数量
Key Count 节点和每个存储设备上KEYS的数量

示例

报告内容为以JSON格式发送给Cockroach Labs,以下为一个包含2个存储的节点的报告示例:

{
   "node":{
      "node_id":1,
      "bytes":64828,
      "key_count":138,
      "range_count":12
   },
   "stores":[
      {
         "node_id":1,
         "store_id":1,
         "bytes":64828,
         "key_count":138,
         "range_count":12
      },
      {
         "node_id":1,
         "store_id":2,
         "bytes":0,
         "key_count":0,
         "range_count":0
      }
   ]
} 

SQL表结构信息

CockroachDB集群的每个节点以1小时为单位定期地分享每张表的表结构信息给Cockroch Labs,内容包括:

NOTE: 不共享实际的表数据或表/列名称,只分享关于表结构的元数据,同时所有名称和其他的字符串将替换为下划线。

内容项 简介
Table 每个数据表的元数据,例如其内部ID、最近更新时间、表名变更次数。所有表具体的名称将替换为下划线。
Column 数据表的每个列的元数据,例如其内部ID、类型。所有列的具体名称将替换为下划线。
Column Families 数据表上列簇的元数据,例如其内部ID、包含的属性列。所有列簇和属性列的具体名称将替换为下划线。
Indexes 数据表主索引和其所有二级索引的元数据,例如它们的内部ID、索引覆盖的属性列列的内部ID。所有索引和属性列的名称将替换为下划线。
Privileges 数据表关联的用户权限的元数据,例如授予用户的权限的数量。所有的用户名将替换为下划线。
Checks 数据表上检查约束的元数据。所有检查约束的名称和表达式将替换为下划线。

示例

以下JSON的示例是一个含有一张数据表的节点发送给Cockroach Labs的表详细内容的摘录。可以看到所有的名称和其他字符串都被抹去并替换为下划线:

{
   "schema":[
      {
         "name":"_",
         "id":51,
         "parent_id":50,
         "version":1,
         "up_version":false,
         "modification_time":{
            "wall_time":0,
            "logical":0
         },
         "columns":[
            {
               "name":"_",
               "id":1,
               "type":{
                  "kind":1,
                  "width":0,
                  "precision":0
               },
               "nullable":true,
               "default_expr":"_",
               "hidden":false
            },
            ...
         ],
         ...
      }
   ]
}

SQL查询统计信息

CockroachDB集群的每个节点以1小时为单位定期地分享SQL查询的统计信息,内容包括:

NOTE: 仅发送SQL查询本身及统计信息,不包含查询结果。信息里涉及到的名称和其他字符串将替换为下划线。

内容项 简介
Query 执行的查询,当中名字和其他字符串将替换为下划线。
Counts 查询执行的次数、首次提交成功的查询(不包括重试)的次数、查询当中自动重试的最多次数。
Last Error 最近一次查询遇到的错误
Rows 查询返回的行数
Latencies 查询涉及的各个阶段的执行时间。例如解析查询的时间、生成查询计划的时间、执行查询和获取/计算结果的时间等。

示例

以下JSON的示例是发送给CockroachDB Labs的查询统计的摘录样例。可以看到的是当中所有的名称和其他字符串都将替换为下划线:

{
   "sqlstats": {
      "-3750763034362895579": {
         "CREATE DATABASE _": {
            "count": 1,
            "first_attempt_count": 1,
            "max_retries": 0,
            "last_err": "",
            "num_rows": {
               "mean": 0,
               "squared_diffs": 0
            },
            "parse_lat": {
               "mean": 0.00010897,
               "squared_diffs": 0
            },
            "plan_lat": {
               "mean": 0.000011004,
               "squared_diffs": 0
            },
            "run_lat": {
               "mean": 0.002049073,
               "squared_diffs": 0
            },
            "service_lat": {
               "mean": 0.00220478,
               "squared_diffs": 0
            },
            "overhead_lat": {
               "mean": 0.0000357329999999996,
               "squared_diffs": 0
            }
         },
         "INSERT INTO _ VALUES (_)": {
            "count": 10,
            "first_attempt_count": 10,
            "max_retries": 0,
            "last_err": "",
            "num_rows": {
               "mean": 2,
               "squared_diffs": 0
            },
            "parse_lat": {
               "mean": 0.000021831200000000002,
               "squared_diffs": 5.024879776000002e-10
            },
            "plan_lat": {
               "mean": 0.00007221249999999999,
               "squared_diffs": 7.744142312499998e-9
            },
            "run_lat": {
               "mean": 0.0003641647,
               "squared_diffs": 1.0141981141410002e-7
            },
            "service_lat": {
               "mean": 0.00048527110000000004,
               "squared_diffs": 2.195025173849e-7
            },
            "overhead_lat": {
               "mean": 0.00002706270000000002,
               "squared_diffs": 2.347266118100001e-9
            }
         },
         ...
      }
   }
}

Admin界面信息

CockroachDB使用Segment的analytics.js库的Identity和Page方法收集有关Admin界面使用情况的匿名信息。

Identity事件

每个Admin界面session都将分享以下匿名信息:

内容项 简介
User ID 集群的GUID
Enterprise 用户是否使用企业版
User Agent 访问Admin界面时使用的浏览器
Version 运行的CockroachDB的版本

Page事件

以20个页面视图为单位,Admin界面发送出以下有关页面视图的匿名信息:

内容项 简介
User ID 集群的GUID
Name 用户在Admin界面上访问的页面或仪表盘的匿名名字
Path 用户在Admin界面上访问的页面或仪表盘的匿名地址

示例

以下JSON样例展示了发送从Admin页面收集并发送给Segment的匿名信息:

Identity信息

{
  "_metadata": {},
  "context": {
      "library": {
         "name": "analytics-node",
         "version": "3.0.0"
      }
   },
  "messageId": "node-jFua5Hxj5peINPk0rAOGkCKgls60CiHF",
  "timestamp": "2017-09-19T15:21:16.972Z",
  "traits": {
      "enterprise": true,
      "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.101 Safari/537.36",
      "version": "v1.1-alpha.20170817-980-g3b098cd"
   },
  "type": "identify",
  "userId": "55bcbd902-f912-4a3e-91a0-56ca9de17ab7",
  "writeKey": "5Vbp8WMYDmZTfCwE0uiUqEdAcTiZWFDb",
  "sentAt": "2017-09-19T15:21:27.095Z",
  "integrations": {},
  "receivedAt": "2017-09-19T15:21:27.169Z",
  "originalTimestamp": "2017-09-19T15:21:16.898Z"
},

页面视图

{
  "_metadata": {},
  "context": {
      "library": {
         "name": "analytics-node",
         "version": "3.0.0"
      }
  },
  "messageId": "node-xuStnk7A2i30FDPdC51rpqxEU9gmym84",
  "name": "/cluster",
  "properties": {
      "path": "/cluster"
   },
  "timestamp": "2017-09-19T11:23:16.391Z",
  "type": "page",
  "userId": "c98564c4-5b95-40d3-82cc-bb18937930e1",
  "writeKey": "5Vbp8WMYDmZTfCwE0uiUqEdAcTiZWFDb",
  "sentAt": "2017-09-16T11:23:17.390Z",
  "integrations": {},
  "receivedAt": "2017-09-16T11:23:26.412Z",
  "originalTimestamp": "2017-09-16T11:23:07.369Z"
}

关闭诊断报告服务

集群初始化时

为了确保不分享任何诊断报告,用户可在启动集群第一个节点之前,配置环境变量COCKROACH_SKIP_ENABLING_DIAGNOSTIC_REPORTING=true。值得注意的是,需要在第一个节点启动之前设置环境变量,否则该方法不生效。若集群已经启动,用户需要使用下文描述的SET CLUSTER SETTING语句。

集群初始化后

当集群运行以后,为了停止该集群向Cockroach Labs分享诊断报告,用户需要通过内置的SQL客户端,执行SET CLUSTER SETTING语句,将集群配置diagnostics.reporting.enabled改为false

SET CLUSTER SETTING diagnostics.reporting.enabled = false;

修改操作不会立即生效,因为它必须传播到集群的其他节点方可奏效。

检查诊断报告服务的状态

用户可以通过内置的SQL客户端执行SET CLUSTER SETTING语句查看诊断报告服务的状态。

SHOW CLUSTER SETTING diagnostics.reporting.enabled;

+-------------------------------+
| diagnostics.reporting.enabled |
+-------------------------------+
| false                         |
+-------------------------------+
(1 row)

若上述配置为true,则诊断报告服务处于开启状态;若为false,则诊断报告服务处于关闭状态。