Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Log dan pantau fungsi TypeScript Lambda
AWS Lambda secara otomatis memonitor fungsi Lambda dan mengirim entri log ke Amazon. CloudWatch Fungsi Lambda Anda dilengkapi dengan grup CloudWatch log Log dan aliran log untuk setiap instance fungsi Anda. Lingkungan runtime Lambda mengirimkan detail tentang setiap pemanggilan dan output lainnya dari kode fungsi Anda ke aliran log. Untuk informasi selengkapnya tentang CloudWatch Log, lihatMenggunakan CloudWatch log Amazon dengan AWS Lambda.
Untuk mengeluarkan log dari kode fungsi Anda, Anda dapat menggunakan metode pada objek konsolstdout
ataustderr
.
Bagian-bagian
Menggunakan alat logging dan pustaka
Powertools for AWS Lambda (TypeScript)
Tangkap bidang kunci dari konteks Lambda, cold start, dan struktur logging output sebagai JSON
Log peristiwa pemanggilan Lambda saat diinstruksikan (dinonaktifkan secara default)
Cetak semua log hanya untuk persentase pemanggilan melalui pengambilan sampel log (dinonaktifkan secara default)
Tambahkan kunci tambahan ke log terstruktur kapan saja
Gunakan pemformat log kustom (Bring Your Own Formatter) untuk mengeluarkan log dalam struktur yang kompatibel dengan RFC Logging organisasi Anda
Menggunakan Powertools for AWS Lambda (TypeScript) dan AWS SAM untuk logging terstruktur
Ikuti langkah-langkah di bawah ini untuk mengunduh, membangun, dan menyebarkan contoh TypeScript aplikasi Hello World dengan modul Powertools for AWS Lambda (TypeScript)hello world
pesan.
Prasyarat
Untuk menyelesaikan langkah-langkah di bagian ini, Anda harus memiliki hal-hal berikut:
-
Node.js 18.x atau yang lebih baru
-
AWS SAM CLI versi 1.75 atau yang lebih baru. Jika Anda memiliki versi CLI yang lebih lama, lihat Memutakhirkan AWS SAM CLI. AWS SAM
Menyebarkan aplikasi sampel AWS SAM
-
Inisialisasi aplikasi menggunakan TypeScript template Hello World.
sam init --app-template hello-world-powertools-typescript --name sam-app --package-type Zip --runtime nodejs18.x
-
Bangun aplikasi.
cd sam-app && sam build
-
Terapkan aplikasi.
sam deploy --guided
-
Ikuti petunjuk di layar. Untuk menerima opsi default yang disediakan dalam pengalaman interaktif, tekan
Enter
.catatan
Karena HelloWorldFunction mungkin tidak memiliki otorisasi yang ditentukan, Apakah ini baik-baik saja? , pastikan untuk masuk
y
. -
Dapatkan URL aplikasi yang digunakan:
aws cloudformation describe-stacks --stack-name sam-app --query 'Stacks[0].Outputs[?OutputKey==`HelloWorldApi`].OutputValue' --output text
-
Memanggil titik akhir API:
curl
<URL_FROM_PREVIOUS_STEP>
Jika berhasil, Anda akan melihat tanggapan ini:
{"message":"hello world"}
-
Untuk mendapatkan log untuk fungsi tersebut, jalankan log sam. Untuk informasi selengkapnya, lihat Bekerja dengan log di Panduan AWS Serverless Application Model Pengembang.
sam logs --stack-name sam-app
Output log terlihat seperti ini:
2023/01/31/[$LATEST]4d53e8d279824834a1ccd35511a4949c 2022-08-31T09:33:10.552000 START RequestId: 70693159-7e94-4102-a2af-98a6343fb8fb Version: $LATEST 2023/01/31/[$LATEST]4d53e8d279824834a1ccd35511a4949c 2022-08-31T09:33:10.594000 2022-08-31T09:33:10.557Z 70693159-7e94-4102-a2af-98a6343fb8fb INFO {"_aws":{"Timestamp":1661938390556,"CloudWatchMetrics":[{"Namespace":"sam-app","Dimensions":[["service"]],"Metrics":[{"Name":"ColdStart","Unit":"Count"}]}]},"service":"helloWorld","ColdStart":1} 2023/01/31/[$LATEST]4d53e8d279824834a1ccd35511a4949c 2022-08-31T09:33:10.595000 2022-08-31T09:33:10.595Z 70693159-7e94-4102-a2af-98a6343fb8fb INFO {"level":"INFO","message":"This is an INFO log - sending HTTP 200 - hello world response","service":"helloWorld","timestamp":"2022-08-31T09:33:10.594Z"} 2023/01/31/[$LATEST]4d53e8d279824834a1ccd35511a4949c 2022-08-31T09:33:10.655000 2022-08-31T09:33:10.655Z 70693159-7e94-4102-a2af-98a6343fb8fb INFO {"_aws":{"Timestamp":1661938390655,"CloudWatchMetrics":[{"Namespace":"sam-app","Dimensions":[["service"]],"Metrics":[]}]},"service":"helloWorld"} 2023/01/31/[$LATEST]4d53e8d279824834a1ccd35511a4949c 2022-08-31T09:33:10.754000 END RequestId: 70693159-7e94-4102-a2af-98a6343fb8fb 2023/01/31/[$LATEST]4d53e8d279824834a1ccd35511a4949c 2022-08-31T09:33:10.754000 REPORT RequestId: 70693159-7e94-4102-a2af-98a6343fb8fb Duration: 201.55 ms Billed Duration: 202 ms Memory Size: 128 MB Max Memory Used: 66 MB Init Duration: 252.42 ms XRAY TraceId: 1-630f2ad5-1de22b6d29a658a466e7ecf5 SegmentId: 567c116658fbf11a Sampled: true
-
Ini adalah titik akhir API publik yang dapat diakses melalui internet. Kami menyarankan Anda menghapus titik akhir setelah pengujian.
sam delete
Mengelola retensi log
Grup log tidak terhapus secara otomatis ketika Anda menghapus suatu fungsi. Untuk menghindari penyimpanan log tanpa batas waktu, hapus grup log, atau konfigurasikan periode retensi setelah itu secara CloudWatch otomatis menghapus log. Untuk mengatur penyimpanan log, tambahkan yang berikut ini ke AWS SAM templat Anda:
Resources: HelloWorldFunction: Type: AWS::Serverless::Function Properties: # Omitting other properties LogGroup: Type: AWS::Logs::LogGroup Properties: LogGroupName: !Sub "/aws/lambda/${HelloWorldFunction}" RetentionInDays: 7
Menggunakan Powertools for AWS Lambda (TypeScript) dan AWS CDK untuk logging terstruktur
Ikuti langkah-langkah di bawah ini untuk mengunduh, membangun, dan menyebarkan contoh TypeScript aplikasi Hello World dengan modul Powertools for AWS Lambda (TypeScript)hello world
pesan.
Prasyarat
Untuk menyelesaikan langkah-langkah di bagian ini, Anda harus memiliki hal-hal berikut:
-
Node.js 18.x atau yang lebih baru
-
AWS SAM CLI versi 1.75 atau yang lebih baru. Jika Anda memiliki versi CLI yang lebih lama, lihat Memutakhirkan AWS SAM CLI. AWS SAM
Menyebarkan aplikasi sampel AWS CDK
-
Buat direktori proyek untuk aplikasi baru Anda.
mkdir hello-world cd hello-world
-
Inisialisasi aplikasi.
cdk init app --language typescript
-
Tambahkan paket @types /aws-lambda
sebagai dependensi pengembangan. npm install -D @types/aws-lambda
-
Instal utilitas Powertools Logger
. npm install @aws-lambda-powertools/logger
-
Buka direktori lib. Anda akan melihat file bernama hello-world-stack.ts. Buat dua file baru di direktori ini: hello-world.function.ts dan hello-world.ts.
-
Buka hello-world.function.ts dan tambahkan kode berikut ke file. Ini adalah kode untuk fungsi Lambda.
import { APIGatewayEvent, APIGatewayProxyResult, Context } from 'aws-lambda'; import { Logger } from '@aws-lambda-powertools/logger'; const logger = new Logger(); export const handler = async (event: APIGatewayEvent, context: Context): Promise<APIGatewayProxyResult> => { logger.info('This is an INFO log - sending HTTP 200 - hello world response'); return { statusCode: 200, body: JSON.stringify({ message: 'hello world', }), }; };
-
Buka hello-world.ts dan tambahkan kode berikut ke file. Ini berisi NodejsFunction konstruksi, yang membuat fungsi Lambda, mengonfigurasi variabel lingkungan untuk Powertools, dan menetapkan retensi log menjadi satu minggu. Ini juga mencakup LambdaRestApi konstruksi, yang menciptakan REST API.
import { Construct } from 'constructs'; import { NodejsFunction } from 'aws-cdk-lib/aws-lambda-nodejs'; import { LambdaRestApi } from 'aws-cdk-lib/aws-apigateway'; import { RetentionDays } from 'aws-cdk-lib/aws-logs'; import { CfnOutput } from 'aws-cdk-lib'; export class HelloWorld extends Construct { constructor(scope: Construct, id: string) { super(scope, id); const helloFunction = new NodejsFunction(this, 'function', { environment: { Powertools_SERVICE_NAME: 'helloWorld', LOG_LEVEL: 'INFO', }, logRetention: RetentionDays.ONE_WEEK, }); const api = new LambdaRestApi(this, 'apigw', { handler: helloFunction, }); new CfnOutput(this, 'apiUrl', { exportName: 'apiUrl', value: api.url, }); } }
-
Buka hello-world-stack.ts. Ini adalah kode yang mendefinisikan AWS CDK tumpukan Anda. Ganti kode dengan yang berikut ini:
import { Stack, StackProps } from 'aws-cdk-lib'; import { Construct } from 'constructs'; import { HelloWorld } from './hello-world'; export class HelloWorldStack extends Stack { constructor(scope: Construct, id: string, props?: StackProps) { super(scope, id, props); new HelloWorld(this, 'hello-world'); } }
-
Kembali ke direktori proyek.
cd hello-world
-
Men-deploy aplikasi Anda.
cdk deploy
-
Dapatkan URL aplikasi yang digunakan:
aws cloudformation describe-stacks --stack-name HelloWorldStack --query 'Stacks[0].Outputs[?ExportName==`apiUrl`].OutputValue' --output text
-
Memanggil titik akhir API:
curl
<URL_FROM_PREVIOUS_STEP>
Jika berhasil, Anda akan melihat tanggapan ini:
{"message":"hello world"}
-
Untuk mendapatkan log untuk fungsi tersebut, jalankan log sam. Untuk informasi selengkapnya, lihat Bekerja dengan log di Panduan AWS Serverless Application Model Pengembang.
sam logs --stack-name HelloWorldStack
Output log terlihat seperti ini:
2023/01/31/[$LATEST]2ca67f180dcd4d3e88b5d68576740c8e 2022-08-31T14:48:37.047000 START RequestId: 19ad1007-ff67-40ce-9afe-0af0a9eb512c Version: $LATEST 2023/01/31/[$LATEST]2ca67f180dcd4d3e88b5d68576740c8e 2022-08-31T14:48:37.050000 { "level": "INFO", "message": "This is an INFO log - sending HTTP 200 - hello world response", "service": "helloWorld", "timestamp": "2022-08-31T14:48:37.048Z", "xray_trace_id": "1-630f74c4-2b080cf77680a04f2362bcf2" } 2023/01/31/[$LATEST]2ca67f180dcd4d3e88b5d68576740c8e 2022-08-31T14:48:37.082000 END RequestId: 19ad1007-ff67-40ce-9afe-0af0a9eb512c 2023/01/31/[$LATEST]2ca67f180dcd4d3e88b5d68576740c8e 2022-08-31T14:48:37.082000 REPORT RequestId: 19ad1007-ff67-40ce-9afe-0af0a9eb512c Duration: 34.60 ms Billed Duration: 35 ms Memory Size: 128 MB Max Memory Used: 57 MB Init Duration: 173.48 ms
-
Ini adalah titik akhir API publik yang dapat diakses melalui internet. Kami menyarankan Anda menghapus titik akhir setelah pengujian.
cdk destroy
Melihat log di konsol Lambda
Anda dapat menggunakan konsol Lambda untuk melihat output log setelah Anda memanggil fungsi Lambda.
Jika kode Anda dapat diuji dari editor Kode tertanam, Anda akan menemukan log dalam hasil eksekusi. Saat Anda menggunakan fitur pengujian konsol untuk menjalankan fungsi, Anda akan menemukan Keluaran Log di bagian Detail.
Melihat log di CloudWatch konsol
Anda dapat menggunakan CloudWatch konsol Amazon untuk melihat log untuk semua pemanggilan fungsi Lambda.
Untuk melihat log di CloudWatch konsol
-
Buka halaman Grup log
di CloudWatch konsol. -
Pilih grup log untuk fungsi Anda (/aws/lambda/
your-function-name
). -
Pilih pengaliran log.
Setiap aliran log sesuai dengan instans fungsi Anda. Pengaliran log muncul saat Anda memperbarui fungsi Lambda dan saat instans tambahan dibuat untuk menangani beberapa invokasi bersamaan. Untuk menemukan log untuk pemanggilan tertentu, kami sarankan untuk menginstrumentasi fungsi Anda dengan. AWS X-Ray X-Ray mencatat detail tentang permintaan dan pengaliran log di jejak.