我在Google Kubernetes Engine的容器中运行了一个简单的Python应用程序.我正在尝试使用以下指南将标准Python日志记录连接到Google Stackdriver日志记录:https://cloud.google.com/logging/docs/setup/python.我几乎成功了,但我得到了重复的日志条目,其中一个始终处于'错误'级别...
显示重复条目的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
这些不是自定义指标,我只是尝试添加现有的 GCP 指标。
如何在堆栈驱动程序时间序列中添加 2 个指标?
我有两个不同的指标,我想对它们进行求和,这样我就看到一条线——而且我也希望能够针对这个求和指标发出警报。这可能吗?
同样,我不会将指标发送给堆栈驱动程序,而是使用现有的指标来执行此操作。
google-cloud-platform stackdriver google-cloud-monitoring google-cloud-stackdriver
当我使用Google App Engine时,我可以:
是否可以通过Stackdriver Logging API完成相同的事情?
我知道我可以通过这些说明达到(A).
我可以通过以下两种方式达到(B):
httpRequestjsonPayload和下面这个Google员工的建议,以逆向工程GAE做什么.但是,如果我选择(i),则不再出现operation-id标签(C),如果我执行后者,则(A)app log嵌套停止工作.
google-app-engine google-cloud-logging stackdriver google-cloud-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
TL,博士;在使用Google Cloud Logging 驱动程序的 Docker 容器中使用CloudLoggingHandler 进行 Stackdriver日志记录 API 调用时,将忽略日志级别。
细节; 从 Google Compute Engine 上运行的 Docker 容器获取日志的推荐方法是使用Stackdriver Logging Agent:
最佳做法是在所有 VM 实例上运行 Stackdriver Logging 代理。该代理可在 Linux 和 Windows 下运行。要安装 Stackdriver Logging 代理,请参阅安装日志代理。
以下步骤已成功完成:
Editor和Logs Writer角色。然后我从 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
目标:从内部版本为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上工作?如果是这样,使用了什么方法?
我正在使用 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
我正在使用 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
我们的 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
我在 Google Cloud 中有一个集群。但我需要了解有关资源使用情况的信息。每个节点的界面上都有三个关于CPU、内存和磁盘使用情况的图形。但是每个节点中的所有这些图形对于任何时间间隔都有警告“此时间间隔没有数据”。
我将所有集群和节点升级到最新版本 1.15.4-gke.22,并将“旧版 Stackdriver 日志记录”更改为“Stackdriver Kubernetes 引擎监控”。
但这没有帮助。在 Stackdriver Workspace 中,只有带有图形的“disk_read_bytes”,Metric Explorer 中的任何其他请求都只有消息“此时间间隔没有数据”
如果我确实在命令行中请求“kubectl 顶级节点”,我会看到 CPU 和内存的当前数据。但我需要在节点详细信息页面上查看它以了解峰值负载。我该如何配置它?
monitoring google-kubernetes-engine google-cloud-stackdriver
stackdriver ×6
firebase ×2
node.js ×2
docker ×1
fluentd ×1
google-cloud-error-reporting ×1
kubernetes ×1
logging ×1
monitoring ×1
python ×1
scala ×1
slf4j ×1