Самый простой способ ведения журнала из Google Cloud Run - PullRequest
0 голосов
/ 24 марта 2020

Я следовал этому руководству https://firebase.google.com/docs/hosting/cloud-run, чтобы настроить запуск в облаке docker. Затем я попытался следовать этому руководству https://cloud.google.com/run/docs/logging, чтобы выполнить простой журнал. Попытка записи структурированного журнала в stdout Это мой код:

    trace_header = request.headers.get('X-Cloud-Trace-Context')

    if trace_header:
        trace = trace_header.split('/')
        global_log_fields['logging.googleapis.com/trace'] = "projects/sp-64d90/traces/" + trace[0]

    # Complete a structured log entry.
    entry = dict(severity='NOTICE',
                 message='This is the default display field.',
                 # Log viewer accesses 'component' as jsonPayload.component'.
                 component='arbitrary-property',
                 **global_log_fields)

    print(json.dumps(entry))

Я не могу увидеть этот журнал в средстве просмотра журналов облака. Я вижу http Get logs каждый раз, когда звоню на docker. Я что-то упустил? Я новичок в этом и удивился, каков простой способ регистрировать информацию и просматривать ее, предполагая, что созданный мной docker был точно с шагами из руководства (https://firebase.google.com/docs/hosting/cloud-run)

Спасибо

Ответы [ 3 ]

1 голос
/ 04 апреля 2020

Я столкнулся с точно такой же проблемой. Я обнаружил, что при сбросе стандартного вывода журнала появляется, когда это не так. Похоже, ошибка в Cloud Run мне.

print(json.dumps(entry))
import sys
sys.stdout.flush()

Вывод со сбросом

0 голосов
/ 25 марта 2020

В Google Cloud Logging есть поддержка библиотек Bunyan и Winston node.js:

Как правило, если вы не хотите структурированное ведение журнала , все, что вам нужно сделать, это распечатать вещи в stdout / stderr, и Cloud Run подберет их.

Это задокументировано на https://cloud.google.com/run/docs/logging, а также пример Node.js для структурированной и неструктурированной регистрации.

0 голосов
/ 24 марта 2020

1. Следуйте упомянутому вами руководству Служите динамически c контент и размещайте микроуслуги с помощью Cloud Run

2. Добавьте следующий код в index.js

 const {Logging} = require('@google-cloud/logging');
 const express = require('express');
 const app = express();

 app.get('/', (req, res) => {
  console.log('Hello world received a request.');

  const target = process.env.TARGET || 'World';
  const projectId = 'your-project';
  const logging = new Logging({projectId});

  // Selects the log to write to
  const log = logging.log("Cloud_Run_Logs");

  // The data to write to the log
  const text = 'Hello, world!';

  // The metadata associated with the entry
  const metadata = {
    resource: {type: 'global'},
    // See: https://cloud.google.com/logging/docs/reference/v2/rest/v2/LogEntry#logseverity
    severity: 'INFO',
  };

  // Prepares a log entry
  const entry = log.entry(metadata, text);

   async function writeLog() {
    // Writes the log entry
    await log.write(entry);
    console.log(`Logged the log that you just created: ${text}`);
  }
  writeLog();




  res.send(`Hello ${target}!`);
});

const port = process.env.PORT || 8080;
app.listen(port, () => {
  console.log('Hello world listening on port', port);
});

3.Проверьте журналы в разделе Logging / Global

enter image description here

Редактировать

Для python:


import os
import google.cloud.logging
import logging


from flask import Flask

app = Flask(__name__)

@app.route('/')
def hello_world():
    target = os.environ.get('TARGET', 'World')
    # 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()

    # The data to log
    text = 'Hello, these are logs from cloud run!'

    # Emits the data using the standard logging module
    logging.warning(text)
    return 'Hello {}!\n'.format(text)

enter image description here

...