Pemantauan Cloud dengan Datadog di Apache APISIX
API7.ai
November 12, 2021

Seiring dengan meningkatnya kompleksitas produk IT dan pengembangan aplikasi yang ditujukan untuk konsumen, pemantauan menjadi bagian integral dari setiap pengiriman aplikasi. Selain itu, untuk memenuhi tuntutan tak terbatas dari siklus peningkatan yang cepat sambil memastikan stabilitas, kinerja yang efisien, dan menjaga keseimbangan sempurna antara indikator tingkat layanan (SLI) dengan tujuan tingkat layanan (SLO) dan perjanjian tingkat layanan (SLA) - pemantauan yang efektif sangatlah penting.
Sebagai produk Manajemen API Cloud, Apache APISIX memisahkan masalah observabilitas dari aplikasi, yang memberikan keuntungan bagi pengembang untuk membangun aplikasi dengan fokus hanya pada logika bisnis sementara Apache APISIX akan mengurus observabilitas untuk platform pilihan mereka.
Apache APISIX baru-baru ini merilis plugin baru: APISIX-Datadog, untuk memberikan integrasi yang lebih dalam dengan Datadog. Artikel ini memperkenalkan Plugin APISIX-Datadog dan kemampuannya.
Cara kerja plugin APISIX-Datadog

Plugin APISIX-Datadog mengirimkan metrik kustomnya ke server DogStatsD, yang disertakan dengan agen Datadog melalui koneksi UDP. DogStatsD pada dasarnya adalah implementasi dari protokol StatsD. Ini mengumpulkan metrik kustom untuk agen Apache APISIX, menggabungkannya menjadi satu titik data dan mengirimkannya ke server Datadog yang dikonfigurasi. Untuk mempelajari lebih lanjut tentang DogStatsD, silakan kunjungi dokumentasi DogStatsD.
Ketika APISIX-Datadog diaktifkan, agen Apache APISIX mengekspor metrik berikut ke server DogStatsD untuk setiap siklus respons permintaan:
| Nama Metrik | Tipe StatsD | Deskripsi |
|---|---|---|
| Penghitung Permintaan | Counter | Jumlah permintaan yang diterima. |
| Latensi Permintaan | Histogram | Waktu yang dibutuhkan untuk memproses permintaan (dalam milidetik). |
| Latensi Upstream | Histogram | Waktu yang dibutuhkan sejak permintaan diproksi ke server upstream hingga respons diterima (dalam milidetik). |
| Latensi APISIX | Histogram | Waktu yang dibutuhkan oleh agen APISIX untuk memproses permintaan (dalam milidetik). |
| Ukuran Masuk | Timer | Ukuran badan permintaan dalam byte. |
| Ukuran Keluar | Timer | Ukuran badan respons dalam byte. |
Metrik akan dikirim ke agen DogStatsD dengan tag berikut. Jika tidak ada nilai yang sesuai untuk tag tertentu, tag tersebut akan dihilangkan.
| Nama Metrik | Deskripsi |
|---|---|
| nama_rute | Nama yang ditentukan dalam definisi skema rute. Jika tidak ada, akan kembali ke nilai id rute. |
| id_layanan | Jika rute telah dibuat dengan abstraksi layanan, id layanan tertentu akan digunakan. |
| konsumen | Jika rute memiliki konsumen yang terhubung, Nama Pengguna konsumen akan ditambahkan sebagai tag. |
| ip_penyeimbang | IP dari penyeimbang Upstream yang telah memproses permintaan saat ini. |
| status_respons | Kode status respons HTTP. |
| skema | Skema yang digunakan untuk membuat permintaan, seperti HTTP, gRPC, gRPCs, dll. |
Plugin mempertahankan buffer dengan timer. Ketika timer habis, plugin APISIX-Datadog mengirimkan metrik yang di-buffer sebagai batch ke server dogstatsd yang berjalan secara lokal. Pendekatan ini kurang memakan sumber daya (meskipun mungkin tidak signifikan karena soket UDP sangat ringan) dengan menggunakan kembali soket UDP yang sama dan tidak membebani jaringan sepanjang waktu karena timer dapat dikonfigurasi.
Langkah-langkah untuk Menjalankan Agen Datadog
- Jika Anda sudah menggunakan Datadog di dalam infrastruktur Anda, Anda pasti sudah memiliki agen datadog yang terinstal di sistem Anda. Ini bisa berupa kontainer docker, pod, atau biner untuk manajer paket tertentu. Dalam hal ini, Anda sudah siap. Pastikan port 8125/udp diizinkan melalui firewall (jika ada) yaitu lebih spesifik, agen Apache APISIX dapat mencapai port 8125 dari agen datadog. Anda dapat melewati subbagian ini.
Untuk mempelajari lebih lanjut tentang cara menginstal agen datadog yang lengkap, kunjungi di sini.
- Jika Anda baru mengenal Datadog
- Pertama, buat akun dengan mengunjungi www.datadoghq.com.
- Hasilkan Kunci API.

