Google Cloud Logging cho Node.js: Hướng dẫn khắc phục sự cố thường gặp

Giới thiệu tổng quan về thư viện ghi nhật ký trên nền tảng Google Cloud

@google-cloud/logging là một thư viện client-side được phát triển bởi Google nhằm kết nối ứng dụng Node.js với dịch vụ Cloud Logging trên Google Cloud Platform (GCP). Thư viện này hỗ trợ thu thập, truy vấn, phân tích và thiết lập cảnh báo dựa trên nhật ký từ nhiều nguồn — bao gồm cả môi trường GCP và AWS. Ngôn ngữ chính được sử dụng trong thư viện là JavaScript chạy trên nền Node.js.

Ba thách thức phổ biến khi bắt đầu sử dụng và cách xử lý hiệu quả

Vấn đề 1: Cài đặt không thành công hoặc thiếu phụ thuộc

Khi chạy lệnh cài đặt, bạn có thể gặp lỗi liên quan đến phiên bản Node.js không tương thích hoặc thiếu quyền truy cập vào registry npm.

  • Đảm bảo phiên bản Node.js ≥ 16.x (khuyến nghị dùng LTS mới nhất).
  • Cài đặt thư viện chính thức bằng lệnh sau:
npm add @google-cloud/logging

Nếu chỉ cần chức năng ghi log cơ bản (không yêu cầu tính năng nâng cao như streaming hoặc cấu hình chi tiết), hãy cân nhắc dùng phiên bản tối ưu hóa:

npm add @google-cloud/logging-min

Vấn đề 2: Khởi tạo client thất bại do sai cấu hình xác thực

Lỗi phổ biến nhất là Unable to detect a Project Id hoặc Could not load the default credentials. Điều này xảy ra khi hệ thống không tìm thấy thông tin xác thực hợp lệ.

Cách khắc phục:

  1. Import đúng module và sử dụng cú pháp ES Module (nếu dự án hỗ trợ):
import { Logging } from '@google-cloud/logging';
  1. Tạo instance với cấu hình rõ ràng — ưu tiên sử dụng biến môi trường thay vì hardcode đường dẫn file:
const logger = new Logging({
  projectId: process.env.GCLOUD_PROJECT_ID || 'my-gcp-project',
  credentials: {
    private_key: process.env.GCLOUD_PRIVATE_KEY?.replace(/\\n/g, '\n'),
    client_email: process.env.GCLOUD_CLIENT_EMAIL
  }
});

Lưu ý: Đảm bảo biến môi trường đã được thiết lập trước khi khởi động ứng dụng.

Vấn đề 3: Ghi/đọc nhật ký không phản ánh đúng dữ liệu mong đợi

Một số trường hợp nhật ký không xuất hiện trong Console hoặc bị mất định dạng do thiếu metadata bắt buộc.

Viết nhật ký đúng chuẩn:

const appLog = logger.log('production-app-logs');
const entry = appLog.entry(
  {
    severity: 'INFO',
    resource: { type: 'global' },
    labels: { service: 'auth-service', version: 'v2.1.0' }
  },
  { event: 'user_login_success', userId: 'usr_789abc', ip: '203.0.113.42' }
);

await appLog.write(entry);

Truy vấn nhật ký theo điều kiện thời gian và mức độ nghiêm trọng:

const [entries] = await logger.entries.list({
  filter: `logName = "projects/my-gcp-project/logs/production-app-logs" 
           AND severity >= INFO 
           AND timestamp > "${new Date(Date.now() - 3600000).toISOString()}"`,
  pageSize: 50
});

entries.forEach(entry => {
  console.log(`[${entry.metadata.severity}] ${JSON.stringify(entry.data)}`);
});

Thẻ: google-cloud-logging nodejs cloud-observability

Đăng vào ngày 18 tháng 5 lúc 05:12