将 Stackdriver 跟踪导出到 BigQuery
Exporting Stackdriver traces to BigQuery
我想知道是否有一种好的方法可以将跨度从 Google Stackdriver 导出到 BigQuery 以便更好地分析跟踪?
我目前看到的唯一可能的解决方案是单独写入跟踪和 BigQuery API 或临时 querying the trace API。
第一个不是很好,因为它需要对应用程序代码进行相当大的更改(我目前只是将 OpenCensus 与 Stackdriver 导出器一起使用,以透明地将跟踪写入 Stackdriver)。第二个不是很好,因为查询 API 的跨度并将它们写入 BigQuery 有很大的提升,而且必须临时完成。
一个类似于 log exporting 的水槽就好了。
是的。这是推荐你的最佳实践。
- 分析更好,您的日志已分区且查询高效。
- 日志格式不变。您记录的值可以,但不是您的查询结构
- 日志在 stackdriver 中有一个 limited retention 周期。使用 bigquery,您可以随心所欲
- 免费!至少,接收器过程。您必须支付存储和大查询处理费用
我有3条建议:
- 考虑清除您的日志以降低存储成本。但是,超过 90 天的数据更便宜。
- 在设置接收器之前,select只有您想要保存到 bigquery 的相关日志条目。
- 不要忘记分区时间,日志会迅速变大,不受控制的查询代价高昂。
奖励:如果您必须遵守 RGPD 并且您在日志中有个人数据,请务必在您的 RGPD 日志簿中列出该过程。
很遗憾,目前无法将 Stackdriver 跟踪导出到 BigQuery。
我注意到已经要求在 GCP 端实现完全相同的功能。 GCP 产品团队已经了解此功能请求并正在考虑实施此功能。
请注意,功能请求通常不会立即得到解决,因为这取决于有多少用户要求相同的功能。关于此功能请求的所有通信都将在 public 问题跟踪器 1 中完成,您也可以 'star' 它以确认您对此感兴趣,但请记住,没有确切的预计到达时间
您将日志导出到 big-query,您必须在 big-query 中创建 table 并在 bigquery 中添加数据。
默认情况下,在 GCP 中,所有日志都通过堆栈驱动程序。
要从 stackdriver 导出大查询中的日志,您必须使用代码或 GCP 日志记录创建 Logger Sink UI
然后创建一个Sink,添加一个过滤器。 https://cloud.google.com/logging/docs/export/configure_export_v2
然后使用代码将日志添加到堆栈驱动程序
public static void writeLog(Severity severity, String logName, Map<String,
String> jsonMap) {
List<Map<String, String>> maps = limitMap(jsonMap);
for (Map<String, String> map : maps) {
LogEntry logEntry = LogEntry.newBuilder(Payload.JsonPayload.of(map))
.setSeverity(severity)
.setLogName(logName)
.setResource(monitoredResource)
.build();
logging.write(Collections.singleton(logEntry));
}
}
private static MonitoredResource monitoredResource =
MonitoredResource.newBuilder("global")
.addLabel("project_id", logging.getOptions().getProjectId())
.build();
我想知道是否有一种好的方法可以将跨度从 Google Stackdriver 导出到 BigQuery 以便更好地分析跟踪?
我目前看到的唯一可能的解决方案是单独写入跟踪和 BigQuery API 或临时 querying the trace API。
第一个不是很好,因为它需要对应用程序代码进行相当大的更改(我目前只是将 OpenCensus 与 Stackdriver 导出器一起使用,以透明地将跟踪写入 Stackdriver)。第二个不是很好,因为查询 API 的跨度并将它们写入 BigQuery 有很大的提升,而且必须临时完成。
一个类似于 log exporting 的水槽就好了。
是的。这是推荐你的最佳实践。
- 分析更好,您的日志已分区且查询高效。
- 日志格式不变。您记录的值可以,但不是您的查询结构
- 日志在 stackdriver 中有一个 limited retention 周期。使用 bigquery,您可以随心所欲
- 免费!至少,接收器过程。您必须支付存储和大查询处理费用
我有3条建议:
- 考虑清除您的日志以降低存储成本。但是,超过 90 天的数据更便宜。
- 在设置接收器之前,select只有您想要保存到 bigquery 的相关日志条目。
- 不要忘记分区时间,日志会迅速变大,不受控制的查询代价高昂。
奖励:如果您必须遵守 RGPD 并且您在日志中有个人数据,请务必在您的 RGPD 日志簿中列出该过程。
很遗憾,目前无法将 Stackdriver 跟踪导出到 BigQuery。
我注意到已经要求在 GCP 端实现完全相同的功能。 GCP 产品团队已经了解此功能请求并正在考虑实施此功能。
请注意,功能请求通常不会立即得到解决,因为这取决于有多少用户要求相同的功能。关于此功能请求的所有通信都将在 public 问题跟踪器 1 中完成,您也可以 'star' 它以确认您对此感兴趣,但请记住,没有确切的预计到达时间
您将日志导出到 big-query,您必须在 big-query 中创建 table 并在 bigquery 中添加数据。
默认情况下,在 GCP 中,所有日志都通过堆栈驱动程序。
要从 stackdriver 导出大查询中的日志,您必须使用代码或 GCP 日志记录创建 Logger Sink UI
然后创建一个Sink,添加一个过滤器。 https://cloud.google.com/logging/docs/export/configure_export_v2
然后使用代码将日志添加到堆栈驱动程序
public static void writeLog(Severity severity, String logName, Map<String,
String> jsonMap) {
List<Map<String, String>> maps = limitMap(jsonMap);
for (Map<String, String> map : maps) {
LogEntry logEntry = LogEntry.newBuilder(Payload.JsonPayload.of(map))
.setSeverity(severity)
.setLogName(logName)
.setResource(monitoredResource)
.build();
logging.write(Collections.singleton(logEntry));
}
}
private static MonitoredResource monitoredResource =
MonitoredResource.newBuilder("global")
.addLabel("project_id", logging.getOptions().getProjectId())
.build();