- Plugin APISIX-Datadog hanya memerlukan komponen dogstatsd dari
datadog/agentkarena plugin secara asinkron mengirim metrik ke server dogstatsd mengikuti protokol statsd melalui soket UDP standar. Itulah sebabnya APISIX merekomendasikan menggunakan gambardatadog/dogstatsdmandiri alih-alih menggunakan agen lengkap. Ini sangat ringan (hanya ~11 MB) dibandingkan dengan ~2.8GB dari gambardatadog/agent.
Untuk menjalankannya sebagai kontainer:
# tarik gambar terbaru docker pull datadog/dogstatsd:latest # jalankan kontainer terpisah docker run -d --name dogstatsd-agent -e DD_API_KEY=<Kunci API Anda dari langkah 2> -p 8125:8125/udp datadog/dogstatsd
Jika Anda menggunakan Kubernetes di lingkungan produksi, Anda dapat menyebarkan dogstatsd sebagai Daemonset atau sebagai Pod Multi-Kontainer bersama dengan agen Apache APISIX.
Cara Menggunakan Datadog dengan Apache APISIX
Mengaktifkan plugin APISIX-Datadog
Berikut adalah contoh cara mengaktifkan plugin datadog untuk rute tertentu. Kami mengasumsikan agen dogstatsd Anda sudah berjalan.
# aktifkan plugin untuk rute tertentu curl http://127.0.0.1:9080/apisix/admin/routes/1 -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d ' { "plugins": { "datadog": {} }, "upstream": { "type": "roundrobin", "nodes": { "127.0.0.1:1980": 1 } }, "uri": "/hello" }'
Sekarang, setiap permintaan ke endpoint uri /hello akan menghasilkan metrik di atas dan mengirimkannya ke server DogStatsD lokal dari agen datadog.
Konfigurasi Kustom
Dalam konfigurasi default, plugin mengharapkan layanan dogstatsd tersedia di 127.0.0.1:8125. Jika Anda ingin memperbarui konfigurasi, silakan perbarui metadata plugin:
Skema Metadata
| Nama | Tipe | Diperlukan | Default | Deskripsi |
|---|---|---|---|---|
| host | string | opsional | "127.0.0.1" | Alamat host server DogStatsD |
| port | integer | opsional | 8125 | Port host server DogStatsD |
| namespace | string | opsional | "apisix" | Awalan untuk semua metrik kustom yang dikirim oleh agen APISIX. Berguna untuk menemukan entitas untuk grafik metrik. misalnya (apisix.request.counter) |
| constant_tags | array | opsional | ["source"] | Tag statis yang disematkan ke metrik yang dihasilkan. Berguna untuk mengelompokkan metrik berdasarkan sinyal tertentu. |
Untuk mengetahui lebih lanjut tentang cara menulis tag secara efektif, silakan kunjungi di sini
Buat permintaan ke endpoint /apisix/admin/plugin_metadata dengan metadata yang diperbarui sebagai berikut:
curl http://127.0.0.1:9080/apisix/admin/plugin_metadata/datadog -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d ' { "host": "127.0.0.1", "port": 8125, "constant_tags": [ "source:apisix", "service:custom" ], "namespace": "apisix" }'
Skema Plugin
Demikian pula, ada beberapa atribut yang dapat disesuaikan saat mengaktifkan plugin.
| Nama | Tipe | Diperlukan | Default | Valid | Deskripsi |
|---|---|---|---|---|---|
| batch_max_size | integer | opsional | 5000 | [1,...] | Ukuran buffer maksimum setiap batch |
| inactive_timeout | integer | opsional | 5 | [1,...] | Usia maksimum dalam detik ketika buffer akan dikirim jika tidak aktif |
| buffer_duration | integer | opsional | 60 | [1,...] | Usia maksimum dalam detik dari entri tertua dalam batch sebelum batch harus diproses |
| max_retry_count | integer | opsional | 1 | [1,...] | Jumlah maksimum percobaan ulang jika satu entri gagal mencapai server dogstatsd |
Karena semua bidang bersifat opsional dan jika tidak ada atribut yang diatur, plugin datadog akan diinstansiasi dengan nilai default. Untuk memperbarui atribut apa pun, cukup perbarui rute, layanan, atau konsumen yang diperlukan dengan nilai atribut yang diperbarui. Misalnya, kode di bawah ini memodifikasi ukuran buffer maksimum setiap batch:
'{ ... "plugins": { "datadog": { "batch_max_size": 10 } } ... }'
Menonaktifkan plugin APISIX-Datadog
Sekarang, untuk menonaktifkan plugin, cukup hapus konfigurasi json yang sesuai dalam konfigurasi plugin untuk menonaktifkan datadog. Plugin APISIX dimuat ulang secara otomatis, sehingga tidak perlu me-restart APISIX.
# nonaktifkan plugin untuk rute curl http://127.0.0.1:9080/apisix/admin/routes/1 -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d ' { "uri": "/hello", "plugins": {}, "upstream": { "type": "roundrobin", "nodes": { "127.0.0.1:1980": 1 } } }'