Bu konu, eventer kullanarak Kubernetes'ten olayları nasıl toplayacağınızı ve bunları Simple Log Service'e nasıl göndereceğinizi açıklar.
Kubernetes mimarisi bir durum makinesine dayanır. Durumlar arasındaki geçişler ilgili olayları oluşturur. Normal durumlar arasındaki geçişler Normal düzeyinde olaylar üretirken normal ve anormal durumlar arasındaki geçişler Uyarı düzeyinde olaylar üretir.
Container Service for Kubernetes (ACK), konteyner senaryoları için kullanıma hazır bir olay izleme çözümü sunar. ACK tarafından bakımı yapılan NPD ve dahil edilen kube-eventer aracılığıyla konteyner olay izlemesi sağlar.
Node Problem Detector (NPD), Kubernetes düğümleri için bir tanılama aracıdır. Docker Engine takılmaları, Linux çekirdeği takılmaları, ağ gidiş sorunları veya dosya tanımlayıcı anomalileri gibi düğüm anormalliklerini düğüm olaylarına dönüştürür. NPD, kube-eventer ile birlikte kullanıldığında düğüm olayı uyarıları için kapalı döngülü bir sistem sağlar.
kube-eventer, Kubernetes olaylarının çevrimdışı işlenmesi için ACK tarafından bakımı yapılan açık kaynaklı bir araçtır. Küme olaylarını DingTalk, SLS ve EventBridge gibi harici sistemlere iter. Ayrıca gerçek zamanlı toplama, hedefli uyarı ve eşzamansız arşivleme sağlamak amacıyla farklı olay düzeyleri için filtre koşulları sunar.
Node Problem Detector (NPD), Kubernetes düğümleri için bir tanılama aracıdır. Docker Engine takılmaları, Linux çekirdeği takılmaları, ağ gidiş sorunları veya dosya tanımlayıcı anomalileri gibi düğüm anormalliklerini düğüm olaylarına dönüştürür. NPD, kube-eventer ile birlikte kullanıldığında düğüm olayı uyarıları için kapalı döngülü bir sistem sağlar.
kube-eventer, Kubernetes olaylarının çevrimdışı işlenmesi için ACK tarafından bakımı yapılan açık kaynaklı bir araçtır. Küme olaylarını DingTalk, SLS ve EventBridge gibi harici sistemlere iter. Ayrıca gerçek zamanlı toplama, hedefli uyarı ve eşzamansız arşivleme sağlamak amacıyla farklı olay düzeyleri için filtre koşulları sunar.
Önkoşullar
Alibaba Cloud ACK kümesi veya ACK sunucusuz kümesi gibi bir Kubernetes kümesi oluşturulmuş olmalıdır.
Ücretlendirme
Aşağıdaki koşullar karşılandığında K8s olay merkezi ücretsizdir:
K8s olay merkeziyle ilişkili Logstore'un veri saklama süresi 90 gündür (varsayılan değer).
K8s olay merkezine yazılan veri hacmi günlük 256 MB'dan azdır; bu yaklaşık 250.000 olaya karşılık gelir.
Örnekler:
Varsayılan 90 günlük veri saklama süresini kullanırsanız ve Kubernetes kümeniz günde 1.000 olay üretirse K8s olay merkezi ücretsizdir.
Veri saklama süresini 105 güne ayarlarsanız ve Kubernetes kümeniz günde 1.000 olay üretirse 90 günden sonra Logstore depolama ücreti ödersiniz. Faturalandırılan öğe Log Storage'dır. Log Storage faturalandırılan öğesi hakkında daha fazla bilgi için bkz. Özellik bazında ödeme modunda faturalandırılan öğeler.
Adım 1: kube-eventer ve node-problem-detector dağıtma
ACK
Bir ACK kümesi için ack-node-problem-detector bileşeni, kube-eventer ve node-problem-detector özelliklerini entegre eder. Yalnızca bu bileşeni dağıtmanız gerekir. Bir ACK sunucusuz kümesi için ise kube-eventer bileşenini dağıtmanız gerekir.
NPD, yapılandırmalara ve üçüncü taraf eklentilerine dayalı olarak düğüm sorunlarını veya hatalarını algılar ve ardından ilgili küme olaylarını oluşturur. Kubernetes kümesi ayrıca pod tahliyesi ve görüntü çekme hataları gibi durum geçişlerinden kaynaklanan çeşitli olaylar üretir. Simple Log Service (SLS) Kubernetes Olay Merkezi, tüm Kubernetes olaylarını gerçek zamanlı olarak toplar ve depolama, sorgulama, analiz, görselleştirme ve uyarı yetenekleri sağlar. Aşağıdaki adımlarda küme olaylarının SLS Kubernetes Olay Merkezi'ne nasıl gönderileceği açıklanmaktadır:
Küme oluştururken Install Node-problem-detector (NPD) and create an Event Center seçeneğini işaretlediyseniz Kubernetes Olay Merkezini görüntülemek için 2. Adıma ilerleyin.
-
Küme oluştururken Install Node-problem-detector and Create an Event Center seçeneğini işaretlememişseniz bunu manuel olarak yükleyebilirsiniz.
ACK konsol una oturum açın. Sol gezinme bölmesinde Clusters öğesine tıklayın.
Clusters sayfasında hedef kümenin adına tıklayın. Sol gezinme bölmesinde seçeneğine gidin.
Log and Monitoring sekmesinde ack-node-problem-detector bileşenini bulun ve yükleyin.
Self-managed Kubernetes
-
kube-eventerbileşenini dağıtın.kubectl uygulamasını yükleyin. Daha fazla bilgi için bkz. Kümenin kubeconfig dosyasını alma ve kubectl ile kümeye bağlanma.
-
Aşağıdaki şablona göre eventer.yaml adlı bir yapılandırma dosyası oluşturun.
apiVersion: apps/v1 kind: Deployment metadata: labels: name: kube-eventer name: kube-eventer namespace: kube-system spec: replicas: 1 selector: matchLabels: app: kube-eventer template: metadata: labels: app: kube-eventer annotations: scheduler.alpha.kubernetes.io/critical-pod: '' spec: dnsPolicy: ClusterFirstWithHostNet serviceAccount: kube-eventer containers: - image: registry.cn-hangzhou.aliyuncs.com/acs/kube-eventer:v1.2.5-cc7ec54-aliyun name: kube-eventer command: - "/kube-eventer" - "--source=kubernetes:https://kubernetes.default" ## .send to sls ## --sink=sls:https://{endpoint}?project={project}&logStore=k8s-event®ionId={region-id}&internal=false&accessKeyId={accessKeyId}&accessKeySecret={accessKeySecret} - --sink=sls:https://cn-beijing.log.aliyuncs.com?project=k8s-xxxx&logStore=k8s-event®ionId=cn-beijing&internal=false&accessKeyId=xxx&accessKeySecret=xxx env: # If TZ is assigned, set the TZ value as the time zone - name: TZ value: "Asia/Shanghai" volumeMounts: - name: localtime mountPath: /etc/localtime readOnly: true - name: zoneinfo mountPath: /usr/share/zoneinfo readOnly: true resources: requests: cpu: 10m memory: 50Mi limits: cpu: 500m memory: 250Mi volumes: - name: localtime hostPath: path: /etc/localtime - name: zoneinfo hostPath: path: /usr/share/zoneinfo --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: kube-eventer rules: - apiGroups: - "" resources: - events verbs: - get - list - watch --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: kube-eventer roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: kube-eventer subjects: - kind: ServiceAccount name: kube-eventer namespace: kube-system --- apiVersion: v1 kind: ServiceAccount metadata: name: kube-eventer namespace: kube-system
Parameter
Type
Required
Description
endpoint
string
Yes
Simple Log Service uç noktası. Daha fazla bilgi için bkz. Uç noktalar.
project
string
Yes
Simple Log Service projesi.
logStore
string
Yes
Simple Log Service Logstore'u.
internal
string
Required for self-managed Kubernetes clusters.
Kendi yönettiğiniz bir Kubernetes kümesi için bu parametreyi false olarak ayarlamanız gerekir.
regionId
string
Required for self-managed Kubernetes clusters.
Simple Log Service'in bulunduğu bölgenin kimliği. Daha fazla bilgi için bkz. Uç noktalar.
accessKeyId
string
Required for self-managed Kubernetes clusters.
AccessKey ID'si. Resource Access Management (RAM) kullanıcısının AccessKey çiftini kullanmanızı öneririz. Daha fazla bilgi için bkz. AccessKey çifti.
accessKeySecret
string
Required for self-managed Kubernetes clusters.
AccessKey gizli anahtarı. Resource Access Management (RAM) kullanıcısının AccessKey çiftini kullanmanızı öneririz. Daha fazla bilgi için bkz. AccessKey çifti. -
eventer.yamlyapılandırmasını kümeye uygulamak için aşağıdaki komutu çalıştırın.kubectl apply -f eventer.yamlBeklenen çıktı:
deployment.apps/kube-eventer created clusterrole.rbac.authorization.k8s.io/kube-eventer created clusterrolebinding.rbac.authorization.k8s.io/kube-eventer created serviceaccount/kube-eventer created
node-problem-detectorbileşenini dağıtın.
Adım 2: K8s olay merkezi örneği oluşturma
Bir K8s olay merkezi örneği oluşturduktan sonra Simple Log Service, hedef projede otomatik olarak k8s-event adlı bir Logstore ve ilgili panolar oluşturur.
Simple Log Service konsoluna oturum açın.
Log Application bölümünde Intelligent O&M sekmesine tıklayın ve ardından K8s Event Center öğesine tıklayın.
Event Center Management sayfasında sağ üst köşedeki Add öğesine tıklayın.
-
Create Event Center panelinde parametreleri yapılandırın ve Next öğesine tıklayın.
Select Existing Project seçeneğini belirlerseniz Project açılır listesinden mevcut bir proje seçerek K8s olay merkezi örneğinin Logstore ve panolar gibi kaynaklarını yönetin.
Select Kubernetes Cluster from Container Service for Kubernetes seçeneğini belirlerseniz K8s Cluster açılır listesinden mevcut bir K8s kümesi seçin. Bu yöntemi kullandığınızda Simple Log Service, K8s olay merkezi örneğinin Logstore ve panolar gibi kaynaklarını yönetmek üzere otomatik olarak
k8s-log-{cluster-id}adlı bir proje oluşturur.
Adım 3: K8s olay merkezi örneğini kullanma
Bir K8s olay merkezi örneği oluşturup kube-eventer ve node-problem-detector bileşenlerini dağıttıktan sonra olay merkezini kullanmaya başlayabilirsiniz. Olaylara genel bakışı görüntüleyebilir, olay ayrıntılarını sorgulayabilir, pod yaşam döngüsünü inceleyebilir, düğüm olaylarını görüntüleyebilir, çekirdek bileşen olaylarını takip edebilir, uyarıları yapılandırabilir, özel sorgular çalıştırabilir ve sürümü güncelleyebilirsiniz.
K8s Event Center sayfasında hedef K8s olay merkezi örneğini bulun ve aşağıdaki işlemleri gerçekleştirmek için
simgesine tıklayın.
Eylemler | Açıklama |
Olaylara genel bakışı görüntüleme | Event Overview sayfası, çekirdek olayların özet istatistiklerini gösterir. İstatistikler arasında toplam olay sayısı, bugün ve dün arasındaki hata olaylarının karşılaştırması, uyarı istatistikleri, hata olayı eğilimleri ve pod OOM ayrıntıları yer alır. Not Pod OOM bilgileri belirli podu tanımlamaz. Yalnızca olayın gerçekleştiği düğümü, işlem adını ve işlem kimliğini belirleyebilirsiniz. Belirli podu tespit etmeye yardımcı olmak için pod OOM zamanına yakın gerçekleşen pod yeniden başlatma olaylarını bulmak amacıyla özel bir sorgu çalıştırabilirsiniz. |
Olay ayrıntılarını sorgulama | Event Detail Query sayfası, olay türü, olay nesnesi, ana bilgisayar, ad alanı ve ad gibi çeşitli boyutlara göre filtrelenen olayların ayrıntılarını gösterir. |
Pod yaşam döngüsünü görüntüleme | Pod Lifecycle sayfası, bir podun yaşam döngüsündeki olayların grafiksel zaman çizelgesini gösterir. Ayrıca önemli pod olaylarını olay düzeyine göre filtreleyebilirsiniz. |
Düğüm olaylarını görüntüleme | Node Events sayfası, düğüm yaşam döngüsü ve olay listesi gibi düğüm olayı ayrıntılarını gösterir. |
Çekirdek bileşen olaylarını görüntüleme | Core Component Events sayfası, ECS yeniden başlatma hataları ve uygulanmamış URL modları gibi çekirdek bileşen olaylarının ayrıntılarını gösterir. |
Uyarı ayarlama | Alert Configuration sayfasında K8s olay merkezi için uyarılar yapılandırabilirsiniz. Daha fazla bilgi için bkz. Uyarı ayarlama. |
Özel sorgular çalıştırma | Custom Query sayfasında sorgu deyimlerini ve analitik deyimlerini özelleştirebilirsiniz. K8s olay merkezindeki tüm olaylar bir Logstore'da depolandığından özel sorgular, olay tüketimi, özel raporlar ve özel uyarılar gibi tüm Logstore özelliklerini kullanabilirsiniz. Daha fazla bilgi için bkz. Sorgulama ve analize hızlı başlangıç. K8s olay merkezi örneğiyle ilişkili projeye erişmek için proje adını aşağıdaki yollardan biriyle bulabilirsiniz:
|
Sürümü güncelleme | Version Update sayfasında K8s olay merkezini yükseltebilirsiniz. |
Örnek günlük
Aşağıdaki kod bir örnek günlük göstermektedir.
hostname: cn-hangzhou.i-***********"
level: Normal
pod_id: 2a360760-****
pod_name: logtail-ds-blkkr
event_id: {
"metadata":{
"name":"logtail-ds-blkkr.157b7cc90de7e192",
"namespace":"kube-system",
"selfLink":"/api/v1/namespaces/kube-system/events/logtail-ds-blkkr.157b7cc90de7e192",
"uid":"2aaf75ab-****",
"resourceVersion":"6129169",
"creationTimestamp":"2019-01-20T07:08:19Z"
},
"involvedObject":{
"kind":"Pod",
"namespace":"kube-system",
"name":"logtail-ds-blkkr",
"uid":"2a360760-****",
"apiVersion":"v1",
"resourceVersion":"6129161",
"fieldPath":"spec.containers{logtail}"
},
"reason":"Started",
"message":"Started container",
"source":{
"component":"kubelet",
"host":"cn-hangzhou.i-***********"
},
"firstTimestamp":"2019-01-20T07:08:19Z",
"lastTimestamp":"2019-01-20T07:08:19Z",
"count":1,
"type":"Normal",
"eventTime":null,
"reportingComponent":"",
"reportingInstance":""
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
SSS
Bir K8s olay merkezi örneğinde veri yok
Bir K8s olay merkezi örneği dağıttıktan sonra yeni olaylar otomatik olarak toplanır. Bunları Custom Query sayfasında arayabilirsiniz. Sağ üst köşedeki zaman aralığını 1 Gün olarak ayarlamanızı öneririz. Veri bulunamazsa genellikle iki neden vardır:
-
K8s olay merkezini dağıttığınızdan beri Kubernetes kümesinde yeni olay üretilmemiştir.
Kümede yeni olayların oluşup oluşmadığını kontrol etmek için
kubectl get events --all-namespaceskomutunu çalıştırabilirsiniz. -
kube-eventervenode-problem-detectordağıtımınızda parametreler yanlış yapılandırılmıştır.-
Bir Container Service for Kubernetes (ACK) kümesi kullanıyorsanız şu adımları uygulayın:
ACK konsoluna oturum açın.
Clusters sayfasında hedef kümenin adına tıklayın.
Sol taraftaki gezinme bölmesinde seçeneğine gidin.
Helm sayfasında ack-node-problem-detector öğesini bulun ve Update öğesine tıklayın.
Parametre ayarlarını kontrol edin ve değiştirin.
Kendi yönettiğiniz bir Kubernetes kümesi kullanıyorsanız parametre ayarları için bkz. Kubernetes olaylarını toplama.
-
Bir olay için konteyner günlüklerini nasıl görüntülerim?
-
Bir Container Service for Kubernetes (ACK) kümesi kullanıyorsanız şu adımları uygulayın:
ACK konsoluna oturum açın.
Clusters sayfasında hedef kümenin adına tıklayın.
Sol taraftaki gezinme bölmesinde seçeneğine gidin.
Namespace değerini kube-system olarak ayarlayın.
Pods listesinde hedef podu bulun ve Log öğesine tıklayın.
Kendi yönettiğiniz bir Kubernetes kümesi kullanıyorsanız kube-system ad alanında dosya adı ön eki
eventer-slsolan Pod'ların günlüklerini kontrol edin.