slog Go. Untuk bereksperimen dengan instrumentasi ini, Anda dapat mendownload dan menjalankan aplikasi Go contoh, yang menghasilkan data log, metrik, dan trace, serta mengekspornya ke projectGoogle Cloud Anda.
Tentang pendekatan instrumentasi
Saat menggunakan kolektor OpenTelemetry, Anda menginstrumentasi aplikasi dengan SDK dan pengekspor dalam proses OTLP SDK. Instrumentasi ini bersifat netral terhadap vendor. Anda juga men-deploy kolektor OpenTelemetry yang menerima telemetri dari pengekspor dalam proses, lalu mengekspor telemetri tersebut ke project Google Cloud Anda. Untuk mempelajari lebih lanjut kolektor, lihat Kolektor OpenTelemetry Buatan Google.
Sebaiknya gunakan kolektor OpenTelemetry untuk mengekspor data telemetri Anda jika lingkungan Anda mendukung penggunaan kolektor. Untuk beberapa lingkungan, Anda harus menggunakan pengekspor dalam proses yang langsung mengirim data ke projectGoogle Cloud Anda. Untuk mempelajari instrumentasi dalam proses, lihat Bermigrasi dari pengekspor Trace ke endpoint OTLP.
Untuk mempelajari instrumentasi lebih lanjut, 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 span aktif saat ini sehingga dapat diubah atau direferensikan sebagai induk dari span baru saat dibuat. Ringkasnya:
Konteks mengacu pada mekanisme untuk menyebarkan nilai cakupan eksekusi, termasuk span aktif saat ini, di seluruh API dalam suatu proses.
Span Context adalah objek yang tidak dapat diubah pada setiap span yang mencakup ID trace, ID span, serta flag dan status untuk trace.
Penerapan adalah mekanisme yang memindahkan konteks antara layanan dan proses.
context.Context library standar Go juga membawa nilai tercakup di seluruh batas API. Biasanya, fungsi pengendali di server menerima
Context yang masuk dan meneruskannya melalui rantai panggilan ke
klien mana pun yang membuat permintaan keluar.
Library standar Go context.Context digunakan sebagai implementasi
Konteks OpenTelemetry di Go.
Sebelum memulai
- Login ke akun Google Cloud Anda. Jika Anda baru menggunakan Google Cloud, buat akun untuk mengevaluasi performa produk kami dalam skenario dunia nyata. Pelanggan baru juga mendapatkan kredit gratis senilai $300 untuk menjalankan, menguji, dan men-deploy workload.
-
Instal 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 -
Buat atau pilih project Google Cloud .
Peran yang diperlukan untuk memilih atau membuat project
- Memilih project: Memilih project tidak memerlukan peran IAM tertentu—Anda dapat memilih project apa pun yang perannya telah diberikan kepada Anda.
-
Membuat project: Untuk membuat project, Anda memerlukan peran Project Creator
(
roles/resourcemanager.projectCreator), yang berisi izinresourcemanager.projects.create. Pelajari cara memberikan peran.
-
Buat project Google Cloud :
gcloud projects create PROJECT_ID
Ganti
PROJECT_IDdengan nama untuk Google Cloud project yang Anda buat. -
Pilih project Google Cloud yang Anda buat:
gcloud config set project PROJECT_ID
Ganti
PROJECT_IDdengan nama project Google Cloud Anda.
-
Pastikan penagihan diaktifkan untuk project Google Cloud Anda.
Aktifkan Cloud Logging, Cloud Monitoring, Cloud Trace, dan Telemetry API, jika belum diaktifkan:
Peran yang diperlukan untuk mengaktifkan API
Untuk mengaktifkan API, Anda memerlukan izin
serviceusage.services.enable. Jika Anda membuat project, kemungkinan Anda sudah memiliki izin ini melalui peran Pemilik (roles/owner). Jika tidak, Anda bisa mendapatkan izin ini melalui peran Service Usage Admin (roles/serviceusage.serviceUsageAdmin). Pelajari cara memberikan peran.gcloud services enable logging.googleapis.com
monitoring.googleapis.com cloudtrace.googleapis.com telemetry.googleapis.com -
Instal 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 -
Buat atau pilih project Google Cloud .
Peran yang diperlukan untuk memilih atau membuat project
- Memilih project: Memilih project tidak memerlukan peran IAM tertentu—Anda dapat memilih project apa pun yang perannya telah diberikan kepada Anda.
-
Membuat project: Untuk membuat project, Anda memerlukan peran Project Creator
(
roles/resourcemanager.projectCreator), yang berisi izinresourcemanager.projects.create. Pelajari cara memberikan peran.
-
Buat project Google Cloud :
gcloud projects create PROJECT_ID
Ganti
PROJECT_IDdengan nama untuk Google Cloud project yang Anda buat. -
Pilih project Google Cloud yang Anda buat:
gcloud config set project PROJECT_ID
Ganti
PROJECT_IDdengan nama project Google Cloud Anda.
-
Pastikan penagihan diaktifkan untuk project Google Cloud Anda.
Aktifkan Cloud Logging, Cloud Monitoring, Cloud Trace, dan Telemetry API, jika belum diaktifkan:
Peran yang diperlukan untuk mengaktifkan API
Untuk mengaktifkan API, Anda memerlukan izin
serviceusage.services.enable. Jika Anda membuat project, kemungkinan Anda sudah memiliki izin ini melalui peran Pemilik (roles/owner). Jika tidak, Anda bisa mendapatkan izin ini melalui peran Service Usage Admin (roles/serviceusage.serviceUsageAdmin). Pelajari cara memberikan peran.gcloud services enable logging.googleapis.com
monitoring.googleapis.com cloudtrace.googleapis.com telemetry.googleapis.com -
Untuk mendapatkan izin yang Anda perlukan agar aplikasi contoh dapat menulis data log, metrik, dan trace, minta administrator untuk memberi Anda peran IAM berikut:
- Logs Writer (
roles/logging.logWriter) di project Anda - Monitoring Metric Writer (
roles/monitoring.metricWriter) di project Anda - Cloud Telemetry Traces Writer (
roles/telemetry.tracesWriter) di project Anda - Service Usage Consumer (
roles/serviceusage.serviceUsageConsumer) di project kuota Anda
Izin ini sudah cukup jika Anda menjalankan contoh di Cloud Shell, di resource Google Cloud , atau di lingkungan pengembangan lokal. Untuk mempelajari cara mengonfigurasi project kuota, lihat Menetapkan project kuota.
Untuk mendapatkan izin yang Anda perlukan untuk melihat data log, metrik, dan trace, minta administrator untuk memberi Anda peran IAM berikut pada project Anda:
- Logs Viewer (
roles/logging.viewer) - Monitoring Viewer (
roles/monitoring.viewer) - Cloud Trace User (
roles/cloudtrace.user)
Untuk mengetahui informasi selengkapnya tentang pemberian peran, lihat Mengelola akses ke project, folder, dan organisasi.
Anda mungkin juga bisa mendapatkan izin yang diperlukan melalui peran khusus atau peran bawaan lainnya.
- Logs Writer (
Melengkapi aplikasi Anda untuk mengumpulkan trace, metrik, dan log
Untuk melengkapi aplikasi Anda agar dapat mengumpulkan data trace dan metrik serta menulis log JSON terstruktur ke output standar, lakukan langkah-langkah berikut seperti yang dijelaskan di bagian berikutnya dalam dokumen ini:
- Mengonfigurasi fungsi utama
- Mengonfigurasi OpenTelemetry
- Mengonfigurasi logging terstruktur
- Menambahkan instrumentasi ke server HTTP
- Menautkan span trace 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 mengilustrasikan fungsi main yang memanggil dua fungsi bantuan, setupLogging() dan setupOpenTelemetry(). Fungsi bantuan ini mengonfigurasi paket logging dan OpenTelemetry.
Untuk melihat contoh lengkap, di toolbar contoh, pilih logo GitHub.
Setelah mengonfigurasi paket logging, untuk menautkan log ke data trace, 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, konfigurasikan instance TracerProvider
dan MeterProvider global.
Contoh kode berikut mengilustrasikan fungsi setupOpenTelemetry,
yang dipanggil dari fungsi main:
Contoh kode sebelumnya mengonfigurasi TextMapPropagator global untuk menggunakan format W3C Trace Context untuk menyebarkan konteks trace. Konfigurasi ini memastikan bahwa span memiliki
hubungan induk-turunan yang benar dalam trace.
Untuk memastikan bahwa semua telemetri yang tertunda dihapus dan koneksi ditutup
dengan baik, fungsi setupOpenTelemetry menampilkan fungsi bernama
shutdown, yang melakukan tindakan tersebut.
Mengonfigurasi logging terstruktur
Untuk menyertakan informasi trace sebagai bagian dari log berformat JSON yang ditulis ke output standar, konfigurasikan paket logging terstruktur Go, slog.
Contoh kode berikut mengilustrasikan fungsi setupLogging,
yang dipanggil dari fungsi main:
Kode sebelumnya memanggil fungsi handlerWithSpanContext, yang mengekstrak
informasi dari instance Context dan menambahkan informasi tersebut sebagai atribut
ke log. Atribut ini kemudian dapat digunakan untuk menghubungkan log dengan trace:
logging.googleapis.com/trace: Nama resource trace yang terkait dengan entri log.logging.googleapis.com/spanId: ID span dalam trace yang terkait dengan entri log.logging.googleapis.com/trace_sampled: Nilai kolom ini harus berupatrueataufalse.
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 pengendali otelhttp
untuk menyebarkan konteks dan mengumpulkan data trace dan metrik:
Dalam kode sebelumnya, pengendali otelhttp menggunakan instance TracerProvider, MeterProvider, dan TextMapPropagator global. Fungsi
setupOpenTelemetry mengonfigurasi instance ini.
Menautkan span trace dengan log dan metrik
Untuk menautkan span server dan klien serta mengaitkan metrik dan log, teruskan instance Context Go ke permintaan HTTP dan ke logger.
Contoh berikut mengilustrasikan pengendali rute yang mengekstrak instance Context Go, lalu meneruskan instance tersebut ke logger dan ke fungsi callSingle, yang membuat permintaan HTTP keluar:
Dalam kode sebelumnya, panggilan fungsi r.Context() mengambil Context Go dari permintaan HTTP.
Menambahkan instrumentasi ke klien HTTP
Untuk memasukkan konteks trace ke dalam permintaan HTTP keluar dan menambahkan
instrumentasi trace dan metrik, konfigurasikan http.Client dengan
otelhttp.NewTransport dan teruskan konteks permintaan dengan memanggil
http.NewRequestWithContext. Dalam contoh berikut, fungsi callSingle
melakukan tindakan ini:
Dalam kode sebelumnya, transportasi otelhttp menggunakan instance TracerProvider, MeterProvider, dan TextMapPropagator global. Fungsi
setupOpenTelemetry mengonfigurasi instance ini.
Menulis log terstruktur
Untuk menulis log terstruktur yang ditautkan ke trace, gunakan paket logging terstruktur Go, slog, dan teruskan instance Context Go ke logger.
Instance Context Go diperlukan saat Anda ingin menautkan log ke span.
Misalnya, pernyataan berikut menunjukkan cara memanggil metode InfoContext
untuk slog, dan mengilustrasikan cara menambahkan kolom subRequests
ke instance JSON:
slog.InfoContext(r.Context(), "handle /multi request", slog.Int("subRequests", subRequests))
Menjalankan aplikasi contoh yang dikonfigurasi untuk mengumpulkan telemetri
Instrumentasi dalam aplikasi contoh menggunakan format yang tidak bergantung pada vendor, seperti JSON
untuk data log dan OTLP untuk data metrik dan trace. Collector OpenTelemetry mengirimkan data log, metrik, dan trace ke project Anda menggunakan Telemetry API, yang menggunakan OTLP. Generator beban di aplikasi mengeluarkan permintaan ke rute aplikasi.
Mendownload dan men-deploy aplikasi
Untuk menjalankan contoh, lakukan hal berikut:
-
Di konsol Google Cloud , aktifkan Cloud Shell.
Di bagian bawah konsol Google Cloud , sesi Cloud Shell akan dimulai dan menampilkan prompt command line. Cloud Shell adalah lingkungan shell dengan Google Cloud CLI yang sudah terinstal, dan dengan nilai yang sudah ditetapkan untuk project Anda saat ini. Diperlukan waktu beberapa detik untuk melakukan inisialisasi pada sesi.
Buat clone repositori:
git clone https://github.com/GoogleCloudPlatform/golang-samplesBuka direktori OpenTelemetry:
cd golang-samples/opentelemetry/instrumentationBangun dan jalankan contoh:
docker compose up --abort-on-container-exitJika Anda tidak menjalankannya di Cloud Shell, jalankan aplikasi dengan variabel lingkungan
GOOGLE_APPLICATION_CREDENTIALSyang 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
Melihat metrik Anda
Instrumentasi OpenTelemetry di aplikasi contoh menghasilkan metrik Prometheus yang dapat Anda lihat menggunakan Metrics Explorer:
Prometheus/http_server_duration_milliseconds/histogrammencatat durasi permintaan server dan menyimpan hasilnya dalam histogram.Prometheus/http_client_duration_milliseconds/histogrammencatat durasi permintaan klien dan menyimpan hasilnya dalam histogram.Prometheus/http_server_response_size_bytes_total/countermencatat panjang ukuran respons untuk rute HTTP/multidan/single. Pengukuran untuk metrik ini bersifat kumulatif, yang berarti setiap nilai mewakili total sejak pengumpulan nilai dimulai.
-
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 khusus aplikasi.
- Pada elemen Metrik, luaskan menu Pilih metrik, masukkan
http_serverdi 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 Active metrics, 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 penyelarasan, 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 rute HTTP/multidan/single, tetapkan menu pertama entri Aggregation ke None.Untuk informasi selengkapnya tentang cara mengonfigurasi diagram, lihat Memilih metrik saat menggunakan Metrics Explorer.
Melihat trace Anda
Mungkin perlu waktu beberapa menit sebelum data trace Anda tersedia. Misalnya, saat data trace 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 trace yang tersedia untuk dilihat.
Untuk melihat data trace, lakukan hal berikut:
-
Di konsol Google Cloud , buka halaman
Trace explorer:
Anda juga dapat menemukan halaman ini menggunakan kotak penelusuran.
- Di bagian tabel halaman, pilih baris dengan nama span
/multi. Di diagram Gantt pada panel Trace details, pilih span berlabel
/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 trace ini, pilih tab Logs & Events.
Tab ini menampilkan setiap log. Untuk melihat detail entri log, luaskan entri log. Anda juga dapat mengklik View Logs dan melihat log menggunakan Logs Explorer.
Untuk mengetahui informasi selengkapnya tentang cara menggunakan halaman Trace Explorer, lihat Menemukan dan menjelajahi trace.
Melihat log
Dari Logs Explorer, Anda dapat memeriksa log, dan juga dapat melihat trace terkait jika ada.
-
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 trace yang dipilih.
Data log Anda mungkin tersedia beberapa menit sebelum data trace Anda tersedia. Jika Anda mengalami error saat melihat data trace, baik dengan menelusuri trace berdasarkan ID atau dengan mengikuti langkah-langkah dalam tugas ini, tunggu satu atau dua menit, lalu coba lagi tindakan tersebut.
Untuk mengetahui informasi selengkapnya tentang cara menggunakan Logs Explorer, lihat Melihat log menggunakan Logs Explorer.
Langkah berikutnya
- OpenTelemetry
- Spesifikasi OTLP
- Logging terstruktur
- Memecahkan masalah Managed Service for Prometheus
- Memecahkan masalah Cloud Trace