python - 谷歌云跟踪 + Gcloud 登录日志查看器
问题描述
我一直在使用谷歌云 kubernetes 遇到谷歌云日志记录和谷歌云跟踪问题
我有使用 gcloud pubsub 主题的应用程序,我想统一日志以跟踪每个 pubsub 消息句柄 func 调用
我的 Gcloud 日志记录处理程序代码
class GCLHandler(CloudLoggingHandler):
def emit(self, record):
message = super(GCLHandler, self).format(record)
resource = Resource(
type='k8s_container',
labels={
'cluster_name': os.environ['CLUSTER_NAME'],
'container_name': os.environ['POD_APP_NAME'],
'location': os.environ['CLUSTER_LOCATION'],
'namespace_name': os.environ['POD_NAMESPACE'],
'pod_name': os.environ['POD_NAME'],
'project_id': _settings.PROJECT_NAME
}
)
labels: Dict[str, Any] = {
'k8s-pod/app': os.environ['POD_APP_NAME'],
'k8s-pod/app_kubernetes_io/managed-by': os.environ['POD_MANAGED_BY'],
'k8s-pod/pod-template-hash': os.environ['POD_TEMPLATE_HASH']
}
trace = getattr(record, 'traceId', None)
if trace is not None:
trace = f'projects/{_settings.PROJECT_NAME}/traces/{trace}'
self.transport.send(
record,
message,
resource=resource,
labels=labels,
trace=trace,
span_id=getattr(record, 'spanId', None)
)
我使用与 gcloud 跟踪和日志记录的 opensensus 集成,因此我可以获取 traceId 和 spanId 并将其传递到 gcloud 日志传输,它工作正常,并且日志查看器中的 LogEntry 包含正确的 traceId 和 spanId
我使用 gcloud trace 的代码看起来像
config_integration.trace_integrations(['logging'])
logger = logging.getLogger(__name__)
exporter = stackdriver_exporter.StackdriverExporter(
project_id=settings.PROJECT_NAME
)
async def handle_message(message: Message) -> None:
tracer = Tracer(exporter=exporter, sampler=AlwaysOnSampler())
with tracer.span(name=f'Message#{message.message_id}'):
logger.debug(f'debug')
logger.info(f'info')
logger.warning(f'warning')
所以,我可以在 Logs Viewer 中查看这些日志,但它们不会在一个跟踪中找到,但是如果我使用 gcloud trace viewer 并通过 traceId 搜索,我会找到这个带有连接日志的跟踪。问:有什么方法可以在日志查看器中显示跟踪,因为它在任何 appengine 服务中显示为 appengine.googleapis.com/Frequest_log?
解决方案
正如@Nikita Davydov在评论部分证实的那样,有一个解决方法:您可以创建一个虚假的http_request
有效负载来分组日志。
如果它不适合您,您可以在Google Public Issue Tracker提交功能请求以更改当前行为。
推荐阅读
- java - /usr/bin/jsvc: No such file or directory 尝试运行 jsvc 时出错
- angular - 如何绑定复选框以使用类型脚本在 Angular 6 中重新计算动态数据
- python - 如何创建线程并在脚本之间传递变量?
- python - Django:使用反向外键按最新()过滤
- c# - SqlDataAdapter 影响了 1 条预期记录中的 0 条,即使数据集已更改
- php - 如何使用网站本身更新网站的内容?
- python - For 循环中的 Python/Selenium 陈旧元素参考
- qt - 如何在 Qt qtreeview 中的树列之前添加列
- python - ValueError logits 和标签必须具有相同的形状 (?, 10) vs (2,2,?,10)
- html - 移动平台网站有水平滚动条,如何去掉?