Partage de technologie

Collecte de journaux ELK : collectez les journaux d'application exécutés en mode pod dans le cluster k8s

2024-07-12

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


Préface

Référence de construction et d'interprétation Filebeat+ELK
Lien:Apprentissage k8s - processus détaillé de collecte de journaux ELK basé sur k8s
Ce chapitre ne répétera pas la description

environnement

machine virtuelle

IpNom du processeurCPUMémoiredisque dur
192.168.10.11maître012 processeurs double cœur4G100G
192.168.10.12travailleur012 processeurs double cœur4G100G
192.168.10.13travailleur022 processeurs double cœur4G100G
192.168.10.17WAPITI1 processeur double cœur4G100G

Version centos7.9
K8s-1.27 déployé
Le serveur ELK a déployé Filebeat+ELK

Il est implémenté en exécutant filebeat (sidecar) dans le Pod de l'application. Cette fois, Tomcat sera utilisé comme exemple pour illustrer.

1. Préparez le répertoire de données Tomcat

Par défaut, il n'y a pas de fichier de page d'accueil du site Web dans le conteneur Tomcat. Si vous ne l'ajoutez pas, le conteneur dans le pod ne fonctionnera pas normalement.

opération de l'hôte work01

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

2. Écrivez le fichier de liste de ressources de l'application Tomcat

fonctionnement de l'hôte maître

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

Ce yaml définit un fichier de configuration Tomcat et Filebeat Deployment et Filebeat. Expliquons-les tour à tour.
Section Déploiement

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

métadonnées : définit le nom et l'espace de noms du déploiement.
spec : contient la spécification détaillée du déploiement.
répliques : spécifie le nombre de répliques, c'est-à-dire exécutant deux instances Tomcat.
sélecteur : définit un sélecteur pour faire correspondre les étiquettes de pod.
modèle : décrit le modèle de pod, y compris les métadonnées et les spécifications.
nodeName : spécifie le nom du nœud (worker01) sur lequel le Pod est exécuté.
conteneurs : Deux conteneurs sont définis : Tomcat et Filebeat.

Conteneur Tomcat :
image : utilisez Tomcat : dernière image.
ports : exposez le port 8080.
ressources : définit les demandes et les limites de ressources.
livenessProbe et readinessProbe : utilisés pour les contrôles de santé.
volumeMounts : deux volumes sont montés.

Conteneur Filebeat :
image : utilisez filebeat:7.17.2 image.
args : spécifie les paramètres de démarrage.
ressources : définit les demandes et les limites de ressources.
securityContext : exécuter en tant qu'utilisateur root.
volumeMounts : deux volumes sont montés.

tomes:
tomcat-logs : utilisez les volumes emptyDir.
tomcatwebroot : utilisez le volume hostPath.
filebeat-config : utilisez les volumes ConfigMap.


Section Fichier de configuration (ConfigMap)

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

expliquer
métadonnées : définit le nom de ConfigMap.
data : doit contenir le contenu de configuration de Filebeat (omis ici).

3. Écrivez le fichier de configuration logstash

configuration de l'hôte wapiti
Écrire des fichiers de configuration logstash sans affecter les fichiers de configuration précédents

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

courir

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

Vérifiez que le port est actif

ss -anput | grep ":5056"
  • 1

Insérer la description de l'image ici

4. Appliquer le fichier de liste de ressources Tomcat

fonctionnement de l'hôte maître

kubectl apply -f tomcat-logs.yaml
  • 1

Attendez un peu car vous devez télécharger l'image
Ensuite, vérifiez le pod
Remarque : VPN requis

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

Insérer la description de l'image ici
Insérer la description de l'image ici

5. Vérifiez si Tomcat et filebeat dans le Pod sont normaux

Afficher les journaux générés par Tomcat (-c : conteneur)
Insérer la description de l'image ici
Afficher les journaux de collecte filebeat

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

Insérer la description de l'image ici

6. Ajouter un index à la page Kiana

Accès au navigateur hôte

192.168.10.17:5601
  • 1

Insérer la description de l'image ici
Insérer la description de l'image ici
Insérer la description de l'image ici
Insérer la description de l'image ici
Insérer la description de l'image ici
Insérer la description de l'image ici
Insérer la description de l'image ici
Vous pouvez voir que vous avez vu le journal
Insérer la description de l'image ici
Finition
Si cela vous aide, veuillez cliquer et suivre