标签: google-cloud-logging

Google Cloud Logging中的Dataproc Spark作业输出

有没有办法将Dataproc Spark作业的输出发送到Google Cloud日志记录?如Dataproc文档中所述,作业驱动程序(Spark作业的主控)的输出在控制台中的Dataproc-> Jobs下可用.我希望在Cloud Logging中记录日志有两个原因:

  1. 我想看看执行者的日志.通常,主日志会在没有进一步细节的情况下说"执行器丢失",并且获得有关执行程序的更多信息将非常有用.
  2. Cloud Logging具有很好的过滤和搜索功能

目前,Cloud Logging中显示的Dataproc唯一输出是来自yarn-yarn-nodemanager-*和container _*.stderr的日志项.我的应用程序代码的输出显示在Dataproc-> Jobs中,但不显示在Cloud Logging中,它只是Spark master的输出,而不是执行程序的输出.

apache-spark google-cloud-logging google-cloud-dataproc

16
推荐指数
1
解决办法
1864
查看次数

在stackdriver日志记录webview中仅显示某个有效负载字段

我们使用Stackdriver作为我们拥有的Docker环境的日志代理.有效负载的形式如下:

 structPayload: {
  container: {…}   
  data: "[2016-11-16 08:15:49] INFO Domain xxx apiKey validation passed."    
  instance: {…}    
 }
Run Code Online (Sandbox Code Playgroud)

在查看日志时,Web视图会给我:

