Menyiapkan Cloud Logging untuk Node.js

Untuk aplikasi Node.js, plugin dipertahankan untuk library logging Bunyan dan Winston yang populer.

Winston adalah library untuk tujuan umum, yang menerapkan berbagai pemformat dan transport log.

Bunyan memiliki spesialisasi dalam log JSON terstruktur. Pemformatan log dapat dilakukan dengan melakukan pemipaan ke command line Bunyan.

Anda juga dapat menggunakan library klien Logging untuk Node.js secara langsung, atau membuat integrasi sendiri dengan library logging pilihan Anda.

Agen Logging tidak harus diinstal untuk menggunakan library Bunyan dan Winston pada instance VM Compute Engine.

Sebelum memulai

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. Di konsol Google Cloud, pada halaman pemilih project, pilih atau buat project Google Cloud.

    Buka pemilih project

  3. Make sure that billing is enabled for your Google Cloud project.

  4. Aktifkan Cloud Logging API.

    Mengaktifkan API

  5. Di konsol Google Cloud, pada halaman pemilih project, pilih atau buat project Google Cloud.

    Buka pemilih project

  6. Make sure that billing is enabled for your Google Cloud project.

  7. Aktifkan Cloud Logging API.

    Mengaktifkan API

  8. Menyiapkan lingkungan Anda untuk pengembangan Node.js.

    Buka panduan penyiapan Node.js

Menggunakan Bunyan

Cloud Logging menyediakan plugin untuk library Logging Node.js Bunyan. Plugin Logging untuk Bunyan menyediakan lapisan yang lebih sederhana dengan tingkat yang lebih tinggi untuk menangani Logging.

Menginstal plugin

  1. Cara termudah untuk menginstal plugin Bunyan Logging adalah dengan npm:

    npm install --save bunyan @google-cloud/logging-bunyan
  2. Impor plugin dan tambahkan ke konfigurasi Bunyan Anda:

    const bunyan = require('bunyan');
    
    // Imports the Google Cloud client library for Bunyan
    const {LoggingBunyan} = require('@google-cloud/logging-bunyan');
    
    // Creates a Bunyan Cloud Logging client
    const loggingBunyan = new LoggingBunyan();
    
    // Create a Bunyan logger that streams to Cloud Logging
    // Logs will be written to: "projects/YOUR_PROJECT_ID/logs/bunyan_log"
    const logger = bunyan.createLogger({
      // The JSON payload of the log as it appears in Cloud Logging
      // will contain "name": "my-service"
      name: 'my-service',
      streams: [
        // Log to the console at 'info' and above
        {stream: process.stdout, level: 'info'},
        // And log to Cloud Logging, logging at 'info' and above
        loggingBunyan.stream('info'),
      ],
    });
    
    // Writes some log entries
    logger.error('warp nacelles offline');
    logger.info('shields at 99%');

Mengonfigurasi plugin

Anda dapat menyesuaikan perilaku plugin Bunyan menggunakan opsi konfigurasi yang sama dengan yang didukung oleh library klien Cloud Cloud Logging API untuk Node.js. Opsi ini dapat diteruskan dalam objek options yang diteruskan ke konstruktor plugin.

Menggunakan Bunyan dan Express

Anda dapat menyiapkan dan menggunakan Bunyan dengan Logging di aplikasi Node.js Express.

// Imports the Google Cloud client library for Bunyan.
const lb = require('@google-cloud/logging-bunyan');

// Import express module and create an http server.
const express = require('express');

async function startServer() {
  const {logger, mw} = await lb.express.middleware({
    logName: 'samples_express',
  });
  const app = express();

  // Install the logging middleware. This ensures that a Bunyan-style `log`
  // function is available on the `request` object. This should be the very
  // first middleware you attach to your app.
  app.use(mw);

  // Setup an http route and a route handler.
  app.get('/', (req, res) => {
    // `req.log` can be used as a bunyan style log method. All logs generated
    // using `req.log` use the current request context. That is, all logs
    // corresponding to a specific request will be bundled in the Stackdriver
    // UI.
    req.log.info('this is an info log message');
    res.send('hello world');
  });

  const port = process.env.PORT || 8080;

  // `logger` can be used as a global logger, one not correlated to any specific
  // request.
  logger.info({port}, 'bonjour');

  // Start listening on the http server.
  const server = app.listen(port, () => {
    console.log(`http server listening on port ${port}`);
  });

  app.get('/shutdown', (req, res) => {
    res.sendStatus(200);
    server.close();
  });
}

