SAE, uygulama örneklerinden standart çıktı (stdout) ve dosya günlüklerini toplayarak bunları ApsaraMQ for Kafka konularına iletebilir. Bu özellik, Simple Log Service (SLS) günlük toplama yeteneklerini genişletir; özellikle günlükleri SLS projelerine toplayamadığınız durumlarda veya RAM kullanıcılarının SLS'deki günlükleri görüntüleme izninin olmadığı senaryolarda oldukça kullanışlıdır. Kafka üzerinden günlük verilerini analiz ve uzun vadeli depolama amacıyla Elasticsearch gibi alt sistemlere yönlendirebilirsiniz.
Önkoşullar
Başlamadan önce aşağıdaki gereksinimlerin karşılandığından emin olun:
SAE gereksinimleri:
Her uygulama örneğinde en az 0,25 Çekirdek CPU ve 250 MB kullanılabilir kaynak bulunmalıdır.
ApsaraMQ for Kafka gereksinimleri:
ApsaraMQ for Kafka etkinleştirilmiş ve bir konu oluşturulmuş olmalıdır. SAE, ApsaraMQ for Kafka 2.X veya sonraki sürümleri destekler.
Kafka örneğiniz İnternet erişimi olmayan bir sanal özel bulut (VPC) içinde dağıtılmışsa, Kafka örneği SAE uygulamanızla aynı VPC'de bulunmalıdır.
-
Kafka örneğiniz için bir IP adresi izin listesi yapılandırılmış olmalıdır:
Kafka örneği ve SAE uygulaması aynı VPC'de ancak farklı vSwitch'lerde bulunuyorsa, SAE uygulamasının vSwitch CIDR bloğunu Kafka izin listesine ekleyin.
VPC içindeki tüm trafiğe izin vermek için izin listesine
0.0.0.0/0ekleyin.
Kafka kullanım sınırları ve faturalama ayrıntıları için Sınırlamalar ve Faturalandırma genel bakışı konularına bakın.
Uygulama oluştururken günlük toplamayı yapılandırma
SAE konsoluna giriş yapın. Sol gezinme bölmesinde Applications > Applications seçeneğini seçin. Namespace açılır listesinden bir bölge ve ad alanı seçin, ardından Create Application düğmesini tıklayın.
Basic Information bölümünde uygulama bilgilerini yapılandırın ve Next: Advanced Settings düğmesini tıklayın.
-
Log Settings bölümünü genişletin ve Activate Kafka seçeneğini etkinleştirin. Aşağıdaki parametreleri yapılandırın:
Parametre Zorunlu Açıklama Kafka Instance Evet Hedef ApsaraMQ for Kafka örneği. Collection Log Type Evet Toplanacak günlük türü. File Logs (Log Path In Container) birden fazla toplama kuralını destekler. Container Standard Output Logs yalnızca bir toplama kuralını destekler ve vSwitch'iniz bir önerilen alanda bulunduğunda kullanılabilir. Log Source Evet (yalnızca dosya günlükleri için) Konteyner içindeki günlük dosyasının tam yolu, örneğin /tmp0/cjsc.log. Düzenli ifadeler desteklenir. Aynı biçime sahip birden çok dosyayı eşleştirmek için/xxx/xxx/xxx/*.loggibi joker karakterli bir yol kullanın.ÖnemliGünlük kaynak dizininde diğer önemli dosyaları saklamayın — bu dizindeki dosyaların üzerine yazılabilir.
Kafka Topic Name Evet Günlüklerin teslim edileceği mevcut ApsaraMQ for Kafka konusu. Create Application düğmesini tıklayın.
Yapılandırmayı doğrulayın. Uygulama dağıtıldıktan sonra SAE, kurallarınıza göre günlük toplamaya başlar. Uygulama ayrıntıları sayfasının sol gezinme bölmesinde Log Management > Persistent Logs seçeneğini seçin. Log collection to Kafka sekmesine tıklayın. Günlükler görünüyorsa toplama kuralı etkindir.
Mevcut bir uygulamayı dağıtırken günlük toplamayı yapılandırma
Bir uygulamayı yeniden dağıtmak uygulamanın yeniden başlatılmasına neden olur. İş etkisini en aza indirmek için dağıtımı yoğun olmayan saatlerde gerçekleştirin.
Bu bölüm, bir veya daha fazla örneği olan uygulamalar için geçerlidir. Sıfır örneği olan uygulamalar için Uygulamayı güncelleme konusuna bakın.
SAE konsoluna giriş yapın. Sol gezinme bölmesinde Applications > Applications seçeneğini seçin. Bir bölge ve ad alanı seçin, ardından uygulama adını tıklayın.
Basic Information sayfasında Deploy Application düğmesini tıklayın.
Log Settings bölümünde Activate Kafka seçeneğini etkinleştirin. Parametreleri önceki bölümdeki tabloda açıklandığı gibi yapılandırın.
-
OK düğmesini tıklayın.
ÖnemliBir günlük dosyası aynı anda yalnızca bir Kafka konusuna teslim edilebilir. Aşamalı yayınlama veya kanarya yayınlama kullanıyor ve günlük kaynağını aynı tutarken konuyu değiştiriyorsanız, tüm örnekler güncellenene kadar günlükler orijinal konuya teslim edilmeye devam eder.
Yapılandırmayı doğrulayın. Uygulama dağıtıldıktan sonra sol gezinme bölmesinde Log Management > Persistent Logs seçeneğini seçin. Günlüklerin göründüğünü onaylamak için Log collection to Kafka sekmesine tıklayın.
Günlük biçimi
ApsaraMQ for Kafka'ya teslim edilen her mesaj, aşağıdaki alanlara sahip bir JSON nesnesidir:
{
"file":"/home/admin/apache-tomcat-8.5.42/logs/localhost.2022-03-01.log",
"host":"test-kafka-9527eec8-b2c1-4f03-9178-5dac0fe16d07-*****",
"message":"01-Mar-2022 15:09:36.016 INFO [localhost-startStop-1] org.apache.catalina.core.ApplicationContext.log No Spring WebApplicationInitializer types detected on classpath",
"topic":"test2"
}
| Alan | Açıklama |
|---|---|
file |
Konteyner içindeki toplanan günlük dosyasının yolu. |
host |
Günlüğü üreten uygulama örneğinin adı. |
message |
Günlük içeriği. |
topic |
Günlüğün alındığı ApsaraMQ for Kafka konusu. |
Çok satırlı günlükler
SAE, her satır sonunu (\n) bir günlük kaydı sınırı olarak kabul eder. Uygulamanız Java istisna yığın izlemeleri gibi çok satırlı girişler yazıyorsa her satır ayrı bir mesaj olarak teslim edilir. Java uygulamalarında günlüklerin otomatik olarak tek bir satırda birleştirilmesi durumunda hata bildirildiğini unutmayın:
java.lang.RuntimeException: testLog
at cn.niutong.controller.TestController.heathc(TestController.java:141)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at ...
Çok satırlı girişleri birlikte tutmak için uygulamanızda günlük dosyasına yazmadan önce bunları tek satırlık bir JSON dizesi olarak serileştirin.
Sunucu tarafında günlük birleştirme gibi gelişmiş kullanım durumları için teknik destek almak üzere DingTalk grubu 32874633'e katılın.
SSS
Günlük kaynak yolları için joker karakterler destekleniyor mu?
Evet. Bir dizindeki tüm dosyaları eşleştirmek için yıldız işareti (*) kullanın. Örneğin, /tmp/logs/*.log ifadesi /tmp/logs/ dizinindeki tüm .log dosyalarını eşleştirir.
Neden günlükler toplanmıyor?
En yaygın neden, SAE ile Kafka örneği arasındaki ağ bağlantısı sorunudur. Aşağıdakileri kontrol edin:
Ağ yolu: Uygulamanız için SAE Webshell'i açın ve bağlantıyı test etmek amacıyla Kafka örneği uç noktasına bir
telnetkomutu çalıştırın. Ayrıntılar için Uygulama sağlığını kontrol etmek için Webshell özelliğini kullanma konusuna bakın.VPC ve izin listesi: SAE uygulaması ile Kafka örneğinin aynı VPC'de bulunduğunu ve Kafka IP adresi izin listesinin SAE vSwitch CIDR bloğunu içerdiğini onaylayın.
Ağ erişilebilir olduğu halde günlükler hala eksikse teknik destek için DingTalk grubu 32874633'e katılın.