Wie man

So senden Sie Kubernetes-Protokolle an externe Elasticsearch

So senden Sie Kubernetes-Protokolle an externe Elasticsearch

Nachdem Sie Ihren Kubernetes-Cluster in der Cloud oder in einer On-Premise-Umgebung eingerichtet haben, müssen Sie einfach und flexibel überprüfen, was in Ihrem Lager vor sich geht. Eine der besten Möglichkeiten, dies zu tun, besteht darin, Protokolle zu untersuchen, wann immer Sie etwas reparieren oder wissen müssen, was zu einem bestimmten Zeitpunkt passiert ist. Während es möglich ist, sich in Ihren Cluster einzuloggen und die Logs Ihrer Pods oder Ihrer Hosts zu überprüfen, wird es plötzlich mühsam, die Logs jedes Pods einzeln zu überprüfen, insbesondere wenn Sie viele Pods in Ihren k8s haben. Um es Ihnen zu erleichtern, den Status Ihres Clusters auf einer Plattform zu überprüfen, werden wir Elasticsearch und Kibana auf einem externen Server bereitstellen und dann Protokolle von Ihrem Cluster mit Elastics Beats (Filebeat, Metricbeat usw). Wenn Sie bereits einen ELK-Stack am Laufen haben, desto besser.

Das Diagramm unten zeigt die Architektur, die wir in diesem Handbuch erreichen werden. Es handelt sich im Wesentlichen um einen Kubernetes-Cluster mit 3 Knoten und einem Elasticsearch- und Kibana-Server, der Protokolle vom Cluster über Filebeat- und Metricbeat-Protokollkollektoren empfängt.

Zuerst benötigen wir einen Elasticsearch-Server, auf dem auch Kibana installiert ist. Sie können Logstash weglassen, aber falls Sie eine weitere Filterung Ihrer Logs benötigen, können Sie es installieren lassen. Befolgen Sie die folgenden Anleitungen, um Elasticsearch und Kibana zu installieren:

So installieren Sie ElasticSearch 7.x auf CentOS 7

So installieren Sie Elasticsearch 7 unter Debian

So installieren Sie Elasticsearch 7,6,5 unter Ubuntu

Stellen Sie auf Ihrem Elasticsearch-Host sicher, dass er von außen erreichbar ist. Sie können die folgenden Teile in Ihrer Konfiguration bearbeiten

$ sudo vim /etc/elasticsearch/elasticsearch.yml # Setzt die Bindeadresse auf eine bestimmte IP (IPv4 oder IPv6): # network.Gastgeber: 0.0.0.0 # # Legen Sie einen benutzerdefinierten Port für HTTP fest: # http.Port: 9200 #

Erlaube dann den Port auf deiner Firewall

sudo Firewall-cmd --permanent --add-port=9200/tcp sudo Firewall-cmd --reload

Zweitens müssen Sie über einen Kubernetes-Cluster verfügen, da wir uns darum kümmern, Logs von dort abzurufen. Wir haben ein paar Anleitungen, die Ihnen bei der Einrichtung helfen, falls Sie schnell eine booten müssen. Sie werden unten geteilt:

Kubernetes-Cluster auf Ubuntu mit kubeadm . installieren

Kubernetes-Cluster auf CentOS 7 mit kubeadm . installieren

Kubernetes-Cluster auf AWS einfach mit EKS einrichten

Kubernetes-Cluster mit Ansible und Kubespray bereitstellen

Installieren Sie den Kubernetes-Produktionscluster mit Rancher RKE

Nachdem Sie bereit sind, können wir mit der Installation der Filebeat- und Metricbeat-Pods in unserem Cluster fortfahren, um mit dem Sammeln und Senden der Protokolle an ELK zu beginnen. Stellen Sie sicher, dass Sie den kubectl-Befehl in Ihrem Kubernetes-Cluster ausführen können.

Schritt 1: Laden Sie Filebeat- und Metricbeat-Beispieldateien herunter

Melden Sie sich bei Ihrem Kubernetes-Masterknoten an und führen Sie den folgenden Befehl aus, um die von Elastic bereitgestellten Filebeat- und Metricbeat-Yaml-Dateien abzurufen.