startServer();

Menggunakan Winston

Cloud Logging menyediakan plugin untuk library Node.js Logging Winston. Plugin Logging untuk Winston menyediakan lapisan dengan level lebih tinggi yang lebih sederhana untuk menangani Logging.

Menginstal plugin

  1. Cara termudah untuk menginstal plugin Winston Logging adalah dengan npm:

    npm install --save @google-cloud/logging-winston winston
  2. Impor plugin dan tambahkan ke konfigurasi Winston Anda:

    const winston = require('winston');
    
    // Imports the Google Cloud client library for Winston
    const {LoggingWinston} = require('@google-cloud/logging-winston');
    
    const loggingWinston = new LoggingWinston();
    
    // Create a Winston logger that streams to Cloud Logging
    // Logs will be written to: "projects/YOUR_PROJECT_ID/logs/winston_log"
    const logger = winston.createLogger({
      level: 'info',
      transports: [
        new winston.transports.Console(),
        // Add Cloud Logging
        loggingWinston,
      ],
    });
    
    // Writes some log entries
    logger.error('warp nacelles offline');
    logger.info('shields at 99%');

Mengonfigurasi plugin

Anda dapat menyesuaikan perilaku plugin Winston menggunakan opsi konfigurasi yang sama dengan yang didukung oleh library klien Cloud Cloud Logging API untuk Node.js. Opsi ini dapat diteruskan dalam objek options yang diteruskan ke konstruktor plugin.

Untuk mengetahui informasi lebih lanjut tentang penginstalan, lihat dokumentasi untuk library Cloud Logging untuk Node.js. Anda juga dapat melaporkan masalah menggunakan issue tracker.

Menulis log dengan library klien Cloud Logging

Untuk mengetahui informasi tentang penggunaan library klien Cloud Logging untuk Node.js secara langsung, lihat Library Klien Cloud Logging.

Menjalankan di Google Cloud

Agar aplikasi dapat menulis log menggunakan library Cloud Logging untuk Node.js, akun layanan untuk resource yang mendasarinya harus memiliki peran Logs Writer (roles/logging.logWriter) IAM. Sebagian besar lingkungan Google Cloud secara otomatis mengonfigurasi akun layanan default untuk memiliki peran ini.

App Engine

Cloud Logging diaktifkan secara otomatis untuk App Engine, dan akun layanan default aplikasi Anda memiliki izin IAM secara default untuk menulis entri log.

Untuk menulis entri log dari aplikasi Anda, sebaiknya gunakan Bunyan atau Winston seperti yang dijelaskan di halaman ini.

Untuk informasi selengkapnya, lihat Menulis dan melihat log.

Google Kubernetes Engine (GKE)

GKE otomatis memberikan peran IAM Logs Writer (roles/logging.logWriter) ke akun layanan default. Jika Anda menggunakan Workload Identity dengan akun layanan default ini untuk memungkinkan beban kerja mengakses Google Cloud API tertentu, konfigurasi tambahan tidak diperlukan. Namun, jika Anda menggunakan Workload Identity dengan akun layanan IAM kustom, pastikan bahwa akun layanan kustom memiliki peran Penulis Log (roles/logging.logWriter).

Jika diperlukan, Anda juga dapat menggunakan perintah berikut untuk menambahkan cakupan akses logging.write saat membuat cluster:

gcloud container clusters create example-cluster-name \
    --scopes https://www.googleapis.com/auth/logging.write

Compute Engine

