标签: google-cloud-stackdriver

Django,Apache Kubernetes引擎上的Apache2,向Stackdriver Trace写了Opencensus Traces

我有一个来自Apache2的Django Web应用程序,其中mod_wsgi位于Google云平台中Kubernetes集群上运行的docker容器中,受Identity-Aware代理保护.一切都很好,但我想为所有请求发送GCP Stackdriver跟踪,而不为我的项目中的每个视图写一个.我发现使用Opencensus处理这个中间件.我浏览了这个文档,并通过指定StackdriverExporter并将project_id参数作为Project Number我的项目的Google Cloud Platform 传递,手动生成导出到项目中的Stackdriver Trace的跟踪.

现在为了对所有请求进行自动化,我按照说明设置了中间件.在settings.py,我添加模块INSTALLED_APPS,MIDDLEWARE并设置了OPENCENSUS_TRACE选项字典.我还加了OPENCENSUS_TRACE_PARAMS.这个伟大的工程使用默认的出口"opencensus.trace.exporters.print_exporter.PrintExporter",我所看到的跟踪和跨度信息,包括跟踪ID,并在我的Apache2 Web服务器日志的所有细节.但是,我想将这些发送到我的Stackdriver Trace处理器进行分析.

我尝试将EXPORTER参数设置为opencensus.trace.exporters.stackdriver_exporter.StackdriverExporter,只要您提供项目编号,该参数在从shell手动运行时有效.

当设置使用时StackdriverExporter,网页不会响应加载,运行状况检查开始失败,最终网页返回502错误,说我应该在30秒内再试一次(我相信身份识别一旦检测到运行状况检查失败,代理就会生成此错误),但服务器不会生成任何错误,并且Apache2中没有访问日志或错误.

在settings.py中有另一个字典命名OPENCENSUS_TRACE_PARAMS,我认为需要确定导出器应该使用哪个项目编号.该示例GCP_EXPORTER_PROJECT设置为None,并SERVICE_NAME设置为'my_service'.

我需要设置哪些选项才能让导出器发送回Stackdriver而不是打印到日志?你对我如何设置它有什么想法吗?

settings.py

MIDDLEWARE = (
    ...
    'opencensus.trace.ext.django.middleware.OpencensusMiddleware',
)
INSTALLED_APPS = (
    ...
    'opencensus.trace.ext.django',
)

