当前位置: 首页 > 知识库问答 >
问题:

Google cloud trace+Gcloud日志查看器

酆浩邈
2023-03-14

我遇到了google cloud logging和google cloud trace使用google cloud kubernetes的问题

我有一个使用gcloud pubsub主题的应用程序,我想在每个pubsub消息处理函数调用的跟踪中统一日志

我的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)
        ) 

我将opensensus集成到gcloud跟踪和日志中,因此我可以获取traceId和spanId,并将其传递到gcloud日志传输中,它工作良好,日志查看器中的LogEntry包含适当的traceId和spanId

我的使用gcloud跟踪的代码看起来像

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跟踪查看器并按traceId搜索,我将找到这个带有连接日志的跟踪。问:有什么方法可以在日志查看器中显示跟踪,就像它在任何appengine服务中显示的一样,如appengine.googleapis.com/frequest_log吗?

共有1个答案

史烈
2023-03-14

正如@Nikita Davydov在评论部分所证实的那样,有一个解决方法:您可以创建一个假的http_request负载来分组日志。

如果它对你不起作用,你可以在Google Public Issue Tracker上提交一个功能请求,以便改变当前的行为。

 类似资料:
  • 本文档介绍如何查看 TiDB 集群各组件日志,以及 TiDB 慢查询日志。 TiDB 集群各组件日志 通过 TiDB Operator 部署的 TiDB 各组件默认将日志输出在容器的 stdout 和 stderr 中。可以通过下面的方法查看单个 Pod 的日志: kubectl logs -n ${namespace} ${pod_name} 如果这个 Pod 由多个 Container 组成,

  • 本文向大家介绍svn 查看日志,包括了svn 查看日志的使用技巧和注意事项,需要的朋友参考一下 示例 运行svn log将向您显示所有提交消息,您可能只想查看某些修订。 查看n最新修订: svn log -n 查看特定修订版: svn log -c rXXX 查看受影响的路径: svn log -v -c rXXX

  • git log命令可以显示所有的提交(commit)。 ...... $ git log v2.5.. # commits since (not reachable from) v2.5 $ git log test..master # commits reachable from master but not test $ git log master..test # comm

  • 点击“日志”标签,通过“查看日志”,或者在测试页面底部的“查看日志”,跳转到splunk日志服务页面,您可以自行过滤,对日志进行查看,具体使用规则请参考日志服务。 点击“监控”标签,通过“查看监控”,跳转到grafana服务页面,监控界面如下图所示,可查看函数的调用次数,运行时间及出错次数。

  • 问题内容: 有什么办法可以查看已退出的容器的日志? 我可以使用来获取已退出容器的容器ID,但是我想知道它在运行时发生了什么。 问题答案: 使用。它也适用于停止的容器,并捕获容器主过程的整个STDOUT和STDERR流:

  • 我在windows上安装了ELK stack,并将Logstash配置为读取Apache日志文件。我似乎看不到Elasticsearch的输出。我对麋鹿很陌生。 环境设置 Elasticsearch:http://localhost:9200/ Logstash: Kibana:http://localhost:5601/ 以上三个应用程序都是作为服务运行的。 我创建了一个名为“logstash.