cd ~ curl -L -O https://raw.githubusercontent.com/elastisch/beats/7.9/deploy/kubernetes/filebeat-kubernetes.yaml curl -L -O https://raw.githubusercontent.com/elastisch/beats/7.9/deploy/kubernetes/metricbeat-kubernetes.jaml

Schritt 2: Bearbeiten Sie die Dateien entsprechend Ihrer Umgebung

In beiden Dateien müssen wir nur ein paar Dinge ändern. Unter der ConfigMap finden Sie die Ausgabe von Elasticseach wie unten gezeigt. Ändern Sie die IP (192.168.10.123) und Port (9200) zu dem Ihres Elasticsearch-Servers.

 Ausgabe.elastische Suche: Hosts: ['$ELASTICSEARCH_HOST:192.168.10.123:$ELASTICSEARCH_PORT:9200'] #Benutzername: $ELASTICSEARCH_USERNAME #Passwort: $ELASTICSEARCH_PASSWORD

Unter DaemonSet in derselben Datei finden Sie die folgende Konfiguration. Beachten Sie, dass wir die zu ändernden Bereiche anzeigen. Bearbeiten Sie die IP (192.168.10.123) und Port (9200) entsprechend dem Ihres Elastcsearch-Servers. Wenn Sie Benutzernamen und Passwort für Ihre Elasticsearch konfiguriert haben, können Sie diese in den angezeigten kommentierten Abschnitten hinzufügen.

 env: - Name: ELASTICSEARCH_HOST Wert: "192.168.10.123" - Name: ELASTICSEARCH_PORT Wert: "9200" #- Name: ELASTICSEARCH_USERNAME # Wert: Elastisch #- Name: ELASTICSEARCH_PASSWORD # Wert: changeme - Name: ELASTIC_CLOUD_ID

Beachten Sie, dass Sie, wenn Sie Ihre Filebeat- und Metricbeat-Ressourcen in einem anderen Namespace bereitstellen möchten, einfach alle Instanzen von „kube-system“ zu einem deiner Wahl.

Unter Bereitstellung können Sie die bereitzustellende Version von Filebeat und Metricbeat ändern, indem Sie das Image bearbeiten (Docker.elastisch.co/beats/metricbeat:7.9.0) auf dem Ausschnitt unten zu sehen. Ich werde Version 7 verwenden.9.0.

###Für Metricbeat#### Spezifikation: serviceAccountName: metricbeat hostNetwork: true dnsPolicy: ClusterFirstWithHostNet Container: - Name: metricbeat image: docker.elastisch.co/beats/metricbeat:7.9.0

Machen Sie dasselbe für die filebeat yml-Datei, wenn Sie auch deren Version ändern möchten.

###Für Filebeat#### Spezifikation: serviceAccountName: metricbeat hostNetwork: true dnsPolicy: ClusterFirstWithHostNet Container: - Name: metricbeat image: docker.elastisch.co/beats/filebeat:7.9.0

Wichtiger Hinweis

Wenn Sie die Beats auf dem Masterknoten bereitstellen möchten, müssen wir Toleranzen hinzufügen to. Ein Beispiel für metricbeat ist unten gezeigt. Das ist nicht die ganze DaemonSet-Konfiguration. Genau der Teil, der uns interessiert. Die anderen Teile kannst du intakt lassen. Fügen Sie die Toleranz hinzu, wie in der Konfiguration unten unter Spezifikation gezeigt. Dasselbe kann je nach Bedarf für die Filebeat-Konfiguration gelten.

apiVersion: apps/v1 Art: DaemonSet Metadaten: Name: metricbeat Namespace: Kube-System Labels: k8s-app: metricbeat spec: selector: matchLabels: k8s-app: metricbeat Template: Metadaten: Labels: k8s-app: metricbeat spec: # ##PART TO EDIT### # Diese Toleranz soll das Daemonset auf Master-Knoten lauffähig machen # Entfernen Sie es, wenn Ihre Master Pods-Toleranzen nicht ausführen können: - Schlüssel: node-role.Kubernetes.io/master-Effekt: NoSchedule ####END OF EDIT### serviceAccountName: metricbeat-terminationGracePeriodSeconds: 30 hostNetwork: true dnsPolicy: ClusterFirstWithHostNet container: - name: metricbeat image: docker.elastisch.co/beats/metricbeat:7.9.0 Argumente: [ "-c", "/etc/metricbeat.yml", "-e",

