Dokumen ini menjelaskan cara mengubah aplikasi Go untuk mengumpulkan data trace dan metrik menggunakan framework OpenTelemetry open source, dan cara menulis log JSON terstruktur ke output standar. Dokumen ini juga memberikan informasi tentang aplikasi contoh yang dapat Anda instal dan jalankan. Aplikasi dikonfigurasi untuk menghasilkan metrik, rekaman aktivitas, dan log.
Untuk mempelajari lebih lanjut instrumentasi, lihat dokumen berikut:
Tentang konteks
Context OpenTelemetry adalah mekanisme untuk membawa nilai cakupan eksekusi di seluruh API dalam suatu proses. Penggunaan konteks yang penting adalah untuk membawa rentang aktif saat ini sehingga dapat diubah, atau dirujuk sebagai induk dari rentang baru saat dibuat. Ringkasnya:
Konteks mengacu pada mekanisme untuk menyebarkan nilai cakupan eksekusi, termasuk rentang aktif saat ini, di seluruh API dalam suatu proses.
Span Context adalah objek yang tidak dapat diubah di setiap rentang yang mencakup ID aktivitas, ID rentang, serta flag dan status untuk aktivitas.
Penerapan adalah mekanisme yang memindahkan konteks antar-layanan dan proses.
context.Context
library standar Go juga membawa nilai
yang tercakup di seluruh batas API. Biasanya, fungsi handler di server menerima
Context
masuk dan meneruskannya melalui rantai panggilan ke
klien yang membuat permintaan keluar.
Library standar Go context.Context
digunakan sebagai implementasi
Konteks OpenTelemetry di Go.
Sebelum memulai
- 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.
-
Install the Google Cloud CLI.
-
Jika Anda menggunakan penyedia identitas (IdP) eksternal, Anda harus login ke gcloud CLI dengan identitas gabungan Anda terlebih dahulu.
-
Untuk melakukan inisialisasi gcloud CLI, jalankan perintah berikut:
gcloud init
-
Create or select a Google Cloud project.
-
Create a Google Cloud project:
gcloud projects create PROJECT_ID
Replace
PROJECT_ID
with a name for the Google Cloud project you are creating. -
Select the Google Cloud project that you created:
gcloud config set project PROJECT_ID
Replace
PROJECT_ID
with your Google Cloud project name.
-
-
Verify that billing is enabled for your Google Cloud project.
-
Enable the Cloud Logging, Cloud Monitoring, and Cloud Trace APIs:
gcloud services enable logging.googleapis.com
monitoring.googleapis.com cloudtrace.googleapis.com -
Install the Google Cloud CLI.
-
Jika Anda menggunakan penyedia identitas (IdP) eksternal, Anda harus login ke gcloud CLI dengan identitas gabungan Anda terlebih dahulu.
-
Untuk melakukan inisialisasi gcloud CLI, jalankan perintah berikut:
gcloud init
-
Create or select a Google Cloud project.
-
Create a Google Cloud project:
gcloud projects create PROJECT_ID
Replace
PROJECT_ID
with a name for the Google Cloud project you are creating. -
Select the Google Cloud project that you created:
gcloud config set project PROJECT_ID
Replace
PROJECT_ID
with your Google Cloud project name.
-
-
Verify that billing is enabled for your Google Cloud project.
-
Enable the Cloud Logging, Cloud Monitoring, and Cloud Trace APIs:
gcloud services enable logging.googleapis.com
monitoring.googleapis.com cloudtrace.googleapis.com Jika Anda menjalankan sampel di Cloud Shell, di Google Cloud resource, atau di lingkungan pengembangan lokal, izin yang tercantum di bagian ini sudah cukup. Untuk aplikasi produksi, biasanya akun layanan menyediakan kredensial untuk menulis data log, metrik, dan trace.
Untuk mendapatkan izin yang Anda perlukan agar aplikasi contoh dapat menulis data log, metrik, dan rekaman aktivitas, minta administrator Anda untuk memberi Anda peran IAM berikut di project Anda:
-
Logs Writer (
roles/logging.logWriter
) -
Monitoring Metric Writer (
roles/monitoring.metricWriter
) -
Cloud Trace Agent (
roles/cloudtrace.agent
)
Untuk mendapatkan izin yang Anda perlukan guna melihat data log, metrik, dan rekaman aktivitas, minta administrator Anda untuk memberi Anda peran IAM berikut di project Anda:
-
Logs Viewer (
roles/logging.viewer
) -
Monitoring Viewer (
roles/monitoring.viewer
) -
Cloud Trace User (
roles/cloudtrace.user
)
Untuk mengetahui informasi selengkapnya tentang cara memberikan peran, lihat Mengelola akses ke project, folder, dan organisasi.
Anda mungkin juga bisa mendapatkan izin yang diperlukan melalui peran kustom atau peran yang telah ditentukan lainnya.
Melengkapi aplikasi Anda untuk mengumpulkan rekaman aktivitas, metrik, dan log
Untuk menginstrumentasi aplikasi Anda guna mengumpulkan data rekaman aktivitas dan metrik, serta menulis JSON terstruktur ke output standar, lakukan langkah-langkah berikut seperti yang dijelaskan di bagian selanjutnya dalam dokumen ini:
- Mengonfigurasi fungsi utama
- Mengonfigurasi OpenTelemetry
- Mengonfigurasi logging terstruktur
- Menambahkan instrumentasi ke server HTTP
- Menautkan rentang rekaman aktivitas dengan log dan metrik
- Menambahkan instrumentasi ke klien HTTP
- Menulis log terstruktur
Mengonfigurasi fungsi utama
Untuk mengonfigurasi aplikasi agar menulis log terstruktur dan mengumpulkan metrik serta data trace menggunakan OpenTelemetry, perbarui fungsi
main
untuk mengonfigurasi paket logging terstruktur Go,slog
, dan untuk mengonfigurasi OpenTelemetry.Contoh kode berikut menggambarkan fungsi
main
yang memanggil dua fungsi pembantu,setupLogging()
dansetupOpenTelemetry()
. Fungsi pembantu ini mengonfigurasi paket logging dan OpenTelemetry.Untuk melihat contoh lengkapnya, klik more_vert Lainnya, lalu pilih Lihat di GitHub.
Setelah mengonfigurasi paket logging, untuk menautkan log ke data rekaman aktivitas, Anda harus meneruskan
Context
Go ke logger. Untuk mengetahui informasi selengkapnya, lihat bagian Menulis log terstruktur dalam dokumen ini.Mengonfigurasi OpenTelemetry
Untuk mengumpulkan dan mengekspor trace dan metrik menggunakan protokol OTLP, konfigurasi instance
TracerProvider
danMeterProvider
global. Contoh kode berikut mengilustrasikan fungsisetupOpenTelemetry
, yang dipanggil dari fungsimain
:Contoh kode sebelumnya mengonfigurasi
TextMapPropagator
global untuk menggunakan format Konteks Trace W3C untuk mempropagasi konteks trace. Konfigurasi ini memastikan bahwa rentang memiliki hubungan induk-turunan yang benar dalam rekaman aktivitas.Untuk memastikan semua telemetri yang tertunda dibersihkan dan koneksi ditutup dengan baik, fungsi
setupOpenTelemetry
menampilkan fungsi bernamashutdown
, yang melakukan tindakan tersebut.Mengonfigurasi logging terstruktur
Untuk menyertakan informasi rekaman aktivitas sebagai bagian dari log berformat JSON yang ditulis ke output standar, konfigurasi paket logging terstruktur Go,
slog
. Contoh kode berikut mengilustrasikan fungsisetupLogging
, yang dipanggil dari fungsimain
:Kode sebelumnya memanggil fungsi
handlerWithSpanContext
, yang mengekstrak informasi dari instanceContext
dan menambahkan informasi tersebut sebagai atribut ke log. Atribut ini kemudian dapat digunakan untuk mengorelasikan log dengan rekaman aktivitas:logging.googleapis.com/trace
: Nama resource rekaman aktivitas yang terkait dengan entri log.logging.googleapis.com/spanId
: ID rentang dengan rekaman aktivitas yang terkait dengan entri log.logging.googleapis.com/trace_sampled
: Nilai kolom ini harustrue
ataufalse
.
Untuk mengetahui informasi selengkapnya tentang kolom ini, lihat struktur
LogEntry
.Menambahkan instrumentasi ke server HTTP
Untuk menambahkan instrumentasi trace dan metrik ke permintaan yang ditangani oleh server HTTP, gunakan OpenTelemetry. Contoh berikut menggunakan handler
otelhttp
untuk menyebarkan konteks, serta untuk instrumentasi metrik dan rekaman aktivitas:Dalam kode sebelumnya, pengendali
otelhttp
menggunakan instanceTracerProvider
,MeterProvider
, danTextMapPropagator
global. FungsisetupOpenTelemetry
mengonfigurasi instance ini.Menautkan rentang rekaman aktivitas dengan log dan metrik
Untuk menautkan rentang server dan klien, serta mengaitkan metrik dan log, teruskan instance
Context
Go ke permintaan HTTP dan saat Anda menulis log. Contoh berikut menggambarkan pengendali rute yang mengekstrak instanceContext
Go dan meneruskan instance tersebut ke logger dan ke fungsicallSingle
, yang membuat permintaan HTTP keluar:Dalam kode sebelumnya, panggilan fungsi
r.Context()
mengambilContext
Go dari permintaan HTTP.Menambahkan instrumentasi ke klien HTTP
Untuk menyuntikkan konteks rekaman aktivitas ke permintaan HTTP keluar dan menambahkan instrumentasi rekaman aktivitas dan metrik, panggil fungsi
otelhttp.Get
. Pada contoh berikut, fungsicallSingle
melakukan tindakan ini:Dalam kode sebelumnya, pengendali
otelhttp
menggunakan instanceTracerProvider
,MeterProvider
, danTextMapPropagator
global. FungsisetupOpenTelemetry
mengonfigurasi instance ini.Menulis log terstruktur
Untuk menulis log terstruktur yang ditautkan ke rekaman aktivitas, gunakan paket logging terstruktur Go,
slog
, dan teruskan instanceContext
Go ke logger. Instance GoContext
diperlukan saat Anda ingin menautkan log ke rentang. Misalnya, pernyataan berikut menunjukkan cara memanggil metodeInfoContext
untukslog
, dan mengilustrasikan cara menambahkan kolomsubRequests
ke instance JSON:slog.InfoContext(r.Context(), "handle /multi request", slog.Int("subRequests", subRequests))
Menjalankan aplikasi contoh yang dikonfigurasi untuk mengumpulkan telemetri
Aplikasi contoh menggunakan format netral vendor, termasuk JSON untuk log dan OTLP untuk metrik dan rekaman aktivitas. Untuk merutekan telemetri ke Google Cloud, contoh ini menggunakan
Collector
OpenTelemetry yang dikonfigurasi dengan eksportir Google. Generator beban di aplikasi mengeluarkan permintaan ke rute aplikasi.Mendownload dan men-deploy aplikasi
Untuk menjalankan contoh, lakukan hal berikut:
-
In the Google Cloud console, activate Cloud Shell.
At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.
Meng-cloning repository
git clone https://github.com/GoogleCloudPlatform/golang-samples
Buka direktori OpenTelemetry:
cd golang-samples/opentelemetry/instrumentation
Buat dan jalankan sampel:
docker compose up --abort-on-container-exit
Jika Anda tidak menjalankan di Cloud Shell, jalankan aplikasi dengan variabel lingkungan
GOOGLE_APPLICATION_CREDENTIALS
yang mengarah ke file kredensial. Kredensial Default Aplikasi menyediakan file kredensial di$HOME/.config/gcloud/application_default_credentials.json
.# Set environment variables export GOOGLE_CLOUD_PROJECT="PROJECT_ID" export GOOGLE_APPLICATION_CREDENTIALS="$HOME/.config/gcloud/application_default_credentials.json" export USERID="$(id -u)" # Run docker compose -f docker-compose.yaml -f docker-compose.creds.yaml up --abort-on-container-exit
Prometheus/http_server_duration/histogram
mencatat durasi permintaan server dan menyimpan hasilnya dalam histogram.Prometheus/http_server_request_content_length_total/counter
mencatat panjang konten permintaan untuk rute HTTP/multi
dan/single
. Pengukuran untuk metrik ini bersifat kumulatif, yang berarti bahwa setiap nilai mewakili total sejak pengumpulan nilai dimulai.Prometheus/http_server_response_content_length_total/counter
mencatat panjang konten respons untuk rute HTTP/multi
dan/single
. Pengukuran untuk metrik ini bersifat kumulatif.-
Di konsol Google Cloud , buka halaman leaderboard Metrics explorer:
Jika Anda menggunakan kotak penelusuran untuk menemukan halaman ini, pilih hasil yang subjudulnya adalah Monitoring.
- Di toolbar konsol Google Cloud , pilih project Google Cloud Anda. Untuk konfigurasi App Hub, pilih project host App Hub atau project pengelolaan folder yang mendukung aplikasi.
- Pada elemen Metrik, luaskan menu Pilih metrik, masukkan
http_server
di panel filter, lalu gunakan submenu untuk memilih jenis dan metrik resource tertentu:- Di menu Active resources, pilih Prometheus Target.
- Di menu Active metric categories, pilih Http.
- Di menu Metrik aktif, pilih metrik.
- Klik Terapkan.
Untuk menambahkan filter, yang menghapus deret waktu dari hasil kueri, gunakan elemen Filter.
- Konfigurasi cara data dilihat.
Jika pengukuran untuk metrik bersifat kumulatif, Metrics Explorer akan otomatis menormalisasi data yang diukur berdasarkan periode perataan, sehingga diagram menampilkan rasio. Untuk mengetahui informasi selengkapnya, lihat Jenis, tipe, dan konversi.
Saat nilai bilangan bulat atau ganda diukur, seperti dengan dua metrik
counter
, Metrics Explorer akan otomatis menjumlahkan semua deret waktu. Untuk melihat data untuk rute HTTP/multi
dan/single
, tetapkan menu pertama entri Aggregation ke None.Untuk informasi selengkapnya tentang cara mengonfigurasi diagram, lihat Memilih metrik saat menggunakan Metrics Explorer.
-
Di konsol Google Cloud , buka halaman Trace explorer:
Anda juga dapat menemukan halaman ini dengan menggunakan kotak penelusuran.
- Di bagian tabel halaman, pilih baris dengan nama rentang
/multi
. Pada diagram Gantt di panel Detail rekaman aktivitas, pilih rentang yang diberi label
/multi
.Panel yang menampilkan informasi tentang permintaan HTTP akan terbuka. Detail ini mencakup metode, kode status, jumlah byte, dan agen pengguna pemanggil.
Untuk melihat log yang terkait dengan rekaman aktivitas ini, pilih tab Logs & Events.
Tab ini menampilkan log individual. Untuk melihat detail entri log, luaskan entri log. Anda juga dapat mengklik Lihat Log dan melihat log menggunakan Logs Explorer.
-
Di konsol Google Cloud , buka halaman Logs Explorer:
Jika Anda menggunakan kotak penelusuran untuk menemukan halaman ini, pilih hasil yang subjudulnya adalah Logging.
Temukan log dengan deskripsi
handle /multi request
.Untuk melihat detail log, luaskan entri log. Di kolom
jsonPayload
, ada entri berlabelsubRequests
. Entri ini ditambahkan oleh pernyataan dalam fungsihandleMulti
.Klik
Traces pada entri log dengan pesan "handle /multi request", lalu pilih View trace details.
Panel Trace details akan terbuka dan menampilkan rekaman aktivitas yang dipilih.
Data log Anda mungkin tersedia beberapa menit sebelum data rekaman aktivitas Anda tersedia. Jika Anda mengalami error saat melihat data rekaman aktivitas baik dengan menelusuri rekaman aktivitas menurut ID atau dengan mengikuti langkah-langkah dalam tugas ini, tunggu satu atau dua menit, lalu coba lagi tindakan tersebut.
- OpenTelemetry
- Spesifikasi OTLP
- Logging terstruktur
- Memecahkan masalah Managed Service for Prometheus
- Memecahkan Masalah Cloud Trace
Melihat metrik Anda
Instrumentasi OpenTelemetry di aplikasi contoh menghasilkan metrik Prometheus yang dapat Anda lihat menggunakan Metrics Explorer:
Melihat trace Anda
Mungkin perlu waktu beberapa menit sebelum data rekaman aktivitas Anda tersedia. Misalnya, saat data rekaman aktivitas diterima oleh project Anda, Google Cloud Observability mungkin perlu membuat database untuk menyimpan data tersebut. Pembuatan database dapat memerlukan waktu beberapa menit dan selama periode tersebut, tidak ada data rekaman aktivitas yang tersedia untuk dilihat.
Untuk melihat data rekaman aktivitas, lakukan hal berikut:
Untuk mengetahui informasi selengkapnya tentang cara menggunakan penjelajah Cloud Trace, lihat Menemukan dan menjelajahi rekaman aktivitas.
Melihat log
Dari Logs Explorer, Anda dapat memeriksa log, dan Anda juga dapat melihat rekaman aktivitas terkait, jika ada.
Untuk mengetahui informasi selengkapnya tentang cara menggunakan Logs Explorer, lihat Melihat log menggunakan Logs Explorer.
Langkah berikutnya
-
Logs Writer (