Giriş: Mikroservices'teki Neden Logging Maddeleri

Modern mikro hizmet mimarilerinde, giriş, gözlemlenebilirliğin arka kemiğidir. Bir koherent giriş stratejisi olmadan, dağıtılmış bir başarısızlık, dağınık zaman izlerinin kabusu haline gelir, eksik bağlam ve yanlış biçimler sunar.

Bu makale orijinal konsepte genişletir, uygulama detaylarına derin bir şekilde daldırır, ticaret-offs ve en iyi uygulamaları. Kubernetes'te tekton log hizmeti nasıl tasarlayacağınızı keşfedeceğiz, neden işe yarayabilirsiniz ve sonunda, mikro hizmet filonuzda birleşik bir giriş yapmak için açık bir yol haritasınız olacak.

Singleton Design Desen: Hızlı Bir Yenileme

Tekton modeli bir sınıfı tek bir örnekle kısıtlar ve her hizmetten gelen her girişin aynı hedefe ulaşması, yapılandırma, iplik havuzları veya - burada odaklandığımız gibi - kayıt. mikro hizmet bağlamda, tekton giriş örneği, her bir servisten gelen girişin aynı varış noktasına doğru gitmesini ve bir hata mantığın düzeltilmesini sağlar.

Eleştirmenler genellikle tektonlara karşı uyarır, çünkü küresel durumu ve gizli bağımlılıkları tanıtırlar. Ancak, devletsiz bir giriş boru hattına uygulandığında, dezavantajları dışlıyoruz.

Logging Challenges Benzersiz to Microservices