OPENCENSUS_TRACE = {
    'SAMPLER': 'opencensus.trace.samplers.probability.ProbabilitySampler',
    'EXPORTER': 'opencensus.trace.exporters.stackdriver_exporter.StackdriverExporter',  # This one just makes the server hang with no response or error …
Run Code Online (Sandbox Code Playgroud)

django mod-wsgi apache2 google-cloud-stackdriver opencensus

8
推荐指数
1
解决办法
285
查看次数

stackdriver 记录客户端库缺少 python 的严重性

我想从我的应用引擎标准 python3 应用程序向堆栈驱动程序日志发送更具表现力的日志条目。通过遵循官方文档,我能够将我的日志发送到 stackdriver,并且时间戳似乎被正确解析。

但我错过了严重程度。此外,我看不到将某个请求的日志链接到操作的方法。java日志记录似乎是开箱即用的。

供参考,这是我的代码:

import logging
import os

from flask import Flask
from google.cloud import logging as glog

app = Flask(__name__)
log_client = glog.Client(os.getenv('GOOGLE_CLOUD_PROJECT'))
# Attaches a Google Stackdriver logging handler to the root logger
log_client.setup_logging()


@app.route('/_ah/push-handlers/cloudbuild', methods=['POST'])
def pubsub_push_handle():

    logging.info("stdlib info")
    logging.warning("stdlib warn")
    logging.error("stdlib error")
Run Code Online (Sandbox Code Playgroud)

导致堆栈驱动程序的日志:

登录堆栈驱动程序

如您所见,时间戳和消息可用,而严重性奇怪地缺失,它被归类为“任何”

有人可以指出我正确的方向,还是这种级别的合并尚不可用?

谢谢你的时间!卡斯腾

google-app-engine python-3.x google-cloud-platform stackdriver google-cloud-stackdriver

8
推荐指数
1
解决办法
927
查看次数

写入一个或多个点的频率高于为指标配置的最大采样周期

背景

我有一个网站部署在多台机器上。我想创建一个 Google 自定义指标来指定它的吞吐量 - 服务了多少个呼叫。

我们的想法是创建一个自定义指标,收集有关已服务请求的信息,并每分钟 1 次将信息更新为自定义指标。因此,对于每台机器,此代码每分钟最多可以发生 1 次。但这个过程正在我的集群中的每台机器上发生。

在本地运行代码可以完美运行。

问题

我收到此错误: Grpc.Core.RpcException: Status(StatusCode=InvalidArgument, Detail="无法写入一个或多个 TimeSeries:一个或多个点的写入频率比为指标配置的最大采样周期更频繁。{指标:custom.googleapis.com/web/2xx,时间戳:{最年轻的现有:'2019/09/28-23:58:59.000',新:'2019/09/28-23:59:02.000'}}: timeSeries[0]; 写入一个或多个点的频率高于为指标配置的最大采样周期。{指标:custom.googleapis.com/web/4xx,时间戳:{最年轻的现有:'2019/09/28-23 :58:59.000',新:'2019/09/28-23:59:02.000'}}:timeSeries 1 ")

然后,我在自定义指标限制中读到:

Rate at which data can be written to a single time series = one point per minute
Run Code Online (Sandbox Code Playgroud)

我认为 Google Cloud Custom Metric 将为我处理并发问题。

根据它们的限制,我实现实时监控的唯一选择是放置另一个应用程序,该应用程序将从所有计算机收集信息并将其更新为自定义指标。在我看来,对于实际用例来说,这似乎需要太多工作。

我缺少什么?

google-cloud-platform google-cloud-stackdriver

8
推荐指数
1
解决办法
6717
查看次数

无法将 Spring Boot 指标发布到 GCP stackdriver

我正在尝试将2.2.6.RELEASE在 GCP 计算引擎中运行的spring boot( ) 应用程序的指标发布到 stackdriver。我添加了micrometer-registry-stackdriver:1.3.6and的依赖spring-boot-actuator。Stackdriver 指标客户端配置按照micrometer 链接中的说明完成。在 VM 中,我安装了此处提到的云监控代理。

运行应用程序时,我收到错误 io.grpc.StatusRuntimeException: INTERNAL: An internal error occurred.

如果我缺少任何其他配置,有人可以通知我吗?

2020-04-29 10:19:16.248  INFO 14905 --- [           main] o.s.web.context.ContextLoader            : Root WebApplicationContext: initialization completed in 3608
ms
2020-04-29 10:19:18.085  INFO 14905 --- [           main] i.m.s.StackdriverMeterRegistry           : publishing metrics to stackdriver every 1m
2020-04-29 10:19:20.058  INFO 14905 --- [           main] o.s.s.concurrent.ThreadPoolTaskExecutor  : Initializing ExecutorService 'applicationTaskExecutor'
2020-04-29 10:19:20.735  INFO 14905 --- [           main] o.s.b.a.e.web.EndpointLinksResolver …
Run Code Online (Sandbox Code Playgroud)

spring-boot-actuator stackdriver google-cloud-stackdriver micrometer spring-micrometer

8
推荐指数
1
解决办法
702
查看次数

使用Python从Google Cloud Stackdriver API检索日志名称列表

我正在使用Google的Stackdriver Logging Client Libraries for Python以编程方式检索日志条目,类似于使用gcloud beta logging read.

Stackdriver还提供了一个API来检索日志名称列表,这很可能是gcloud beta logging logs list使用的.

如何将该API与Python客户端库一起使用?我在文档中找不到任何内容.

python google-cloud-platform google-cloud-python google-cloud-stackdriver

7
推荐指数
1
解决办法
829
查看次数

在 python 记录器中做等效的 log_struct

在谷歌示例中,它给出了以下内容:

logger.log_struct({
    'message': 'My second entry',
    'weather': 'partly cloudy',
})
Run Code Online (Sandbox Code Playgroud)

我将如何在 python 的记录器中做同样的事情。例如:

import logging
log.info(
    msg='My second entry', 
    extra = {'weather': "partly cloudy"}
)
Run Code Online (Sandbox Code Playgroud)

当我在 stackdriver 中查看这个时,额外的字段没有得到正确解析:

2018-11-12 15:41:12.366 PST
My second entry

Expand all | Collapse all 

{
 insertId:  "1de1tqqft3x3ri"  
 jsonPayload: {
  message:  "My second entry"   
  python_logger:  "Xhdoo8x"   
 }
 logName:  "projects/Xhdoo8x/logs/python"  
 receiveTimestamp:  "2018-11-12T23:41:12.366883466Z"  
 resource: {…}  
 severity:  "INFO"  
 timestamp:  "2018-11-12T23:41:12.366883466Z"  
}
Run Code Online (Sandbox Code Playgroud)

我该怎么做?

我现在能做的最接近的是:

log.handlers[-1].client.logger('').log_struct("...")
Run Code Online (Sandbox Code Playgroud)

但这仍然需要第二次调用...

python logging python-3.x google-cloud-platform google-cloud-stackdriver

7
推荐指数
1
解决办法
1008
查看次数

在GKE上运行的Ruby的Stackdriver错误报告

从GKE上运行的Rails应用程序收集错误需要哪些步骤?

我已将stackdriver gem添加到我的Rails应用程序中,并且已经使用该errorreporting.errorEvents.create权限创建了自定义角色.该角色将提供给Compute Engine默认服务帐户

我解释在GKE上运行时不需要执行以下设置的文档:

# Add this to config/environments/*.rb
Rails.application.configure do |config|
  # Stackdriver Error Reporting specific parameters
  config.google_cloud.error_reporting.project_id = "YOUR-PROJECT-ID"
  config.google_cloud.error_reporting.keyfile    = "/path/to/service-account.json"
end
Run Code Online (Sandbox Code Playgroud)

我手动创建了一个例外

这给了我宝贵的信息:

irb(main):001:0> Google::Cloud::ErrorReporting.report Exception.new(msg: "from console")
=> nil
irb(main):002:0> {:msg=>"from console"} (Exception)
Google::Cloud::PermissionDeniedError: 7:Stackdriver Error Reporting API has not been used in project NNNNN before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/clouderrorreporting.googleapis.com/overview?project=NNNN then retry. If you enabled this API recently, wait a few minutes …
Run Code Online (Sandbox Code Playgroud)

ruby-on-rails google-kubernetes-engine stackdriver google-cloud-stackdriver google-iam

7
推荐指数
1
解决办法
172
查看次数

如何在 Cloud Run 上使用 Stackdriver 日志记录

我正在尝试让 Stackdriver 日志记录适用于在 Google Cloud Run(完全托管)中运行的简单 Go 应用程序,但在 CloudRun 日志中看不到 stackdriver 条目。

我已经基于“官方”stackdriver golang 示例创建了最简单的演示应用程序

Cloud Run 文档指出不应执行其他操作来写入堆栈驱动程序日志

我的服务使用默认服务帐户

我正在使用 Go 1.13 编译代码(Dockerfile 是从Cloud Run 示例“按原样”复制的)

我试图将它部署到不同的地区,但没有成功

在本地运行容器时,使用服务帐户凭据,本地终端或 stackdriver 控制台中不会出现 stackdriver 日志消息

无论如何,在应用程序启动时,我只看到"Before stackdriver logging"后面"After stackdriver logging"没有其他消息\中间有错误

日志查看截图

这是日志记录代码的一部分(使用上面的链接获取完整源代码、Dockerfile 以及构建和运行应用程序的说明):

import (
    "context"
    "log"
    "os"
    ...

    "cloud.google.com/go/compute/metadata"
    "cloud.google.com/go/logging"
)

func main() {
    loggingClient, err := stackdriverClient()
    ...
    log.Println("Before stackdriver logging")
    logger.StandardLogger(logging.Info).Println("Stackdriver log")
    if err = logger.Flush(); err != nil { …
Run Code Online (Sandbox Code Playgroud)

logging go gcloud google-cloud-stackdriver google-cloud-run

7
推荐指数
1
解决办法
2599
查看次数

无法导出到监控服务,因为:GaxError RPC failed,由 3 引起

我在 App Engine 中有一个 Java 应用程序,最近我开始收到以下错误:

Unable to export to Monitering service because: GaxError RPC failed, caused by 3:One or more TimeSeries could not be written: Metrics cannot be written to gae_app. See https://cloud.google.com/monitoring/custom-metrics/creating-metrics#which-resource for a list of writable resource types.: timeSeries[0]
Run Code Online (Sandbox Code Playgroud)

每次在健康检查日志后都会发生这种情况:

Health checks: instance=instanceName start=2020-01-14T14:28:07+00:00 end=2020-01-14T14:28:53+00:00 total=18 unhealthy=0 healthy=18
Run Code Online (Sandbox Code Playgroud)

一段时间后,我的实例将重新启动,同样的事情又开始发生。

应用程序.yaml :

 #https://cloud.google.com/appengine/docs/flexible/java/reference/app-yaml

#General settings
runtime: java
api_version: '1.0'
env: flex
runtime_config:
  jdk: openjdk8
#service: service_name #Required if creating a service. Optional for the default service.

#https://cloud.google.com/compute/docs/machine-types
#Resource …
Run Code Online (Sandbox Code Playgroud)

google-app-engine google-cloud-platform google-cloud-stackdriver

7
推荐指数
1
解决办法
1594
查看次数

将自定义信息添加到 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
查看次数