{ "容器":{ "ID": "XXX", "创造": "2016-11-15T05:35:05.533105502Z",...

有没有办法让网页视图给我列出的容器数据,因为点击它打开所有事件只是愚蠢和耗时..有时随机在给我只是数据,但我无法想象它出来怎么做..

google-cloud-platform google-cloud-logging

13
推荐指数
1
解决办法
507
查看次数

Google Cloud Logging:显示匹配行周围的行

有时,当通过关键字或其他条件搜索日志时,我不仅想显示与条件匹配的行,还想显示它们周围的几行,以更好地理解上下文,-C类似于grep.

这可能吗?

google-cloud-logging

13
推荐指数
2
解决办法
2251
查看次数

为什么我的 GCP 函数记录的错误应该是信息或调试?

我有一个与谷歌存储和谷歌日志记录集成的 python 3.7 谷歌云函数,因此我使用该函数部署了一个密钥文件,并使用 GOOGLE_APPLICATION_CREDENTIALS 环境变量引用它。一切都工作正常,因为我的函数执行了它应该做的事情并返回正确的输出等,唯一需要注意的是它正在将错误级别的内容记录到看起来应该是 INFO 或更低的级别。或者...也许我错过了一些东西,但我不想在这里错过一些东西。

底线:我想要干净的日志,以便错误/警告有意义,并且我不必处理噪音。

这是我的日志输出的示例: 在此输入图像描述

您会注意到,我自己的日志记录显示在“调试”级别,但在它之前和之后是看似无害的日志条目,被标记为“错误”。(是的,我知道我自己的日志条目出现了 2 次,一次在调试时,一次在信息处 - 这是另一个问题,但对我来说优先级较低。)

这对于谷歌云功能来说是正常现象吗?或者我可以做些什么来纠正这个问题?

更新:

以下是我在 python 代码中配置日志记录的方法:

import logging
import logging.config

import google.cloud.logging

client = google.cloud.logging.Client()
client.get_default_handler()
client.setup_logging()
logging.getLogger().setLevel(logging.DEBUG)
Run Code Online (Sandbox Code Playgroud)

现在,我注意到在本地调试(使用函数框架)中,我也将这些相同的消息输出到控制台,而没有任何日志条目元数据,因此通过谷歌客户端代码进行跟踪,我注意到客户端代码只是使用python 日志库,当它们在调试时输出这些消息时,它们以某种方式绕过了我期望在这里使用的 google 日志钩子。因此它们被输出到 stderr,当然谷歌的日志记录将其解释为错误。

这并没有回答我自己的问题,而是添加了更多上下文,希望其他人已经解决了这个问题。

更新 #2 - 一个丑陋的解决方案,需要一个更好的解决方案

在对谷歌云客户端代码进行了更多挖掘之后,我得到了答案,尽管我不喜欢它,也不喜欢我正在做的“修复”这个问题。

发生的事情是,当该函数在 GCP 中部署并运行时,Python 日志记录框架会以某种方式使用其他处理程序进行初始化。调用 client.setup_logging() 后,如果我打印出附加到根记录器的处理程序,我会看到:

root handlers=[<StreamHandler (NOTSET)>, <StreamHandler (WARNING)>, <CloudLoggingHandler (NOTSET)>]
Run Code Online (Sandbox Code Playgroud)

接下来,为了让事情变得更有趣,当调用 setup_logging() 时,有一些“排除的记录器”硬编码到客户端代码中,以将它们排除在使用 CloudLoggingHandler 之外(有一条注释指出,如果不这样做,我们就会请参阅无限递归)。因此,使用这些特定于 google 的记录器记录的任何内容都将始终转到我上面捕获的 StreamHandler 之一或两个。

AND,最后的解释:StreamHandler 使用的默认流是 stderr,谷歌的日志报告正确地(恕我直言)将其解释为“错误”。

因此,有了这个解释,我至少可以在我自己的函数类中使用以下代码来解决这个问题:

import logging
import google.cloud.logging

client = google.cloud.logging.Client()
client.setup_logging() # NOTE specifying …
Run Code Online (Sandbox Code Playgroud)

google-cloud-logging google-cloud-functions

12
推荐指数
1
解决办法
4094
查看次数

在App Engine Standard python中使用Google Stackdriver Logging时出错

我的堆栈:
Google App Engine标准
Python(2.7)

目标:
要在Google Stackdriver日志记录中创建命名日志,请访问https://console.cloud.google.com/logs/viewer

文档 - Stackdriver日志记录: https ://google-cloud-python.readthedocs.io/en/latest/logging/usage.html

码:

from google.cloud import logging as stack_logging
from google.cloud.logging.resource import Resource
import threading

class StackdriverLogging:
    def __init__(self, resource=Resource(type='project', labels={'project_id': 'project_id'}), project_id='project_id'):

    self.resource = resource
    self.client = stack_logging.Client(project=project_id)

    def delete_logger(self, logger_name):
        logger = self.client.logger(logger_name)
        logger.delete()

    def async_log(self, logger_name, sev, msg):
        t = threading.Thread(target=self.log, args=(logger_name, sev, msg,))
        t.start()

    def log(self, logger_name, sev, msg):
        logger = self.client.logger(logger_name)

    if isinstance(msg, str):
        logger.log_text(msg, severity=sev, resource=self.resource)
    elif isinstance(msg, dict):
        logger.log_struct(msg, severity=sev, resource=self.resource) …
Run Code Online (Sandbox Code Playgroud)

python google-app-engine google-cloud-platform google-cloud-logging google-cloud-stackdriver

11
推荐指数
1
解决办法
602
查看次数

通过嵌入式 webview 进行 Google OAuth 2.0 客户端 ID 授权

设置:

情况:

我收到了一封来自 Google 的电子邮件,指出我的 Web 应用程序客户端 ID 正在嵌入的 Web 视图中接收 OAuth 请求,我需要对这些 Web 视图进行一些更改以避免中间人攻击。这是一封类似的电子邮件:https ://groups.google.com/g/omegaup-soporte/c/xrspGg8T94o

此电子邮件的主题是:“[建议采取行动] 采取行动继续使用 Google 的 OAuth 授权端点”,第一个声明是“我们检测到嵌入式 Web 视图中的一个或多个 OAuth 客户端 ID 向我们的 OAuth 2.0 授权端点发出请求”过去 30 天内的情况。”

问题:

如上所述,我的应用程序是一个 Web 应用程序,怎么可能收到来自嵌入式 Web 视图的 OAuth 请求?

android webview google-oauth google-cloud-platform google-cloud-logging

11
推荐指数
1
解决办法
2824
查看次数

日志未嵌套在灵活VM中的请求下

我有一个在App Engine Classic中运行的模块和另一个在App Engine Flexible中运行的模块.查看在App Engine Classic中运行的日志时,日志条目将嵌套在每个请求中.

但是,在查看在App Engine Flexible中运行的日志时,它们不会嵌套.每个日志条目似乎都与请求无关.这使得确定哪个日志与哪个请求相关联非常困难.

是否可以将App Engine Flexible中的日志嵌套在每个请求下(与App Engine Classic一样)?

我在文档中找不到解释这种差异的任何内容.

logging google-app-engine google-cloud-logging

10
推荐指数
1
解决办法
982
查看次数

如何将我的Java应用程序日志记录事件映射到GCP中的相应云记录事件级别Fecomp非compat App Engine?

我是GCP AppEngine的新手,我选择Flexible环境有几个原因.但是,我很震惊地发现灵活环境的非"兼容"运行时似乎不允许我将应用程序的日志记录事件映射到云日志记录中的相应日志级别.我读得对吗? https://cloud.google.com/appengine/docs/flexible/java/writing-application-logs#writing_application_logs_1

这个页面真是无益.https://cloud.google.com/java/getting-started/logging-application-events

这是经过几个小时阅读GAE日志记录问题并尝试确定哪些应用于标准环境与灵活.我可以说,在标准环境中可以进行事件级映射.

但是,要在Cloud Platform Console中更精细地控制日志级别显示,日志记录框架必须使用java.util.logging适配器.https://cloud.google.com/appengine/docs/java/how-requests-are-handled#Java_Logging

好.这是一个模糊的参考,但我想我在其他地方看到了更清楚的东西.

无论如何,在"灵活"的环境中,这不应该更容易吗?谁不想通过记录级别轻松过滤事件?

更新:我澄清了一个问题,表明我在询问GAE灵活环境中的不兼容运行时.

java logging google-app-engine google-cloud-logging stackdriver

10
推荐指数
1
解决办法
2545
查看次数

我们如何才能在 Google Cloud Logging 中查看特定文本之后和之前的日志?

在 Google Cloud Logging 中,使用advanced searchCan we search for atext然后查看该特定文本前后存在的日志吗?

例如,在 PDF、doc 或任何文件中,当您搜索单词时,搜索该单词后,您可以看到搜索文本上方和下方的内容,但在谷歌云日志记录中,我们只能看到存在单词的文本,但不是其上方和下方的内容。

谁能告诉我是否可以搜索 Google Cloud Logging 中存在的日志的上方和下方?

google-app-engine google-cloud-platform google-cloud-logging

9
推荐指数
2
解决办法
3028
查看次数

如何让 google-cloud-ops-agent 日志记录识别特殊的“严重性”字段

我正在 google 计算实例上运行 ZooKeeper 并尝试设置 google-cloud-ops-agent 以正确解析日志。我已经完成了大部分工作,但很难让它识别该severity区域。

文档指出这severity是一个将从 中提取的特殊字段jsonPayload,但我没有看到这种情况发生。

我的/etc/google-cloud-ops-agent/config.yaml

logging:
  receivers:
    zookeeper:
      type: files
      include_paths:
      - /zookeeper/logs/zookeeper.log
  processors:
    zookeeper:
      type: parse_regex
      field: message
      regex: '^(?<time>.{23}) \[(?<zknode>[^\]]+)] - (?<severity>\S+)\s+ \[(?<class>[^\]]+)] - (?<msg>.*)$'
      time_key: time
      time_format: "%Y-%m-%d %H:%M:%S,%L"
  service:
    pipelines:
      zookeeper:
        receivers: [zookeeper]
        processors: [zookeeper]
Run Code Online (Sandbox Code Playgroud)

证据 parse_regex 正常工作(但注意严重性仍然存在于jsonPayload

示例云日志记录输出

google-cloud-platform google-cloud-logging google-cloud-ops-agent

9
推荐指数
1
解决办法
2263
查看次数