Geleneksel monolithic log disk üzerinde tek bir dosyaya yazar. Mikroservices bu basitliği parçaladı. İşte tekton yaklaşımıyla çözmeyi amaçladığımız temel zorluklar:

  • [FONT:0)Log parçalama[[Dönetici:0)[[[Dönetici:0)[[FONT:0))[[[[[FONT:0)Log parçalama[[[[FONT][FONT][/FONT=0)) – Her hizmet kendi günlüklerini, genellikle yerel depolama veya stdout'a yazar, çapraz hizmet kanalı zor hale getirir.
  • [FONT:0]Inconsistent formatlar[[Dönler: 1 ) – Takımlar farklı günlük kütüphaneler, çıkış stilleri (JSON vs. düz metin) ve fiiloity seviyeleri kullanabilir.
  • [FONT:0) Basitleştirilmiş bir hacim[Dönemli 1] - onlarca veya yüzlerce hizmet örneği ile, merkezi kontrol olmadan göksel ve depolama maliyetleri gökselleşmeye giriş yapın.
  • [[Dönetici korelasyon[[[Dönetici:0)Context korelasyon[[[Dönetici:0)[[[Dönetici: Tek bir kullanıcı isteği birden fazla hizmette umut edebilir; loglar zinciri yeniden inşa etmek için korelasyon kimliklerini taşımalıdır.
  • [FONT:0]Operasyonel karmaşıklığı[Dönetici: 1) - Toplayıcı, aggregating ve Kubernetes gibi olgun olmayan bir ortamdaki günlükleri sorgulayın.

Tekton giriş modeli doğrudan parçaya hitap eder ve tüm logları tek standart bir boru hattı aracılığıyla eğlenceli hale getirir. Kubernetes'te, bu boru hattı yönetilebilir bir birim haline gelir: tek bir Pod veya Servis.

Kubernetes'te Singleton Logging Servisi

Kubernetes tekton log ajanını çalıştırmak için birçok yol sunar. En basit şey, yuvarlanma veya ağ bölümleri sırasında farklı düğümler için planlanan birden fazla örneği kapsamalıdır.

Seçenek 1: Merkezileştirilmiş Singleton Aggregator (Deployment)

Belirli bir günlük aggregator - örneğin, Fluentd, Logstash veya özel bir hizmet - tek-repli bir iş arama olarak, HTTP'ye veya bir yankar aracılığıyla, gRPC'ye veya aggregator parslar, zenginler ve uzun vadeli bir depolamaya girişler gönderiyorlar (Elasticsearch, Loki, CloudWatchlar).

Bu model, tek bir başarısızlık noktası ve bir şişenck'ı azaltmak için, tekton çökerlerini yerel olarak gömmek ve Kubernetes canlılığı / hazırlığı prototiplerine güvenmek, sadece başarısızlıkta aktif olarak rol oynayan ikinci bir standby pod ile - bu tekton konseptini tekrarlıyorsa.

Seçenek 2: Sidecar-Per-Service with Shared Forwarder

Doğrudan giriş gönderme hizmetleri yerine, her hizmet pod bir yankar konteyner (örneğin, hafif bir Fluent Bit) bu kuyruklar ana konteynerin girişlerini ve gemilerini tekton aggregator'a taşır. Bu de çiftler iş mantığından formatlandırır ve per-pod tamponlama sağlar.

Seçenek 3: DaemonSet Node Level - Anti-Singleton?

KubernetesurFLT:0)DaemonSets[Döneticileri 1 ), merkezi bir depolama için standart bir yaklaşımdır (örneğin, akıcı bir şekilde-daemonset, akıcı-daemonset).Bir tekton (birçok düğümün her biri bir kopyasının olduğu için), bir alt tabakaya kadar, bir tekton katmanına kadar bir araya gelmemelidir.

Merkezileştirilmiş tekton aggregator yaklaşımına odaklanacağız çünkü en iyi tek bir mantıksal log lavaboyu uygular.

Kubernetes'te Singleton Davranışı

Kubernetes, küme başarısızlıkları arasında bir iş için maksimum Pod çalışan bir kişi uygulamaz - eğer bir düğüm ölürse, Pod başka bir düğümde yeniden yaratılır, ancak bu geçiş sırasında, iki Pods'un kısa sürede tekton davranışını garanti altına alabilir, bu tekniklerin bir veya daha fazlasını uygulayın:

  • [FONT:0)Pod Anti-Affinity[[DÜT:1) – A kota veya lider seçimle bir araya gelmenin iki ayağını aynı düğümde çalıştırmasını engellemek için.
  • [FONT=0]Lease or Leader Selection[Döneticileri 1 ) – Bir Kubernetes Lease nesnesi (Üye ait API) bir potansiyel tekton pods seti arasında bir lider seçmek için. Liderin kiralama süresine kadar pods blok.
  • [FONT:0]Pervertistent Volume Talep[Dönetici:0)[Dönetici:0)Işıkçı bir yığın, tek bir kopya ile bir araya gelme ve bir PVC, yalnızca bir pod'un veri hacmine yazabileceğini garanti eder.Eğer iki podyum, ikincisi de PVC'yi bağlamayı emreder.
  • [FONT:0)Müşteri Operatör) - Tek bir giriş kaynağı yönetmek, aktif olarak aşağı ölçeklendirmek veya ekstra pods öldürmek için aşırı uç.

Uygulamada, oturum açma için, canlılık kehanetleri ile tek bir iş birliği ve tekton hazır olduğunda sadece tektonun hazır olması yeterlidir.Eğer kümeniz HAFTAT:0)PodDisruptionBudgets), setFLT:4'ı tektonun gönüllü ev ödevlerini önlemek için hazır hale getirir.

Uygulama Adım-Adım: Singleton Fluentd Aggregator

Tekton aggregator olarak Fluentd kullanarak beton bir uygulama üzerinden yürüyelim. Fluentd sağlam Kubernetes desteği ile popüler bir açık kaynak veri toplayıcısıdır.

1. Bir Fluentd Konsülü oluşturun

Bir limanda dinleyen bir ConfigMap (örneğin, 98808080) mikro hizmetlerden gelen girişler için onları Elasticsearch veya başka bir geri dönüş için ileri sürün.

apiVersion: v1
kind: ConfigMap
metadata:
 name: fluentd-config
data:
 fluent.conf: |
 <source>
 @type http
 port 9880
 bind 0.0.0.0
 body_size_limit 32m
 keepalive_timeout 10s
 </source>
 <match **>
 @type elasticsearch
 host elasticsearch-logging
 port 9200
 logstash_format true
 flush_interval 5s
 </match>

2. Singleton Deployment with Anti-Affinity ile iş birliği tanımlamak

apiVersion: apps/v1
kind: Deployment
metadata:
 name: fluentd-singleton
spec:
 replicas: 1
 selector:
 matchLabels:
 app: fluentd-singleton
 template:
 metadata:
 labels:
 app: fluentd-singleton
 spec:
 affinity:
 podAntiAffinity:
 requiredDuringSchedulingIgnoredDuringExecution:
 - labelSelector:
 matchExpressions:
 - key: app
 operator: In
 values:
 - fluentd-singleton
 topologyKey: kubernetes.io/hostname
 containers:
 - name: fluentd
 image: fluent/fluentd:v1.16-1
 ports:
 - containerPort: 9880
 volumeMounts:
 - name: config
 mountPath: /fluentd/etc
 volumes:
 - name: config
 configMap:
 name: fluentd-config

Bu anti-affinity aynı düğümde koşmaktan iki pods engeller, ancak farklı düğümlere engel değildir. Daha güçlü garanti için, bir liderlik kiralama ekleyin.

3. Singleton'ı Headless Service aracılığıyla Expose

Bir kafasız hizmet, DNS tur-robin'in pods'a izin verir, ancak sadece bir uç noktası istiyoruz. Standart bir ClusterIP hizmeti kullanın:

apiVersion: v1
kind: Service
metadata:
 name: fluentd-svc
spec:
 selector:
 app: fluentd-singleton
 ports:
 - port: 9880
 targetPort: 9880

Mikro hizmetler, logları 5'e gönderebilir.

4. Logs Gönderme Mikro hizmetleri

Her mikro hizmet, kayıt /st ( Kubernetes yolu) için yazılmalıdır. Uygunluk için bir yan aracı seçin ve bunları tekton Fluent hizmetine gönderir. Alternatif olarak, uygulama kendisi doğrudan bir HTTP logu ile yapılandırabilir.

Örnek sidecar konteyner tanımı aynı pod:

containers:
- name: app
 image: myapp
 ...
- name: fluentbit-sidecar
 image: fluent/fluent-bit:latest
 args: ["-c", "/etc/fluent-bit.conf"]
 volumeMounts:
 - name: varlog
 mountPath: /var/log
 env:
 - name: FLUENTD_HOST
 value: "fluentd-svc"
 - name: FLUENTD_PORT
 value: "9880"

Fluent Bit yapılandırması, uygulamanın günlük dosyasını kuyruğunu döndürür veya Docker'in günlük sürücüsünden okur, sonra tekton'a doğru ilerler.

Deeper Dive için dış referanslar

Kubernetes'te kapsamlı bir giriş anlayışı için, resmi olarak [[Dönetici:0)Kubernetes Logging Architecture) için Fluentd specifics, [[Şamp:2)Fluentd belgeleri[Döneticileri kullanarak, kiralamaları ve eklentileri tercih ederseniz [Elasticsearch, Fluentd, Kibana)[T:4)Kubernetler ekspert.[FLT|D)

Singleton Logging (Expanded)

  • [FONT=0)Demeksiz bir günlük format[[Dönemli: 1)[Dönemli)[[[Dönemli)[[[[Dönemli))[[[[[[[[[[Dönemli))))
  • [FONT:0) Basitleştirilmiş uyumluluk[[[Dönetici: 1) Merkezileştirilmiş günlük tutma politikaları tüm filo boyunca uygulanması daha kolaydır.
  • [FONT:0) Alçakgömürücü altyapı maliyetleri[Dönetici:0)[Dönetici:0) Düşük altyapı maliyetleri) - Her hizmet kendi günlük gemisini çalıştırıyor (kendi tampon ve depolama ile), tekton bir kovalama ile, azaltma, kesmeyi ele geçiriyor.
  • [FONT:0]Easier debugging[[Döntgen: 1) Soru sormak için bir yer. seçmek istemiyorsanız birden çok kaynaktan giriş yapmanız gerekmez.
  • [FONT:0]Konsistent log seviyeleri[[Dönetici: 1 ) – Tekton küresel log seviye eşlerini (örneğin, sadeceFLT:11) ve üretimde yukarıdakiler veya korelasyon kimlikleri otomatik olarak uygulayabilir.
  • [FONT:0]Kaynak izolasyonu[[Dönetici:0)[[Dönetici:0))[[[Dönetici:0))) – Tekton pod, yüklemeyi işlemek için yeterli CPU/memory'ye sahip olabilir, uygulama pods'un bağımsız.

Ticaret-offs ve Singleton Loggingten Kaçmak

Hiçbir mimarlık mükemmel değildir. Singleton log birkaç mağara tanıtıyor:

  • [FONT=0) Tek bir başarısızlık noktası [Dönetici: 1] – Tekton pod ölürse, loglar kaybolur (müşteri tarafında tamponsuzsunuz). yüksek-tavuş ortamlarda, hatta birkaç saniye bile binlerce günlük çizgiyi bırakabilir.
  • [FONT=0)Bottleneck kapasitesi) - Tek bir Fluentd örneği tüm günlük trafiği ele almalıdır. (günde gigabaytların yüzlerce), Kafka gibi bir aggregator ölçeklendirmek veya tekton kalıbını kırmak gerekir.
  • [FONT:0) Ağ Geçim[Dönetici[Dönetici:0)[BİLMİŞKİNCİYLEMLER: 0 ) Ağa Geçme[Dönetici[DÜye Olmayanlar İçindekiler)
  • [FONT:0] Gerçek tektonun [Dönetici:0]Complexitesi [Dönetici:0) Gerçek tektonun [Düzücük: 1) Achieving tam olarak bir başarısızlık koşulu altında çalışan bir örnek (gösterme, yuvarlanma, bölünmüş-brain) lider seçimi veya dış kilitleme gerektirir, operasyonel yük eklemek.
  • [FONT:0]Limited esneklik[[DDev vs. Prod veya deneysel hizmetler) tekton çok sert bulabilir.

Kümeniz 20-50 düğümün ötesine büyürse veya tek bir pod'un ne işe yarayabileceğini aşırsa alternatif desenler göz önünde bulundurun.TheETHFLT:0)DaemonSet + Centralized Storage), büyük kümeler için de facto endüstri standardıdır. küçük bir araçta güçlü bir tutarlılığa ihtiyacınız olduğunda, küçük seviyeli bir mikro hizmet filosuna veya hala eğlenceli bir koleksiyoncuya tamamlayıcı olarak, küresel sorgular için tek bir tek bir aggregatora.

Singleton Logging için en iyi uygulamalar

Uygulamadan Yapılı Logging

Tüm hizmetleri, sabit alanlarda (JSON) bir yapılandırılmış formatta (JSON) yayılabilir: 03.03.2012, [[Dönemli, [[Dönemli, s.) veya s.

Buffer Locally, Singleton Outages'ı Hayatta Kalmak için

Yankar Fluent Bit, disk tamponlama sağlar.Konfigure aİLDİT:20.||||||||s.)||s.|s.|s.

Singleton'ın Sağlığını Takip Etmek

Tekton için Prometheus metrikleri ayarlayın (örneğin, işleyici olayların sayısı, hata oranı, tampon boyutu).Buffer doldurmayı veya tekton oturum açmayı durdururken uyarılar oluşturun.Use KubernetesurDesurf:24 are applied for a singleton, but dikey pod autoscaling (VPA) can adjust resources.

Implement Retry ve Backpress

Giriş boru hattı yeniden baskıyı özenle idare etmelidir. Tekton boğulursa, 429 Çok fazla İstek ve müşteri (veya yancar) üst üste üst üste üst üste binmelidir. Aksi takdirde, tekton paketleri veya kazayı yük altına alabilir.

İngress

Tekton servisi sadece küme içinde (ClusterIP) dışsal olarak ortaya çıkarsanız, AğPolicies ile kısıtlayın ve TLS'yi günlük ulaşım için kullanır. Fluentd TLS girişini 444 ile destekler.

Gelişmiş Desenler: Buffer Katmanlı ile Devletsiz Singleton

Şişenin kaygısını aşmak için, Kafkas gibi bir tamponlama katmanı eklemeyi düşünün:0)Kafka) veya [[Dönetici)Redis), tüketicinin ön kısmında tekton kalırken, Kafkaslar (veya yankarlar) Kafkaslar Kafkas'ı korumak için tek bir mantıksal oturumdan yararlanırlar.

Sonuç Sonuç Sonuç Sonuç Sonuç Sonuç Sonuç Sonuç

Kubernetes ile mikro hizmette giriş için tekton kalıbının uygulanması, temiz, tutarlı ve yönetilebilir bir giriş boru hattının orta ölçekli kümesleme için merkezileştirilmesi, parçalanmayı azaltın, üniforma formatını azaltır ve sorun gidermeyi gerektirir. ancak, kullanılabilirliğe dikkat edin, lider seçimi ve kaynak ölçeklendirmesi gerekir.Birçok takım için, tekton kalıbı tam bir başlangıç noktası olarak kümeslenerek kümesbütün bir kayıt defterini haklı çıkarmak için yeterince büyük bir başlangıç noktası olarak hizmet eder.

Giriş hacminizi, başarısızlık toleransını ve takım uzmanlığınızı değerlendirme zamanı alın. Tekton Fluentd aggregator ile başlayın, sonra bir DaemonSet tabanlı koleksiyoncuya ihtiyaçlarınızla merkezi bir lavaboyu genişletin.