标签: google-cloud-stackdriver

使用Google Cloud Stackdriver在Kubernetes Engine上记录Python代码的重复日志条目

我在Google Kubernetes Engine的容器中运行了一个简单的Python应用程序.我正在尝试使用以下指南将标准Python日志记录连接到Google Stackdriver日志记录:https://cloud.google.com/logging/docs/setup/python.我几乎成功了,但我得到了重复的日志条目,其中一个始终处于'错误'级别...


显示重复条目的Stackdriver日志的屏幕截图

显示重复条目的Stackdriver日志的屏幕截图

这是我的python代码,根据上面的指南设置了日志记录:

import webapp2
from paste import httpserver
import rpc

# Imports the Google Cloud client library
import google.cloud.logging
# Instantiates a client
client = google.cloud.logging.Client()
# Connects the logger to the root logging handler; by default this captures
# all logs at INFO level and higher
client.setup_logging()

app = webapp2.WSGIApplication([('/rpc/([A-Za-z]+)', rpc.RpcHandler),], debug=True)
httpserver.serve(app, host='0.0.0.0', port='80')
Run Code Online (Sandbox Code Playgroud)

以下是从屏幕截图触发日志的代码:

import logging

logging.info("INFO Entering PostEchoPost...")
logging.warning("WARNING Entering PostEchoPost...")
logging.error("ERROR Entering PostEchoPost...")
logging.critical("CRITICAL Entering PostEchoPost...")
Run Code Online (Sandbox Code Playgroud)

这是完整的Stackdriver日志,从屏幕截图中展开,错误解释的ERROR级别: …

python logging google-kubernetes-engine google-cloud-stackdriver

6
推荐指数
3
解决办法
1032
查看次数

对堆栈驱动程序指标执行算术

这些不是自定义指标,我只是尝试添加现有的 GCP 指标。

如何在堆栈驱动程序时间序列中添加 2 个指标?

我有两个不同的指标,我想对它们进行求和,这样我就看到一条线——而且我也希望能够针对这个求和指标发出警报。这可能吗?

同样,我不会将指标发送给堆栈驱动程序,而是使用现有的指标来执行此操作。

google-cloud-platform stackdriver google-cloud-monitoring google-cloud-stackdriver

6
推荐指数
0
解决办法
905
查看次数

如何在请求日志中嵌套应用程序日志,并使用操作ID标记它?

当我使用Google App Engine时,我可以:

  • (A)嵌套应用程序日志(例如下面的信息日志)
  • (B)在顶部"折叠"行中查看请求日志的摘要
  • (C)获取具有操作ID的标签,我可以单击该标签以轻松过滤日志流

最佳gae日志示例

是否可以通过Stackdriver Logging API完成相同的事情?

我知道我可以通过这些说明达到(A).

我可以通过以下两种方式达到(B):

但是,如果我选择(i),则不再出现operation-id标签(C),如果我执行后者,则(A)app log嵌套停止工作.

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

6
推荐指数
0
解决办法
171
查看次数

使用 Python 查询 GCP Stackdriver 日志

我正在使用 Python3 查询 Stackdriver 以获取 GCP 日志。不幸的是,具有重要数据的日志条目以“NoneType”而不是“dict”或“str”的形式返回给我。结果“entry.payload”是“None”类型,“entry.payload_pb”有我想要的数据,但是是乱码。

有没有办法让 Stackdriver 以干净的格式返回这些数据,或者有没有办法解析它?如果没有,有没有办法查询比我正在做的更好的数据并产生干净的数据?

我的代码看起来像这样:

#!/usr/bin/python3

from google.cloud.logging import Client, ASCENDING, DESCENDING
from google.oauth2.service_account import Credentials

projectName = 'my_project'
myFilter = 'logName="projects/' + projectName + '/logs/compute.googleapis.com%2Factivity_log"'

client = Client(project = projectName)
entries = client.list_entries(order_by=DESCENDING, page_size = 500, filter_ = myFilter)
for entry in entries:
    if isinstance(entry.payload, dict):
        print(entry.payload)
    if isinstance(entry.payload, str):
        print(entry.payload)
    if isinstance(entry.payload, None):
        print(entry.payload_pb)
Run Code Online (Sandbox Code Playgroud)

“entry.payload_pb”数据总是这样开头:

