Condivisione della tecnologia

Raccolta log ELK: raccogli i log delle applicazioni in esecuzione in modalità pod nel cluster k8s

2024-07-12

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


Prefazione

Riferimento per la costruzione e l'interpretazione di Filebeat+ELK
Collegamento:Apprendimento k8s: processo dettagliato di raccolta dei registri ELK basato su k8s
Questo capitolo non ripeterà la descrizione

ambiente

macchina virtuale

Io sonoNome della CPUprocessoreMemoriadisco rigido
192.168.10.11maestro01Dualcore da 2 CPU4G100 GRAMMI
192.168.10.12lavoratore01Dualcore da 2 CPU4G100 GRAMMI
192.168.10.13lavoratore02Dualcore da 2 CPU4G100 GRAMMI
192.168.10.17ALCEDual core da 1 CPU4G100 GRAMMI

Versione centos7.9
Distribuito k8s-1.27
Il server ELK ha distribuito Filebeat+ELK

Viene implementato eseguendo filebeat (sidecar) nell'applicazione Pod. Questa volta, Tomcat verrà utilizzato come esempio per illustrare.

1. Preparare la directory dei dati di Tomcat

Per impostazione predefinita, nel contenitore Tomcat non è presente alcun file della home page del sito Web. La mancata aggiunta del contenitore impedirà il normale funzionamento del contenitore nel pod.

operazione host work01

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

2. Scrivere il file dell'elenco delle risorse dell'applicazione Tomcat

operazione dell'host principale

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

Questo yaml definisce i file di distribuzione Tomcat e Filebeat e di configurazione Filebeat.
Sezione di distribuzione

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

metadati: definisce il nome e lo spazio dei nomi del Deployment.
spec: contiene le specifiche dettagliate del Deployment.
repliche: specifica il numero di repliche, ovvero l'esecuzione di due istanze Tomcat.
selettore: definisce un selettore per la corrispondenza delle etichette dei pod.
modello: descrive il modello del pod, inclusi metadati e specifiche.
nodeName: specifica il nome del nodo (worker01) su cui è in esecuzione il pod.
contenitori: sono definiti due contenitori: Tomcat e Filebeat.

Contenitore Tomcat:
immagine: utilizza Tomcat: immagine più recente.
porte: esporre la porta 8080.
risorse: definisce le richieste e i limiti delle risorse.
livenessProbe e readinessProbe: utilizzati per i controlli di integrità.
volumeMounts: vengono montati due volumi.

Contenitore Filebeat:
immagine: usa filebeat:7.17.2 immagine.
args: specifica i parametri di avvio.
risorse: definisce le richieste e i limiti delle risorse.
securityContext: esegui come utente root.
volumeMounts: vengono montati due volumi.

volumi:
Tomcat-logs: utilizza volumi emptyDir.
tomcatwebroot: utilizza il volume hostPath.
filebeat-config: utilizza i volumi ConfigMap.


Sezione del file di configurazione (ConfigMap).

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

spiegare
metadati: definisce il nome di ConfigMap.
dati: dovrebbe contenere il contenuto della configurazione di Filebeat (omesso qui).

3. Scrivere il file di configurazione logstash

configurazione dell'host Elk
Scrivi file di configurazione logstash senza influenzare i file di configurazione precedenti

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

correre

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

Verificare che la porta sia attiva

ss -anput | grep ":5056"
  • 1

Inserisci qui la descrizione dell'immagine

4. Applicare il file dell'elenco delle risorse Tomcat

operazione dell'host principale

kubectl apply -f tomcat-logs.yaml
  • 1

Aspetta un po' perché devi scaricare l'immagine
Quindi controlla il pod
Nota: è richiesta una VPN

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

Inserisci qui la descrizione dell'immagine
Inserisci qui la descrizione dell'immagine

5. Verifica se Tomcat e filebeat nel Pod sono normali

Visualizza i log generati da Tomcat (-c: contenitore)
Inserisci qui la descrizione dell'immagine
Visualizza i registri della raccolta filebeat

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

Inserisci qui la descrizione dell'immagine

6. Aggiungi l'indice alla pagina kiana

Accesso al browser host

192.168.10.17:5601
  • 1

Inserisci qui la descrizione dell'immagine
Inserisci qui la descrizione dell'immagine
Inserisci qui la descrizione dell'immagine
Inserisci qui la descrizione dell'immagine
Inserisci qui la descrizione dell'immagine
Inserisci qui la descrizione dell'immagine
Inserisci qui la descrizione dell'immagine
Puoi vedere che hai visto il registro
Inserisci qui la descrizione dell'immagine
Fine
Se ti è d'aiuto clicca e segui