Technologieaustausch

ELK-Protokollsammlung – Sammeln Sie Anwendungsprotokolle, die im Pod-Modus im k8s-Cluster ausgeführt werden

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina


Vorwort

Filebeat+ELK-Konstruktions- und Interpretationsreferenz
Verknüpfung:k8s-Lernen – detaillierter Prozess der ELK-Protokollerfassung basierend auf k8s
In diesem Kapitel wird die Beschreibung nicht wiederholt

Umfeld

virtuelle Maschine

IP-AdresseCPU-NameCPUErinnerungFestplatte
192.168.10.11master012 CPU-Dual-Core4G100 G
192.168.10.12Arbeiter012 CPU-Dual-Core4G100 G
192.168.10.13Arbeiter022 CPU-Dual-Core4G100 G
192.168.10.17ELCH1 CPU-Dual-Core4G100 G

Version Centos7.9
K8s-1.27 bereitgestellt
Der ELK-Server hat Filebeat+ELK bereitgestellt

Die Implementierung erfolgt durch Ausführen von Filebeat (Sidecar) im Anwendungs-Pod. Dieses Mal wird Tomcat als Beispiel zur Veranschaulichung verwendet.

1. Bereiten Sie das Tomcat-Datenverzeichnis vor

Standardmäßig gibt es im Tomcat-Container keine Website-Homepage-Datei. Wenn diese nicht hinzugefügt wird, kann der Container im Pod nicht normal ausgeführt werden.

work01-Hostvorgang

mkdir /opt/tomcatwebroot
echo "tomcat is running" > /opt/tomcatwebroot/index.html
  • 1
  • 2

2. Schreiben Sie eine Ressourcenlistendatei für die Tomcat-Anwendung

Master-Host-Betrieb

vim tomcat-logs.yaml
  • 1
apiVersion: apps/v1
kind: Deployment
metadata:
  name: tomcat-demo
  namespace: default
spec:
  replicas: 2
  selector:
    matchLabels:
      project: www
      app: tomcat-demo
  template:
    metadata:
      labels:
        project: www
        app: tomcat-demo
    spec:
      nodeName: worker01
      containers:
      - name: tomcat
        image: tomcat:latest
        imagePullPolicy: IfNotPresent
        ports:
        - containerPort: 8080
          name: web
          protocol: TCP
        resources:
          requests:
            cpu: 0.5
            memory: 500Mi
          limits:
            cpu: 1
            memory: 1Gi
        livenessProbe:
          httpGet:
            path: /
            port: 8080
          initialDelaySeconds: 60
          timeoutSeconds: 20
        readinessProbe:
          httpGet:
            path: /
            port: 8080
          initialDelaySeconds: 60
          timeoutSeconds: 20
        volumeMounts:
        - name: tomcat-logs
          mountPath: /usr/local/tomcat/logs
        - name: tomcatwebroot
          mountPath: /usr/local/tomcat/webapps/ROOT

      - name: filebeat
        image: docker.io/elastic/filebeat:7.17.2
        imagePullPolicy: IfNotPresent
        args: [
          "-c", "/etc/filebeat.yml",
          "-e",
        ]
        resources:
          limits:
            memory: 500Mi
          requests:
            cpu: 100m
            memory: 100Mi
        securityContext:
          runAsUser: 0
        volumeMounts:
        - name: filebeat-config
          mountPath: /etc/filebeat.yml
          subPath: filebeat.yml
        - name: tomcat-logs
          mountPath: /usr/local/tomcat/logs
      volumes:
      - name: tomcat-logs
        emptyDir: {}
      - name: tomcatwebroot
        hostPath:
          path: /opt/tomcatwebroot
          type: Directory
      - name: filebeat-config
        configMap:
          name: filebeat-config
---
apiVersion: v1
kind: ConfigMap
metadata:
  name: filebeat-config
  namespace: default

data:
  filebeat.yml: |-
    filebeat.inputs:
    - type: log
      paths:
        - /usr/local/tomcat/logs/catalina.*

      fields:
        app: www
        type: tomcat-catalina
      fields_under_root: true
      multiline:
        pattern: '^['
        negate: true
        match: after

    setup.ilm.enabled: false
    setup.template.name: "tomcat-catalina"
    setup.template.pattern: "tomcat-catalina-*"

    output.logstash:
      hosts: ['192.168.10.17:5056']
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101
  • 102
  • 103
  • 104
  • 105
  • 106
  • 107
  • 108
  • 109
  • 110
  • 111

Dieses Yaml definiert eine Tomcat- und Filebeat-Bereitstellung sowie Filebeat-Konfigurationsdateien. Lassen Sie uns diese der Reihe nach erklären.
Abschnitt „Bereitstellung“.

apiVersion: apps/v1
kind: Deployment
metadata:
  name: tomcat-demo
  namespace: default