type_url: "type.googleapis.com/google.cloud.audit.AuditLog"
 value: "\032;\n9gcp-user@my-project.iam.gserviceaccount.com"I\n\r129.105.16.28\0228
Run Code Online (Sandbox Code Playgroud)

google-bigquery google-cloud-logging stackdriver google-cloud-python google-cloud-stackdriver

6
推荐指数
1
解决办法
2023
查看次数

Stackdriver Log Agent - 与用于 Docker 的 Google Cloud Logging 驱动程序无关的日志级别

TL,博士;在使用Google Cloud Logging 驱动程序的 Docker 容器中使用CloudLoggingHandler 进行 Stackdriver日志记录 API 调用时,将忽略日志级别。

细节; 从 Google Compute Engine 上运行的 Docker 容器获取日志的推荐方法是使用Stackdriver Logging Agent

最佳做法是在所有 VM 实例上运行 Stackdriver Logging 代理。该代理可在 Linux 和 Windows 下运行。要安装 Stackdriver Logging 代理,请参阅安装日志代理。

以下步骤已成功完成:

  • 确保 Compute Engine 默认服务帐号具有EditorLogs Writer角色。
  • 确保 VM 实例具有 Stackdriver Logging API(完整)的 Cloud API 访问范围
  • 安装启动Stackdriver Logging Agent。

然后我从 Google 的Cloud Platform Python docs复制了示例CloudLoggingHandler 示例

import logging
import google.cloud.logging …
Run Code Online (Sandbox Code Playgroud)

docker google-cloud-platform stackdriver google-cloud-stackdriver

6
推荐指数
1
解决办法
1143
查看次数

如何将本地Kubernetes日志发送到Stackdriver

目标:从内部版本为1.11.2的Kuberntes HA群集中获取有关Google Stackdriver的日志记录/监视信息。

我已经能够使用Fluentd Daemonset for Kubernetes将日志发送到Elasticsearch ,但是该项目不支持Stackdriver(问题)。就是说,有一个为Stackdriver(source)创建的docker镜像,但是没有daemonset。查看此存储库中的其他守护程序集,不同的fluent.conf文件之间有相似之处,除了fluent.conf缺少任何环境变量的Stackdriver 文件。

如 上面提到的GitHub问题所述,此处的Kubernetes GitHub中有一个插件 ,但这是旧版。这些文档可以在这里找到 。

它指出:

“警告:除了Google Kubernetes Engine以外,Stackdriver日志记录守护程序在其他平台上都存在已知问题。请您自担风险。”

以这种方式安装失败,没有说明原因。

其他一些注意事项。有Stackdriver Kubernetes Monitoring明确指出:

“易于在任何云或本地上入门”

在首页上,但似乎没有解释如何做。这个Stack Overflow问题 中有人希望将监视添加到他的AWS集群中。似乎尚不支持。

此外,在实际的Google Stackdriver上还指出

“与多个云和本地基础结构一起使用”。

值得注意的是,我是Fluentd和Google Cloud Platform的新手,但对管理本地Kubernetes集群非常熟悉。

有没有人能够从另一个平台上进行监视或登录以在GCP上工作?如果是这样,使用了什么方法?

fluentd kubernetes stackdriver google-cloud-stackdriver

6
推荐指数
1
解决办法
452
查看次数

使用 SLF4J 的堆栈驱动程序日志记录未在 Scala 中正确记录

我正在使用 Logback 和 SLF4J 进行 Stackdriver 日志记录,并且我正在遵循Google Cloud 中的示例。我的应用程序是用 Scala 编写的,并在 GCP 上的 Dataproc 集群上运行。

logback.xml 有以下内容。

<configuration>
  <appender name="CLOUD" class="com.google.cloud.logging.logback.LoggingAppender">
    <!-- Optional : filter logs at or above a level -->
    <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
      <level>INFO</level>
    </filter>
    <log>application.log</log> <!-- Optional : default java.log -->
    <resourceType>gae_app</resourceType> <!-- Optional : default: auto-detected, fallback: global -->
    <enhancer>com.company.customer.utils.MyLoggingEnhancer</enhancer> <!-- Optional -->
    <flushLevel>WARN</flushLevel> <!-- Optional : default ERROR -->
  </appender>

  <root level="info">
    <appender-ref ref="CLOUD" />
  </root>