Schritt 4: Bereitstellung in Kubernetes

Nachdem wir alle Änderungen vorgenommen haben und unser Elasticsearch von Ihrem Kubernetes-Cluster aus gut erreichbar ist, ist es an der Zeit, unsere Beats bereitzustellen. Melden Sie sich bei Ihrem Masterknoten an und führen Sie die folgenden Befehle aus:

kubectl apply -f metricbeat-kubernetes.yaml kubectl apply -f filebeat-kubernetes.jaml

Bestätigen Sie, dass die Pods bereitgestellt wurden und nach einiger Zeit erfolgreich ausgeführt werden.

$ kubectl get pods -n kube-system NAME BEREIT STATUS RESTARTS ALTER calico-kube-controllers-c9784d67d-k85hf 1/1 Wird ausgeführt 5 11d calico-node-brjnk 1/1 Wird ausgeführt 7 10d calico-node-nx869 1/1 Wird ausgeführt 1 10d calico-node-whlzf 1/1 Laufend 6 11d coredns-f9fd979d6-6vztd 1/1 Laufend 5 11d coredns-f9fd979d6-8gz4l 1/1 Laufend 5 11d etcd-kmaster.diab.mfs.co.ke 1/1 Laufen 5 11d filebeat-hlzhc 1/1 Laufen 7 7d23h <== filebeat-mcs67 1/1 Running 1 7d23h <== kube-apiserver-kmaster.diab.mfs.co.ke 1/1 Running 5 11d kube-controller-manager-kmaster.diab.mfs.co.ke 1/1 Running 5 11d kube-proxy-nlrbv 1/1 Running 5 11d kube-proxy-zdcbg 1/1 Running 1 10d kube-proxy-zvf6c 1/1 Running 7 10d kube-scheduler-kmaster.diab.mfs.co.ke 1/1 Running 5 11d metricbeat-5fw98 1/1 Running 7 8d <== metricbeat-5zw9b 1/1 Running 0 8d <== metricbeat-jbppx 1/1 Running 1 8d <==

Schritt 5: Index auf Kibana erstellen

Sobald unsere Pods mit der Ausführung beginnen, senden sie zusammen mit den Protokollen sofort ein Indexmuster an Elasticsearch. Melden Sie sich bei Ihrer Kibana an und klicken Sie auf „Stapelverwaltung>Indexverwaltung” und Sie sollten Ihre Indizes sehen können.

Klicke auf "Indexverwaltung

Und da sind unsere Indizes.

Um ein Indexmuster zu erstellen, klicken Sie auf „Indexmusters“ dann drücke „Indexmuster erstellen“.

Geben Sie auf der nächsten Seite den Namen des Indexmusters ein, das entweder mit filebeat oder metricbeat übereinstimmt, und sie sollten als bereits übereinstimmend angezeigt werden.

Erstellen Sie das Muster und klicken Sie dann auf „Nächster Schritt

Wählen "@Zeitstempel” auf der Dropdown-Liste dann “Indexmuster erstellen

Schritt 6: Entdecken Sie Ihre Daten

Nachdem das Indexmuster erstellt wurde, klicken Sie auf „Entdecken",

Wählen Sie dann das von uns erstellte Indexmuster aus.

Fazit

Jetzt haben wir leichtgewichtige Beats, die Logs und Metriken aus Ihrem Kubernetes-Cluster abrufen und sie zur Indexierung und flexiblen Suche an ein externes Elasticsearch senden.

Während Ihr Kind die Füllung seines neuen Spielzeugs liebt, könnte es Sie hacken
Interaktives Spielzeug kann wirklich süß und kuschelig sein und sehr unschuldig aussehen. Aber während Ihr Kind stundenlang damit spielt, könnte es si...
Es liegt nicht nur an dir, dass dein iPhone langsamer wird!
Nicht nur Sie: Ihr iPhone wird langsamer! Nee. Es ist nicht nur du. Es ist nicht nur eine Erfindung Ihrer Fantasie. Ihr iPhone ist nicht so schnell wi...
Das Aufladen Ihrer Geräte wird ein wenig einfacher
Der Aufhänger beim kabellosen Laden ist, dass Sie nicht weit vom Ladegerät entfernt sein können. Sie müssen sich immer noch in der Nähe des Ladepads o...