Anda sedang melihat dokumentasi Apigee Edge.
Buka dokumentasi
Apigee X. info

Apa
Salah satu cara terbaik untuk melacak masalah di lingkungan runtime API adalah dengan mencatat pesan ke dalam log. Anda dapat melampirkan dan mengonfigurasi kebijakan MessageLogging di API untuk mencatat pesan kustom ke disk lokal (khusus Edge untuk Private Cloud) atau ke syslog.
Contoh
Syslog
<MessageLogging name="LogToSyslog"> <Syslog> <Message>[3f509b58 tag="{organization.name}.{apiproxy.name}.{environment.name}"] Weather request for WOEID {request.queryparam.w}.</Message> <Host>logs-01.loggly.com</Host> <Port>514</Port> <Protocol>TCP</Protocol> <FormatMessage>true</FormatMessage> <DateFormat>yyyy-MM-dd'T'HH:mm:ss.SSSZ</DateFormat> </Syslog> <logLevel>ALERT</logLevel> </MessageLogging>
Penggunaan umum jenis kebijakan MessageLogging adalah untuk mencatat ke akun syslog. Jika dikonfigurasi untuk syslog, proxy API akan meneruskan pesan log dari Apigee Edge ke server syslog jarak jauh. Anda harus sudah memiliki server syslog. Jika tidak, layanan pengelolaan log publik, seperti Splunk, Sumo Logic, dan Loggly, tersedia. lihat Mengonfigurasi layanan pengelolaan log pihak ketiga.
Misalnya, bayangkan Anda perlu mencatat informasi tentang setiap pesan permintaan yang
diterima API dari aplikasi konsumen. Nilai 3f509b58
mewakili nilai kunci
khusus untuk layanan loggly. Jika Anda memiliki akun Loggly, ganti kunci Loggly Anda. Pesan log yang dihasilkan akan diisi dengan empat nilai: organisasi, proxy API, dan nama lingkungan yang terkait dengan transaksi, beserta nilai untuk parameter kueri pada pesan permintaan.
Jika memiliki deployment Edge untuk Private Cloud, Anda juga dapat menulis pesan log ke file.
Syslog melalui TLS/SSL
<MessageLogging name="LogToSyslog"> <Syslog> <Message>[3f509b58 tag="{organization.name}.{apiproxy.name}.{environment.name}"] Weather request for WOEID {request.queryparam.w}.</Message> <Host>logs-01.loggly.com</Host> <Port>6514</Port> <Protocol>TCP</Protocol> <FormatMessage>true</FormatMessage> <SSLInfo> <Enabled>true</Enabled> </SSLInfo> <DateFormat>yyMMdd-HH:mm:ss.SSS</DateFormat> </Syslog> <logLevel>WARN</logLevel> </MessageLogging>
Anda dapat mengirim pesan ke penyedia logging pesan pihak ketiga melalui TLS/SSL dengan menambahkan blok <SSLInfo>
.
Rotasi file: ukuran
<MessageLogging name="LogPolicy"> <File> <Message>This is a test message. Message id : {request.header.messageid}</Message> <FileName>test.log</FileName> <FileRotationOptions rotateFileOnStartup="true"> <FileRotationType>SIZE</FileRotationType> <MaxFileSizeInMB>10</MaxFileSizeInMB> <MaxFilesToRetain>10</MaxFilesToRetain> </FileRotationOptions> </File> <logLevel>ERROR</logLevel> </MessageLogging>
Rotasi file berdasarkan ukuran file.
Rotasi file: waktu
<MessageLogging name="LogPolicy"> <File> <Message>This is a test message. Message id : {request.header.messageid}</Message> <FileName>test.log</FileName> <FileRotationOptions rotateFileOnStartup="true"> <FileRotationType>TIME</FileRotationType> <RotationFrequency unit="minute">10</RotationFrequency> <MaxFilesToRetain>10</MaxFilesToRetain> </FileRotationOptions> </File> <logLevel>ERROR</logLevel> </MessageLogging>
Rotasi file berdasarkan waktu.
Rotasi file: waktu & ukuran
<MessageLogging name="LogPolicy"> <File> <Message>This is a test message. Message id : {request.header.messageid}</Message> <FileName>test.log</FileName> <FileRotationOptions rotateFileOnStartup="true"> <FileRotationType>TIME_SIZE</FileRotationType> <MaxFileSizeInMB>10</MaxFileSizeInMB> <MaxFilesToRetain>10</MaxFilesToRetain> <RotationFrequency unit="minute">10</RotationFrequency> </FileRotationOptions> </File> <logLevel>ERROR</logLevel> </MessageLogging>
Rotasi file berdasarkan waktu dan ukuran.
Diaktifkan untuk streaming
<MessageLogging name="LogPolicy"> <File> .... .... </File> <BufferMessage>true</BufferMessage> </MessageLogging>
Logging pesan yang mendukung streaming
Referensi elemen
Gunakan elemen berikut untuk mengonfigurasi jenis kebijakan MessageLogging.
Nama Kolom | Deskripsi Kolom | |
---|---|---|
Tujuan file lokal. (Logging file hanya didukung dalam deployment Edge untuk Private Cloud.) Untuk informasi tentang tempat file disimpan, lihat Lokasi file log di Edge untuk Private Cloud. |
Message |
Buat pesan yang akan dikirim ke file log, dengan menggabungkan teks dengan variabel untuk mengambil informasi yang Anda inginkan. Lihat Contoh. |
FileName |
Nama dasar file log.
Jangan menentukan jalur file. Misalnya, elemen FileName ini menentukan jalur file dan
tidak valid:
<FileName>/opt/apigee/var/log/messages/mylog.log</FileName> Kode ini hanya menentukan nama file dan valid: <FileName>mylog.log</FileName> Untuk mengetahui informasi tentang tempat file disimpan, lihat Lokasi file log di Edge untuk Private Cloud. |
|
FileRotationOptions |
||
rotateFileOnStartup |
Atribut. Nilai yang valid: Jika disetel ke true, file log akan dirotasi setiap kali mesin pesan dimulai ulang. |
|
FileRotationType |
Menentukan kebijakan rotasi (size atau
time ) file log. |
|
MaxFileSizeInMB |
(Saat memilih size sebagai jenis rotasi)
Menentukan ukuran file log yang memicu server untuk memindahkan pesan log ke
file terpisah. Setelah file log mencapai ukuran yang ditentukan, server akan mengganti nama
file log saat ini. |
|
RotationFrequency |
(Saat memilih time sebagai jenis rotasi)
Menentukan waktu dalam menit yang memicu server untuk memindahkan pesan log ke file
terpisah. Setelah interval yang ditentukan berlalu, file log saat ini akan diganti namanya. |
|
MaxFilesToRetain |
Menentukan jumlah maksimum file yang akan dipertahankan dalam konteks setelan rotasi Anda. Nilai defaultnya adalah 8. Jika Anda menentukan nol (0), file log akan disimpan tanpa batas waktu, tetapi tunduk pada setelan rotasi file Anda, meskipun tidak ada file yang dihapus atau diganti namanya. Oleh karena itu, untuk menghindari error penuh disk di masa mendatang, tetapkan nilai ini ke nilai yang lebih besar dari nol, atau terapkan sistem penghapusan atau pengarsipan file log yang dipertahankan lama secara otomatis dan reguler. |
|
BufferMessage |
Jika streaming HTTP diaktifkan untuk proxy Anda, pesan permintaan/respons tidak akan di-buffer. Jika Anda ingin mencatat konten yang memerlukan penguraian pesan alur, tetapkan BufferMessage ke benar. Lihat tab contoh "Diaktifkan streaming" untuk mengetahui contohnya. Default: false |
|
Tujuan syslog. Untuk mengirim syslog ke Splunk, Sumo Logic, atau Loggly, lihat Mengonfigurasi layanan pengelolaan log pihak ketiga. |
Message |
Buat pesan yang akan dikirim ke syslog, dengan menggabungkan teks dan variabel untuk mengambil informasi yang Anda inginkan. Lihat Contoh. Catatan: Variabel respons tidak akan tersedia di PostClientFlow setelah Flow Error. Gunakan variabel pesan untuk mencatat informasi respons untuk situasi error dan keberhasilan. Lihat juga Catatan penggunaan. |
Host |
Nama host atau alamat IP server tempat syslog akan dikirim. Jika Anda tidak menyertakan elemen ini, setelan defaultnya adalah localhost. | |
Port |
Port tempat syslog berjalan. Jika Anda tidak menyertakan elemen ini, defaultnya adalah 514. | |
Protocol |
TCP atau UDP (default). Meskipun UDP memiliki performa yang lebih baik, protokol TCP menjamin pengiriman log pesan ke server syslog. Untuk mengirim pesan syslog melalui TLS/SSL, hanya TCP yang didukung. | |
FormatMessage |
Opsional, tetapi Elemen ini memungkinkan Anda mengontrol format konten yang dibuat Apigee yang ditambahkan ke pesan. Jika ditetapkan ke true, pesan syslog akan diawali dengan sejumlah karakter tetap, yang memungkinkan Anda memfilter informasi tersebut dari pesan. Berikut adalah contoh untuk format tetap:
Informasi yang dihasilkan Apigee mencakup:
Jika disetel ke salah (default), pesan tidak diawali dengan karakter tetap tersebut. |
|
PayloadOnly |
Elemen ini menetapkan format pesan yang dihasilkan Apigee agar hanya berisi isi pesan syslog, tanpa karakter yang ditambahkan di awal yang ditentukan oleh FormatMessage. Jika Anda tidak menyertakan elemen ini atau membiarkannya kosong, nilai defaultnya adalah Lihat FormatMessage. |
|
DateFormat |
Opsional. String template pemformatan yang akan digunakan untuk memformat stempel waktu untuk setiap pesan log.
Secara default, Apigee menggunakan |
|
SSLInfo |
Memungkinkan Anda mencatat pesan melalui SSL/TLS. Gunakan dengan
sub-elemen Jika Anda tidak menyertakan elemen ini atau membiarkannya kosong, nilai defaultnya adalah salah (tidak ada TLS/SSL). <SSLInfo> <Enabled>true</Enabled> </SSLInfo> Anda dapat mengonfigurasi tag <SSLInfo> sama seperti yang dapat Anda lakukan di TargetEndpoint, termasuk mengaktifkan TLS/SSL dua arah, seperti yang dijelaskan dalam referensi konfigurasi proxy API. Hanya protokol TCP yang didukung. |
|
logLevel |
Opsional. Nilai yang valid: Tetapkan tingkat informasi tertentu yang akan disertakan dalam log pesan. Jika Anda menggunakan elemen |
Skema
Catatan penggunaan
Saat melampirkan kebijakan MessageLogging ke alur proxy API, pertimbangkan untuk menempatkannya dalam respons ProxyEndpoint, dalam alur khusus yang disebut PostClientFlow. PostClientFlow dieksekusi setelah respons dikirim ke klien yang meminta, yang memastikan bahwa semua metrik tersedia untuk logging. Untuk mengetahui detail tentang penggunaan PostClientFlow, lihat referensi konfigurasi proxy API.
PostClientFlow bersifat khusus dalam dua hal:
- Ini hanya dieksekusi sebagai bagian dari alur respons.
- Ini adalah satu-satunya alur yang dijalankan setelah proxy memasuki status error.
Karena kebijakan ini dijalankan terlepas dari apakah proxy berhasil atau gagal, Anda dapat menempatkan kebijakan MessageLogging di PostClientFlow dan dijamin bahwa kebijakan tersebut selalu dijalankan.
Gambar Trace berikut menunjukkan kebijakan MessageLogging yang dijalankan sebagai bagian dari PostClientFlow, setelah DefaultFaultRule dijalankan:
Dalam contoh ini, kebijakan Verifikasi Kunci API menyebabkan error karena kunci yang tidak valid.
Di bawah ini ditampilkan definisi ProxyEndpoint yang menyertakan PostClientFlow:
<ProxyEndpoint name="default"> ... <PostClientFlow> <Response> <Step> <Name>Message-Logging-1</Name> </Step> </Response> </PostClientFlow> ... </ProxyEndpoint>
Edge mencatat pesan sebagai teks sederhana, dan Anda dapat mengonfigurasi logging untuk menyertakan variabel, seperti tanggal dan waktu saat permintaan atau respons diterima, identitas pengguna pada permintaan, alamat IP sumber tempat permintaan dikirim, dan sebagainya. Edge mencatat pesan secara asinkron, yang berarti tidak ada latensi yang mungkin disebabkan oleh pemblokiran info yang diperkenalkan ke API Anda.
Kebijakan MessageLogging menulis pesan yang dicatat ke dalam memori ke buffering. Logger pesan membaca pesan dari buffering, lalu menulis ke tujuan yang Anda konfigurasikan. Setiap tujuan memiliki buffer-nya sendiri.
Jika kecepatan tulis ke buffer meningkat di luar kecepatan baca, buffer akan meluap dan logging akan gagal. Jika hal ini terjadi, Anda mungkin menemukan pesan yang berisi hal berikut dalam file log:
Log message size exceeded. Increase the max message size setting
Jika Anda mengalami masalah ini di Edge for Private Cloud 4.15.07 dan yang lebih lama, temukan file message-logging.properties
dan gunakan solusi ini:
Tingkatkan properti max.log.message.size.in.kb
(nilai default = 128 KB) di file message-logging.properties
.
Untuk Edge for Private Cloud 4.16.01 dan yang lebih baru, tetapkan properti conf/message-logging.properties+max.
log.message.size.in.kb
di file /opt/apigee/customer/application/message-processor.properties dan mulai ulang Message Processor. Perhatikan bahwa properti ini awalnya dikomentari secara default.
Catatan: Variabel pesan respons di Edge tidak tersedia dari Alur Error. Variabel ini juga tidak tersedia di PostClientFlow jika alur sebelumnya adalah Error Flow. Jika Anda ingin mencatat informasi respons dari PostClientFlow, gunakan objek message. Anda dapat menggunakan objek ini untuk mendapatkan header dan informasi lainnya dari respons, baik ada error maupun tidak. Lihat Variabel pesan untuk mengetahui informasi selengkapnya dan contohnya.
Mengontrol stempel waktu pesan log di Edge untuk Private Cloud
Secara default, stempel waktu di semua pesan log memiliki format:
yyyy-MM-dd'T'HH:mm:ss.SSSZ
Default seluruh sistem ini dapat diganti untuk tujuan syslog menggunakan elemen DateFormat
. Perilaku template ini dijelaskan dalam dokumentasi untuk class SimpleDateFormat Java. Menurut definisi tersebut, yyyy
akan diganti dengan tahun 4 digit, MM
akan diganti dengan nomor bulan 2 digit, dan seterusnya.
Format di atas dapat menghasilkan string dalam bentuk ini:
2022-09-28T22:38:11.721+0000
Anda dapat menggunakan properti conf_system_apigee.syslogger.dateFormat di Edge Message Processor untuk mengontrol format tersebut. Misalnya, mengubah format pesan menjadi:
yy/MM/dd'T'HH:mm:ss.SSSZ
..mengganti tanda hubung dengan garis miring, dan mempersingkat tahun menjadi 2 digit, mencatat stempel waktu dalam bentuk:
22/09/28T22:38:11.721+0000
Untuk mengubah format:
- Buka file message-processor.properties di editor. Jika file tidak ada, buat file tersebut:
> vi /opt/apigee/customer/application/message-processor.properties - Tetapkan properti sesuai keinginan:
conf_system_apigee.syslogger.dateFormat=yy/MM/dd'T'HH:mm:ss.SSSZ - Simpan perubahan.
- Pastikan file properti dimiliki oleh pengguna 'apigee':
> chown apigee:apigee /opt/apigee/customer/application/message-processor.properties - Mulai ulang Edge Message Processor:
> /opt/apigee/apigee-service/bin/apigee-service edge-message-processor restart
Lokasi file log di Edge untuk Private Cloud
Edge untuk Private Cloud 4.16.01 dan yang lebih baru
Secara default, log pesan Cloud Pribadi berada di direktori berikut pada node Message Processor:
/opt/apigee/var/log/edge-message-processor/messagelogging/org_name/environment/api_proxy_name/revision/logging_policy_name/
Anda dapat mengubah lokasi log default dengan mengubah properti dalam file message-logging.properties di Message Processor:
- bin_setenv_data_dir -
Menetapkan jalur root untuk penyimpanan file log. Misalnya,
bin_setenv_data_dir=/opt/apigee/var/log
- conf_message-logging_log.root.dir - Jika
Anda menetapkannya ke jalur relatif, seperti
conf/message-logging.properties+log.root.dir=custom/folder/
, the path is appended to the bin_setenv_data_dir location.
Jika Anda menetapkannya ke jalur absolut, seperticonf/message-logging.properties+log.root.dir=/opt/apigee/var/log/messages
, log pesan akan disimpan di/opt/apigee/var/log/messages/messagelog/
. Jalur absolut lebih diutamakan daripadabin_setenv_data_dir
.
Perlu diperhatikan bahwa Anda harus mereferensikan properti sebagai conf/message-logging.properties+log.root.dir karena properti ini dikomentari secara default. Lihat Menetapkan token yang saat ini dikomentari untuk mengetahui informasi selengkapnya.
Jika Anda ingin menyimpan file log dalam struktur file datar sehingga semua file log ditempatkan di direktori yang sama, tetapkan conf/message-logging.properties+enable.flat.directory.structure ke true dalam file message-logging.properties. Pesan disimpan di direktori yang ditentukan oleh
properti di atas, dan nama filenya berbentuk
{org}_{environment}_{api_proxy_name}_{revision}_{logging_policy_name}_{filename}
.
Untuk menetapkan properti ini:
- Buka file message-processor.properties di editor. Jika file tidak ada, buat file tersebut:
> vi /opt/apigee/customer/application/message-processor.properties - Tetapkan properti sesuai keinginan:
conf/message-logging.properties+log.root.dir=/opt/apigee/var/log/messages - Simpan perubahan.
- Pastikan file properti dimiliki oleh pengguna 'apigee':
> chown apigee:apigee /opt/apigee/customer/application/message-processor.properties - Mulai ulang komponen Edge:
> /opt/apigee/apigee-service/bin/apigee-service edge-message-processor restart
Edge untuk Private Cloud 4.15.07 dan yang lebih lama
Secara default, log pesan berada di lokasi berikut pada pemroses pesan:
/opt/apigee4/var/log/apigee/message-processor/messagelog/{org}/{environment}/{api_proxy_name}/{revision}/{logging_policy_name}/
Anda dapat mengubah lokasi log default dengan mengubah properti berikut dalam file message-logging.properties di pemroses pesan:
- data.dir - Menetapkan jalur root untuk penyimpanan file log. Misalnya, data.dir=/opt/apigee4/var/log
- log.root.dir - Jika Anda menetapkan ini ke jalur relatif, seperti log.root.dir=custom/folder/, jalur akan ditambahkan ke lokasi data.dir.
Misalnya, kombinasi dari kedua properti tersebut akan menetapkan direktori logging di /opt/apigee4/var/log/custom/folder/messagelog/ (perhatikan bahwa /messagelog ditambahkan secara otomatis).
Jika Anda menetapkannya ke jalur absolut, seperti log.root.dir=/opt/apigee4/var/log/messages, log pesan akan disimpan di /opt/apigee4/var/log/messages/messagelog/. Jalur absolut di log.root.dir lebih diprioritaskan daripada data.dir.
Jika Anda ingin menyimpan file log dalam struktur file datar sehingga semua file log ditempatkan di direktori yang sama, tetapkan enable.flat.directory.structure property ke true dalam file message-logging.properties di Message Processors. Pesan disimpan di direktori yang ditentukan oleh properti di atas, dan nama file menggunakan format {org}_{environment}_{api_proxy_name}_{revision}_{logging_policy_name}_{filename}.
Nilai default untuk variabel dalam template pesan
Nilai default dapat ditentukan untuk setiap variabel dalam template pesan secara terpisah. Misalnya,
jika variabel request.header.id
tidak dapat di-resolve, nilainya akan diganti
dengan nilai unknown
.
<Message>This is a test message. id = {request.header.id:unknown}</Message>
Nilai default umum dapat ditentukan untuk semua variabel yang belum terselesaikan dengan menetapkan
atribut defaultVariableValue
pada elemen Message
:
<Message defaultVariableValue="unknown">This is a test message. id = {request.header.id}</Message>
Mengonfigurasi layanan pengelolaan log pihak ketiga
Kebijakan MessageLogging memungkinkan Anda mengirim pesan syslog ke layanan pengelolaan log pihak ketiga, seperti Splunk, Sumo Logic, dan Loggly. Jika Anda ingin mengirim syslog ke salah satu layanan tersebut, lihat dokumentasi layanan tersebut untuk mengonfigurasi host, port, dan protokol layanan, lalu tetapkan elemen Syslog pada kebijakan ini sebagaimana mestinya.
Lihat dokumentasi berikut untuk konfigurasi pengelolaan log pihak ketiga:
- Splunk (pilih versi produk)
Lihat juga postingan Komunitas Apigee ini: https://community.apigee.com/content/kbentry/13298/log-messages-into-splunk.html -
Sumo
Logic
- Lihat juga postingan Komunitas Apigee ini: https://community.apigee.com/questions/5226/setting-up-logging-with-sumo-logic-which-host-shou.html
- Untuk mengetahui contoh lengkap penggunaan Sumo Logic sebagai layanan logging, lihat posting Komunitas Apigee berikut. Solusi ini menggunakan satu kebijakan JavaScript untuk membuat permintaan POST HTTP ke Sumo Logic HTTP Source Collector: https://community.apigee.com/articles/32286/logging-to-sumo-logic-using-javascript-and-http.html
- Loggly
Saat menggunakan Loggly,<FormatMessage>true</FormatMessage>
diperlukan dalam kebijakan sebagai turunan dari elemen<Syslog>
.
Lihat juga postingan Komunitas Apigee ini untuk mengetahui informasi selengkapnya tentang logging pesan ke Loggly: https://community.apigee.com/content/kbentry/14798/log-messages-into-loggly.html
Referensi error
This section describes the fault codes and error messages that are returned and fault variables that are set by Edge when this policy triggers an error. This information is important to know if you are developing fault rules to handle faults. To learn more, see What you need to know about policy errors and Handling faults.
Runtime errors
These errors can occur when the policy executes.
Fault code | HTTP status | Cause |
---|---|---|
steps.messagelogging.StepDefinitionExecutionFailed |
500 | See fault string. |
Deployment errors
These errors can occur when you deploy a proxy containing this policy.
Error name | Cause | Fix |
---|---|---|
InvalidProtocol |
The deployment of the MessageLogging policy can fail with this error if the protocol
specified within the <Protocol> element is not valid. The valid protocols are TCP and UDP.
For sending syslog messages over TLS/SSL, only TCP is supported. |
build |
InvalidPort |
The deployment of the MessageLogging policy can fail with this error if the port number
is not specified within the <Port> element or if it is not valid. The port number must be
an integer greater than zero. |
build |
Fault variables
These variables are set when a runtime error occurs. For more information, see What you need to know about policy errors.
Variables | Where | Example |
---|---|---|
fault.name="fault_name" |
fault_name is the name of the fault, as listed in the Runtime errors table above. The fault name is the last part of the fault code. | fault.name Matches "StepDefinitionExecutionFailed" |
messagelogging.policy_name.failed |
policy_name is the user-specified name of the policy that threw the fault. | messagelogging.ML-LogMessages.failed = true |
Example error response
{ "fault":{ "detail":{ "errorcode":"steps.messagelogging.StepDefinitionExecutionFailed" }, "faultstring":"Execution failed" } }
Example fault rule
<FaultRule name="MessageLogging"> <Step> <Name>ML-LogMessages</Name> <Condition>(fault.name Matches "StepDefinitionExecutionFailed") </Condition> </Step> <Condition>(messagelogging.ML-LogMessages.failed = true) </Condition> </FaultRule>
Variabel alur
Variabel berikut diisi saat kebijakan gagal.
messagelogging.failed
messagelogging.{stepdefinition-name}.failed
Topik terkait
- Variabel yang ditampilkan oleh Edge: Referensi variabel