</configuration>
Run Code Online (Sandbox Code Playgroud)

和 MyLoggingEnhancer 是

package com.company.customer.utils

import com.google.cloud.logging.LogEntry.Builder …
Run Code Online (Sandbox Code Playgroud)

scala slf4j google-cloud-platform google-cloud-logging google-cloud-stackdriver

6
推荐指数
0
解决办法
900
查看次数

将自定义信息添加到 Firebase Functions 中的 Stackdriver 错误日志

我正在使用 Firebase 函数和 Stackdriver。

Stackdriver 与 Firebase 功能集成得很好,因此我可以使用该console.error命令轻松记录错误。但是,我不仅想记录错误对象,还想记录查询参数。如果我可以在同一日志行中记录错误对象和查询参数,则可以轻松对它们进行分组和导出。

有没有一种简单的方法可以将信息添加到 Stackdriver 上的错误日志中,如下所示?

    console.error(new Error('Invalid query'), req.query)
Run Code Online (Sandbox Code Playgroud)

谢谢。

- - 编辑

我尝试了以下代码。这可以向日志条目添加一个查询参数,但不幸的是 Stackdriver 将所有错误放在一组中,如下面的屏幕截图所示。即使每个错误的类型不同并且发生在不同的文件中,所有错误也会分组在一起。我希望 Stackdriver Error Reporting 像往常一样按错误类型或堆栈跟踪对错误进行分组。

索引.js

const functions = require('firebase-functions')
const raiseReferenceError = require('./raiseReferenceError')
const raiseSyntaxError = require('./raiseSyntaxError')
const raiseTypeError = require('./raiseTypeError')

exports.stackdriverErrorLogging = functions.https.onRequest((req, res) => {
  try {
    switch (Math.round(Math.random() * 2)) {
      case 0:
        raiseReferenceError()
        break

      case 1:
        raiseSyntaxError()
        break

      default:
        raiseTypeError()
        break
    }
  } catch (error) {
    console.error({
      error: error,
      method: req.method,
      query: …
Run Code Online (Sandbox Code Playgroud)

node.js firebase google-cloud-functions google-cloud-stackdriver google-cloud-error-reporting

6
推荐指数
1
解决办法
848
查看次数

Firebase Functions 日志记录对象占用大量空间

我们的 firebase 函数console.log()在执行结束时是一个对象。

过去,它总是将整个对象聚集到 Firebase 函数日志界面中的一个下拉列表中,但现在似乎将对象的每个键放在单独的一行中,不仅占用更多空间,而且非常不可读。

这似乎主要发生在对象被字符串化时,例如:

console.log(JSON.stringify({key1: 'val1', key2: 'val2'}))
Run Code Online (Sandbox Code Playgroud)

以下是正在记录的错误对象的示例:

在此处输入图片说明

这种疯狂怎么能再次放入单个下拉列表中?

我们正在使用:

"firebase-admin": "^8.6.1",
"firebase-functions": "^3.3.0",
Run Code Online (Sandbox Code Playgroud)

谢谢!

node.js firebase google-cloud-functions stackdriver google-cloud-stackdriver

6
推荐指数
1
解决办法
559
查看次数

问题:GKE 集群节点详细信息中的图形为空(此时间间隔没有数据)。我该如何修复它?

我在 Google Cloud 中有一个集群。但我需要了解有关资源使用情况的信息。每个节点的界面上都有三个关于CPU、内存和磁盘使用情况的图形。但是每个节点中的所有这些图形对于任何时间间隔都有警告“此时间间隔没有数据”。

没有任何资源使用情况的数据

我将所有集群和节点升级到最新版本 1.15.4-gke.22,并将“旧版 Stackdriver 日志记录”更改为“Stackdriver Kubernetes 引擎监控”。

已启用 Stackdriver Kubernetes Engine 监控

但这没有帮助。在 Stackdriver Workspace 中,只有带有图形的“disk_read_bytes”,Metric Explorer 中的任何其他请求都只有消息“此时间间隔没有数据”

该时间间隔没有数据

如果我确实在命令行中请求“kubectl 顶级节点”,我会看到 CPU 和内存的当前数据。但我需要在节点详细信息页面上查看它以了解峰值负载。我该如何配置它?

monitoring google-kubernetes-engine google-cloud-stackdriver

6
推荐指数
1
解决办法
1202
查看次数