spec:
  replicas: 2
  selector:
    matchLabels:
      project: www
      app: tomcat-demo
  template:
    metadata:
      labels:
        project: www
        app: tomcat-demo
    spec:
      nodeName: worker01
      containers:
      - name: tomcat
        image: tomcat:latest
        imagePullPolicy: IfNotPresent
        ports:
        - containerPort: 8080
          name: web
          protocol: TCP
        resources:
          requests:
            cpu: 0.5
            memory: 500Mi
          limits:
            cpu: 1
            memory: 1Gi
        livenessProbe:
          httpGet:
            path: /
            port: 8080
          initialDelaySeconds: 60
          timeoutSeconds: 20
        readinessProbe:
          httpGet:
            path: /
            port: 8080
          initialDelaySeconds: 60
          timeoutSeconds: 20
        volumeMounts:
        - name: tomcat-logs
          mountPath: /usr/local/tomcat/logs
        - name: tomcatwebroot
          mountPath: /usr/local/tomcat/webapps/ROOT

      - name: filebeat
        image: docker.io/elastic/filebeat:7.17.2
        imagePullPolicy: IfNotPresent
        args: [
          "-c", "/etc/filebeat.yml",
          "-e",
        ]
        resources:
          limits:
            memory: 500Mi
          requests:
            cpu: 100m
            memory: 100Mi
        securityContext:
          runAsUser: 0
        volumeMounts:
        - name: filebeat-config
          mountPath: /etc/filebeat.yml
          subPath: filebeat.yml
        - name: tomcat-logs
          mountPath: /usr/local/tomcat/logs
      volumes:
      - name: tomcat-logs
        emptyDir: {}
      - name: tomcatwebroot
        hostPath:
          path: /opt/tomcatwebroot
          type: Directory
      - name: filebeat-config
        configMap:
          name: filebeat-config
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82

Metadaten: Definiert den Namen und Namespace der Bereitstellung.
spec: Enthält die detaillierte Spezifikation des Deployments.
Replikate: Gibt die Anzahl der Replikate an, d. h. die Anzahl der ausgeführten zwei Tomcat-Instanzen.
Selektor: Definiert einen Selektor für passende Pod-Labels.
Vorlage: Beschreibt die Pod-Vorlage, einschließlich Metadaten und Spezifikationen.
nodeName: Gibt den Knotennamen (worker01) an, auf dem der Pod ausgeführt wird.
Container: Es sind zwei Container definiert: Tomcat und Filebeat.

Tomcat-Container:
Bild: Verwenden Sie tomcat:latest Bild.
ports: Geben Sie Port 8080 frei.
Ressourcen: Definiert Ressourcenanforderungen und -limits.
LivenessProbe und ReadinessProbe: werden für Gesundheitschecks verwendet.
volumeMounts: Zwei Volumes werden gemountet.

Filebeat-Container:
Bild: Verwenden Sie das Bild filebeat:7.17.2.
args: Gibt Startparameter an.
Ressourcen: Definiert Ressourcenanforderungen und -limits.
securityContext: Als Root-Benutzer ausführen.
volumeMounts: Zwei Volumes werden gemountet.

Bände:
tomcat-logs: Verwenden Sie emptyDir-Volumes.
tomcatwebroot: HostPath-Volume verwenden.
filebeat-config: ConfigMap-Volumes verwenden.


Abschnitt „Konfigurationsdatei“ (ConfigMap).

apiVersion: v1
kind: ConfigMap
metadata:
  name: filebeat-config
  • 1
  • 2
  • 3
  • 4

erklären
Metadaten: Definiert den Namen von ConfigMap.
Daten: sollten den Konfigurationsinhalt von Filebeat enthalten (hier weggelassen).

3. Schreiben Sie die Logstash-Konfigurationsdatei

Elk-Hostkonfiguration
Schreiben Sie Logstash-Konfigurationsdateien, ohne vorherige Konfigurationsdateien zu beeinträchtigen

vim /etc/logstash/conf.d/tomcat-logstash-to-elastic.conf
  • 1
input {
  beats {
    host => "0.0.0.0"
    port => "5056"
  }
}

filter {

}


output {
    elasticsearch {
      hosts => "192.168.10.17:9200"
      index => "tomcat-catalina-%{+yyyy.MM.dd}"
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

laufen

/usr/share/logstash/bin/logstash -f /etc/logstash/conf.d/tomcat-logstash-to-elastic.conf --path.data /usr/share/logstash/data3 &
  • 1

Stellen Sie sicher, dass der Port aktiv ist

ss -anput | grep ":5056"
  • 1

Fügen Sie hier eine Bildbeschreibung ein

4. Wenden Sie die Tomcat-Ressourcenlistendatei an

Master-Host-Betrieb

kubectl apply -f tomcat-logs.yaml
  • 1

Warten Sie eine Weile, da Sie das Bild herunterladen müssen
Dann überprüfen Sie den Pod
Hinweis: VPN erforderlich

kubectl get deployment.apps
kubectl get pods
  • 1
  • 2

Fügen Sie hier eine Bildbeschreibung ein
Fügen Sie hier eine Bildbeschreibung ein

5. Überprüfen Sie, ob Tomcat und Filebeat im Pod normal sind

Von Tomcat generierte Protokolle anzeigen (-c: Container)
Fügen Sie hier eine Bildbeschreibung ein
Filebeat-Sammlungsprotokolle anzeigen

 kubectl logs tomcat-demo-664584f857-k8whd -c filebeat
  • 1

Fügen Sie hier eine Bildbeschreibung ein

6. Index zur Kiana-Seite hinzufügen

Host-Browser-Zugriff

192.168.10.17:5601
  • 1

Fügen Sie hier eine Bildbeschreibung ein
Fügen Sie hier eine Bildbeschreibung ein
Fügen Sie hier eine Bildbeschreibung ein
Fügen Sie hier eine Bildbeschreibung ein
Fügen Sie hier eine Bildbeschreibung ein
Fügen Sie hier eine Bildbeschreibung ein
Fügen Sie hier eine Bildbeschreibung ein
Sie können sehen, dass Sie das Protokoll gesehen haben
Fügen Sie hier eine Bildbeschreibung ein
Beenden
Wenn es Ihnen hilft, klicken Sie bitte und folgen Sie ihm