Saat menggunakan instance VM Compute Engine, tambahkan cakupan akses cloud-platform ke setiap instance. Saat membuat instance baru melalui Google Cloud Console, Anda dapat melakukannya di bagian Identity and API access pada panel Create Instance. Gunakan akun layanan default Compute Engine atau akun layanan lain pilihan Anda, lalu pilih Izinkan akses penuh ke semua Cloud API di bagian Identitas dan akses API. Apa pun akun layanan yang Anda pilih, pastikan akun tersebut telah diberi peran Penulis Log di bagian IAM & Admin di Konsol Google Cloud.

Cloud Functions

Cloud Functions memberikan peran Penulis Log secara default.

Library Cloud Logging untuk Node.js dapat digunakan tanpa perlu memberikan kredensial secara eksplisit.

Cloud Functions dikonfigurasi untuk menggunakan Cloud Logging secara otomatis.

Menjalankan secara lokal dan di tempat lain

Agar dapat menggunakan library Cloud Logging untuk Node.js di luar Google Cloud, termasuk menjalankan library di workstation Anda sendiri, di komputer pusat data, atau di instance VM penyedia cloud lainnya, Anda harus memasukkan project ID Google Cloud dan kredensial akun layanan yang sesuai langsung ke library Cloud Logging untuk Node.js.

Untuk akun layanan yang ada, lakukan hal berikut:

  1. Berikan peran IAM Logs Writer (roles/logging.logWriter) ke akun layanan tersebut. Untuk mengetahui informasi selengkapnya tentang peran IAM, lihat Kontrol akses.

  2. Siapkan Kredensial Default Aplikasi.

Jika Anda tidak memiliki akun layanan, buat akun layanan. Untuk mengetahui informasi tentang proses ini, lihat Membuat akun layanan.

Untuk mengetahui informasi umum tentang metode yang dapat Anda gunakan untuk mengautentikasi, lihat Terminologi: akun layanan.

Menggunakan Bunyan:

// Imports the Google Cloud client library for Bunyan
const {LoggingBunyan} = require('@google-cloud/logging-bunyan');

// Creates a client
const loggingBunyan = new LoggingBunyan({
  projectId: 'your-project-id',
  keyFilename: '/path/to/key.json',
});

Menggunakan Winston:

// Imports the Google Cloud client library for Winston
const {LoggingWinston} = require('@google-cloud/logging-winston');

// Creates a client
const loggingWinston = new LoggingWinston({
  projectId: 'your-project-id',
  keyFilename: '/path/to/key.json',
});

Melihat log

Di panel navigasi konsol Google Cloud, pilih Logging, lalu pilih Logs Explorer:

Buka Logs Explorer

Di Logs Explorer, Anda harus menentukan satu atau beberapa resource, tetapi pemilihan resource mungkin tidak jelas. Berikut beberapa tips untuk membantu Anda memulai:

  • Jika Anda men-deploy aplikasi ke App Engine atau menggunakan library khusus App Engine, tetapkan resource ke Aplikasi GAE.

  • Jika Anda men-deploy aplikasi di Compute Engine, tetapkan resource ke Instance VM GTFS.

  • Jika Anda men-deploy aplikasi di Google Kubernetes Engine, konfigurasi logging cluster akan menentukan jenis resource entri log. Untuk diskusi mendetail tentang solusi Kemampuan Observabilitas Google Cloud Lama dan Kemampuan Observasi Google Cloud, serta pengaruh opsi tersebut terhadap jenis resource, lihat Bermigrasi ke Google Cloud untuk Kemampuan Observasi Kubernetes Monitoring.

  • Jika aplikasi Anda menggunakan Cloud Logging API secara langsung, resource-nya bergantung pada API dan konfigurasi Anda. Misalnya, dalam aplikasi, Anda dapat menetapkan resource atau menggunakan resource default.

  • Jika Anda tidak melihat log apa pun di Logs Explorer, untuk melihat semua entri log, beralihlah ke mode kueri lanjutan dan gunakan kueri kosong.

    1. Untuk beralih ke mode kueri lanjutan, klik menu (▾) di bagian atas Logs Explorer, lalu pilih Convert to advanced filter.
    2. Hapus konten yang muncul di kotak filter.
    3. Klik Kirim Filter.

    Anda bisa memeriksa masing-masing entri untuk mengidentifikasi resource.

Untuk informasi tambahan, lihat Menggunakan Logs Explorer.