Pantau dan diagnosis layanan di penyiapan pengembangan komputer Linux lokal
Pemantauan, deteksi, diagnosis, dan pemecahan masalah memungkinkan layanan terus berfungsi dengan gangguan minimal terhadap pengalaman pengguna. Pemantauan dan diagnostik sangat penting dalam lingkungan produksi yang disebarkan secara aktual. Mengadopsi model serupa selama pengembangan layanan memastikan bahwa alur diagnostik berfungsi ketika Anda pindah ke lingkungan produksi. Service Fabric memudahkan pengembang layanan untuk menerapkan diagnostik yang dapat dengan mulus bekerja di pengaturan pengembangan lokal satu mesin dan penyiapan kluster produksi dunia nyata.
Aplikasi Debugging Service Fabric Java
Untuk aplikasi Java, tersedia beberapa kerangka kerja pengelogan. Karena java.util.logging
merupakan opsi default dengan JRE, yang juga digunakan untuk contoh kode di GitHub. Diskusi berikut menjelaskan cara mengonfigurasi kerangka kerja java.util.logging
.
Dengan menggunakan java.util.logging, Anda dapat mengalihkan log aplikasi ke memori, aliran output, file konsol, atau soket. Untuk masing-masing opsi ini, ada handler default yang sudah disediakan dalam kerangka kerja. Anda dapat membuat file app.properties
untuk mengonfigurasi handler file untuk aplikasi Anda untuk mengalihkan semua log ke file lokal.
Cuplikan kode berikut berisi contoh konfigurasi:
handlers = java.util.logging.FileHandler
java.util.logging.FileHandler.level = ALL
java.util.logging.FileHandler.formatter = java.util.logging.SimpleFormatter
java.util.logging.FileHandler.limit = 1024000
java.util.logging.FileHandler.count = 10
java.util.logging.FileHandler.pattern = /tmp/servicefabric/logs/mysfapp%u.%g.log
Folder yang ditunjukkan oleh file app.properties
harus ada. Setelah file app.properties
dibuat, Anda juga perlu memodifikasi skrip titik entri Anda, entrypoint.sh
di folder <applicationfolder>/<servicePkg>/Code/
untuk mengatur properti java.util.logging.config.file
ke file app.properties
. Entri akan terlihat seperti cuplikan berikut:
java -Djava.library.path=$LD_LIBRARY_PATH -Djava.util.logging.config.file=<path to app.properties> -jar <service name>.jar
Konfigurasi ini menghasilkan log yang dikumpulkan dalam mode rotasi di /tmp/servicefabric/logs/
. File log dalam kasus ini bernama mysfapp%u.%g.log di mana:
- %u adalah angka unik untuk menyelesaikan konflik antara proses Java secara bersamaan.
- %g adalah nomor generasi untuk membedakan antara log rotasi.
Secara default, jika tidak ada handler yang dikonfigurasi secara eksplisit, handler konsol akan terdaftar. Seseorang dapat melihat log dalam syslog di bagian /var/log/syslog.
Untuk informasi selengkapnya, lihat contoh kode di GitHub.
Aplikasi Debugging Service Fabric C#
Beberapa kerangka kerja tersedia untuk melacak aplikasi CoreCLR di Linux. Untuk informasi selengkapnya, lihat Ekstensi .NET untuk Pengelogan. Karena EventSource biasa digunakan pengembang C#, artikel ini menggunakan EventSource untuk menelusuri sampel CoreCLR di Linux.
Langkah pertama adalah menyertakan System.Diagnostics.Tracing sehingga Anda dapat menulis log ke memori, aliran output, atau file konsol. Untuk pengelogan menggunakan EventSource, tambahkan proyek berikut ke situs web project.json:
"System.Diagnostics.StackTrace": "4.0.1"
Anda dapat menggunakan EventListener khusus untuk mendengarkan acara layanan lalu mengalihkannya dengan tepat untuk melacak file. Cuplikan kode berikut menunjukkan contoh implementasi pengelogan menggunakan EventSource dan EventListener kustom:
public class ServiceEventSource : EventSource
{
public static ServiceEventSource Current = new ServiceEventSource();
[NonEvent]
public void Message(string message, params object[] args)
{
if (this.IsEnabled())
{
var finalMessage = string.Format(message, args);
this.Message(finalMessage);
}
}
// TBD: Need to add method for sample event.
}
internal class ServiceEventListener : EventListener
{
protected override void OnEventSourceCreated(EventSource eventSource)
{
EnableEvents(eventSource, EventLevel.LogAlways, EventKeywords.All);
}
protected override void OnEventWritten(EventWrittenEventArgs eventData)
{
using (StreamWriter Out = new StreamWriter( new FileStream("/tmp/MyServiceLog.txt", FileMode.Append)))
{
// report all event information
Out.Write(" {0} ", Write(eventData.Task.ToString(), eventData.EventName, eventData.EventId.ToString(), eventData.Level,""));
if (eventData.Message != null)
Out.WriteLine(eventData.Message, eventData.Payload.ToArray());
else
{
string[] sargs = eventData.Payload != null ? eventData.Payload.Select(o => o.ToString()).ToArray() : null;
Out.WriteLine("({0}).", sargs != null ? string.Join(", ", sargs) : "");
}
}
}
}
Cuplikan sebelumnya menghasilkan log ke file di /tmp/MyServiceLog.txt
. Nama file ini perlu ditingkatkan dengan tepat. Jika Anda ingin mengalihkan log ke konsol, gunakan cuplikan berikut di kelas EventListener yang disesuaikan:
public static TextWriter Out = Console.Out;
Sampel di C# Samples menggunakan EventSource dan EventListener kustom untuk mencatat peristiwa ke file.
Langkah berikutnya
Kode pelacakan yang sama ditambahkan ke aplikasi Anda juga berfungsi dengan diagnostik aplikasi Anda pada kluster Azure. Lihat artikel ini yang membahas berbagai opsi untuk alat dan jelaskan cara menyiapkannya.