Berbagi teknologi

Pengumpulan log ELK--Kumpulkan log aplikasi yang berjalan dalam mode pod di kluster k8s

2024-07-12

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


Kata pengantar

Referensi konstruksi dan interpretasi Filebeat+ELK
Tautan:pembelajaran k8s – proses mendetail pengumpulan log ELK berdasarkan k8s
Bab ini tidak akan mengulangi deskripsinya

lingkungan

mesin virtual

Aku pnama CPUprosesorPenyimpananharddisk
192.168.10.11master012cpu inti gandaJaringan Jaringan Jaringan Jaringan 4G100 GRAM
192.168.10.12pekerja012cpu inti gandaJaringan Jaringan Jaringan Jaringan 4G100 GRAM
192.168.10.13pekerja022cpu inti gandaJaringan Jaringan Jaringan Jaringan 4G100 GRAM
192.168.10.17RUSA BESAR1cpu inti gandaJaringan Jaringan Jaringan Jaringan 4G100 GRAM

Versi centos7.9
K8s-1.27 yang dikerahkan
Server ELK telah menerapkan Filebeat+ELK

Hal ini diimplementasikan dengan menjalankan filebeat (sidecar) di aplikasi Pod. Kali ini, Tomcat akan digunakan sebagai contoh ilustrasi.

1. Siapkan direktori data Tomcat

Secara default, tidak ada file beranda situs web di container Tomcat. Kegagalan menambahkannya akan menyebabkan container di pod gagal berjalan secara normal.

operasi host work01

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

2. Tulis file daftar sumber daya aplikasi Tomcat

operasi tuan rumah utama

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

Yaml ini mendefinisikan file konfigurasi Tomcat dan Filebeat Deployment dan Filebeat. Mari kita jelaskan secara bergantian.
Bagian penerapan

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

metadata: mendefinisikan nama dan namespace Deployment.
spec: Berisi spesifikasi detail Deployment.
replika: menentukan jumlah replika, yaitu menjalankan dua instance Tomcat.
selector: mendefinisikan selector untuk mencocokkan label Pod.
templat: menjelaskan templat Pod, termasuk metadata dan spesifikasi.
nodeName: menentukan nama node (worker01) dimana Pod sedang berjalan.
container: Dua container didefinisikan: Tomcat dan Filebeat.

Wadah Tomcat:
gambar: Gunakan Tomcat: gambar terbaru.
port: Buka port 8080.
sumber daya: Mendefinisikan permintaan dan batasan sumber daya.
livenessProbe dan kesiapanProbe: digunakan untuk pemeriksaan kesehatan.
volumeMounts: Dua volume dipasang.

Wadah filebeat:
gambar: Gunakan filebeat:7.17.2 gambar.
args: Menentukan parameter startup.
sumber daya: Mendefinisikan permintaan dan batasan sumber daya.
securityContext: Jalankan sebagai pengguna root.
volumeMounts: Dua volume dipasang.

volume:
Tomcat-logs: Gunakan volume kosongDir.
Tomcatwebroot: Gunakan volume hostPath.
filebeat-config: Gunakan volume ConfigMap.


Bagian file konfigurasi (ConfigMap).

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

menjelaskan
metadata: mendefinisikan nama ConfigMap.
data: harus berisi konten konfigurasi Filebeat (dihilangkan di sini).

3. Tulis file konfigurasi logstash

konfigurasi host rusa
Tulis file konfigurasi logstash tanpa memengaruhi file konfigurasi sebelumnya

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

berlari

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

Pastikan port sudah habis

ss -anput | grep ":5056"
  • 1

Masukkan deskripsi gambar di sini

4. Terapkan file daftar sumber daya Tomcat

operasi tuan rumah utama

kubectl apply -f tomcat-logs.yaml
  • 1

Tunggu beberapa saat karena Anda perlu mendownload gambarnya
Kemudian periksa podnya
Catatan: VPN diperlukan

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

Masukkan deskripsi gambar di sini
Masukkan deskripsi gambar di sini

5. Verifikasi apakah Tomcat dan filebeat di Pod dalam keadaan normal

Lihat log yang dihasilkan kucing jantan (-c: container)
Masukkan deskripsi gambar di sini
Lihat log koleksi filebeat

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

Masukkan deskripsi gambar di sini

6. Tambahkan indeks ke halaman kiana

Akses browser tuan rumah

192.168.10.17:5601
  • 1

Masukkan deskripsi gambar di sini
Masukkan deskripsi gambar di sini
Masukkan deskripsi gambar di sini
Masukkan deskripsi gambar di sini
Masukkan deskripsi gambar di sini
Masukkan deskripsi gambar di sini
Masukkan deskripsi gambar di sini
Anda dapat melihat bahwa Anda telah melihat log
Masukkan deskripsi gambar di sini
Menyelesaikan
Jika ini membantu Anda, silakan klik dan ikuti