Catch up on everthing we announced at this year's Firebase Summit. Learn more

Записывать и просматривать журналы

Ведение журнала - важный инструмент для отладки и мониторинга кода. Облако функция дает возможность использовать его регистратора SDK, пользовательский Google Cloud Logging, или console стандартный объекта для разработки для Интернета.

Написание журналов

В то время как облако Функции регистратора SDK рекомендуется для большинства ситуаций, вы можете выбрать один из других вариантов , по следующим причинам:

  • У вас есть существующий код базы и предпочитают не реорганизовать от console.log .
  • Вы знакомы с Cloud Logging (ранее StackDriver logging) и предпочитаете использовать его для пользовательского ведения журнала.

Использование SDK регистратора облачных функций

Функции Облака Logger SDK предоставляет стандартный интерфейс , который имеет аналогичную API для console.log заявлений и поддержки других уровней журнала. Вы можете использовать этот SDK для регистрации событий с неструктурированными данными , что позволяет легче анализа и мониторинга.

SDK средства ведения журнала поддерживает записи журнала как часть импорта с подстановочными знаками. Например:

  const functions = require("firebase-functions");

  functions.logger.log("Hello from info. Here's an object:", someObj);

В качестве альтернативы вы можете использовать индивидуальный экспорт. В этом примере демонстрируются структурированные данные, прикрепленные к журналу в качестве последнего аргумента:

const { warn } = require("firebase-functions/lib/logger");


// Attach structured data to the log as the last argument.
warn("This is a 'WARNING' severity message with some metadata.", {
  key1: 'val1',
  key2: 'val2'
});
  • logger.log() команды имеют уровень журнала INFO.
  • logger.info() команды имеют уровень журнала INFO.
  • logger.warn() команды имеют уровень журнала ошибок.
  • logger.error() команды имеют уровень журнала ошибок.
  • Внутренние системные сообщения имеют уровень журнала DEBUG.

С logger.write() , вы можете писать записи в журнале уровни важности журнала добавления по CRITICAL , ALERT и EMERGENCY . См LogSeverity .

Пользовательские журналы облачной регистрации

Облако функции журналы с регистратора SDK подкрепляются Cloud Logging . Вы можете использовать библиотеку Logging Cloud для Node.js для регистрации событий с неструктурированными данными, что позволяет легче анализа и мониторинга.

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

// ...

// Instantiate the logging SDK. The project ID will
// be automatically inferred from the Cloud Functions environment.
const logging = new Logging();
const log = logging.log('my-custom-log-name');

// This metadata is attached to each log entry. This specifies a fake
// Cloud Function called 'Custom Metrics' in order to make your custom
// log entries appear in the Cloud Functions logs viewer.
const METADATA = {
  resource: {
    type: 'cloud_function',
    labels: {
      function_name: 'CustomMetrics',
      region: 'us-central1'
    }
  }
};

// ...

// Data to write to the log. This can be a JSON object with any properties
// of the event you want to record.
const data = {
  event: 'my-event',
  value: 'foo-bar-baz',

  // Optional 'message' property will show up in the Firebase
  // console and other human-readable logging surfaces
  message: 'my-event: foo-bar-baz'
};

// Write to the log. The log.write() call returns a Promise if you want to
// make sure that the log was written successfully.
const entry = log.entry(METADATA, data);
log.write(entry);

Использование console.log

Рекомендуемое решение для протоколирования с функцией является использование регистратора SDK . Вместо этого вы можете использовать стандартную регистрацию JavaScript вызовов, как console.log и console.error , но в первую очередь необходимо требовать специального модуля правильно коммутировать стандартные методы для работы:

require("firebase-functions/lib/logger/compat");

После требуется модуль совместимости регистратора, вы можете использовать console.log() методы как обычно в вашем коде:

exports.helloError = functions.https.onRequest((request, response) => {
  console.log('I am a log entry!');
  response.send('Hello World...');
});
  • console.log() команды имеют уровень журнала INFO.
  • console.info() команды имеют уровень журнала INFO.
  • console.warn() команды имеют уровень журнала ошибок.
  • console.error() команды имеют уровень журнала ошибок.
  • Внутренние системные сообщения имеют уровень журнала DEBUG.

Просмотр журналов

Бревна для облачных функций можно просмотреть либо в консоли Firebase, Cloud Logging UI, или через firebase инструмент командной строки.

Использование интерфейса командной строки Firebase

Для просмотра журналов с firebase инструмента используйте functions:log команду:

firebase functions:log

Чтобы просмотреть журналы для конкретной функции, укажите имя функции в качестве аргумента:

firebase functions:log --only <FUNCTION_NAME>

Для полного диапазона просмотра журнала опций, просмотреть справку по functions:log :

firebase help functions:log

Использование консоли Firebase

Вы можете просматривать журналы для облачных функций из консоли Firebase.

Использование пользовательского интерфейса облачного ведения журнала

Вы можете просматривать журналы для облачных функций в Logging UI Cloud.

Анализ журналов

Cloud Logging предлагает мощный набор инструментов анализа журналов, которые вы можете использовать для мониторинга своих облачных функций. Эти средства особенно эффективны , когда в сочетании с настраиваемого протоколирования .

Метрики на основе журналов

В Logging UI Cloud, воспользуйтесь расширенным полем фильтра , чтобы сузить область журнала к функции , которую вы хотите проанализировать, а затем нажмите кнопку Добавить фильтр для фильтрации журналов. Например, вы можете анализировать журналы только из одной функции:

resource.type="cloud_function"
resource.labels.function_name="myCloudFunction"
resource.labels.region="us-central1"

Если вы регистрировали события с помощью пользовательских данных JSON, вы можете фильтровать их, используя указанные вами ключи и значения:

resource.type="cloud_function"
resource.labels.function_name="CustomMetrics"
jsonPayload.event="my-event"

После фильтрации журналов, вы можете анализировать их с помощью журналов на основе метрик . Нажмите Создать Metric кнопки , чтобы открыть метрический редактор и выберите тип метрики:

  • Счетчик Метрика: подсчитать количество записей журнала , которые соответствуют фильтру. Например, вы можете подсчитать, сколько раз происходит определенное событие.
  • Показатели распределения: аккумулировать числовые данные из записей журнала , которые соответствуют фильтру. Например, вы можете отслеживать задержки определенных операций в ваших функциях.

Для текстовых журналов, таких , как в результате console.log() в ваших функциях, вы можете извлечь значения и метки из textPayload поля с помощью регулярных выражений. Для пользовательских журналов с структурированными данными , которые вы можете получить прямой доступ к данным в jsonPayload поле.

Графики и предупреждения

Создав метрики на основе журналов для мониторинга своих функций, вы можете создавать диаграммы и предупреждения на основе этих метрик. Например, вы можете создать диаграмму для визуализации задержки с течением времени или создать предупреждение, чтобы вы знали, если определенная ошибка возникает слишком часто.

См Создание диаграмм и предупреждений для получения подробной информации о том , как использовать журналы на основе показателей в графиках и предупреждающих политик.