我想知道是否存在一种将跨度从Google Stackdriver导出到BigQuery的好方法,以便对痕迹进行更好的分析?
我目前看到的唯一可能的解决方案是单独或临时querying the trace API单独编写跟踪和BigQuery API。
第一个并不是很好,因为这需要对应用程序代码进行相当大的更改(我目前仅将OpenCensus与Stackdriver exporter一起使用,以透明方式将跟踪信息写入Stackdriver)。第二个方法不是很好,因为查询该API的跨度并将它们写入BigQuery非常繁琐,而且必须临时完成。
类似于log exporting的水槽会很好。
答案 0 :(得分:1)
不幸的是,目前无法将Stackdriver跟踪信息导出到BigQuery。
我注意到已经要求在GCP端实现完全相同的功能。 GCP产品团队已经意识到此功能要求,并考虑实施此功能。
请注意,功能请求通常不会立即得到解决,因为它取决于有多少用户需要相同的功能。与该功能请求有关的所有通信都将在公共问题跟踪器1内完成,您也可以对其加注星标以确认您对此感兴趣,但是请记住,没有确切的预计到达时间。
答案 1 :(得分:0)
是的。推荐您的最佳做法。
我有3条建议:
奖金:如果您必须遵守RGPD,并且日志中有个人数据,请确保在RGPD日志中列出该过程。
答案 2 :(得分:0)
您将日志导出到 big-query ,您必须在 big-query 中创建表并在 bigquery 中添加数据。
默认情况下,在 GCP 中,所有日志都通过堆栈驱动程序。
要从 stackdriver 导出大查询中的日志,您必须使用代码或 GCP 日志记录 UI 创建 Logger 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();