Обмен технологиями

Сбор журналов ELK — сбор журналов приложений, работающих в режиме модуля в кластере k8s.

2024-07-12

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


Предисловие

Справочник по построению и интерпретации Filebeat+ELK
Связь:Обучение k8s — подробный процесс сбора журналов ELK на основе k8s
В этой главе не будет повторяться описание

среда

виртуальная машина

ИПИмя процессораПроцессорПамятьжесткий диск
192.168.10.11мастер012 процессора, двухъядерный4G100г
192.168.10.12работник012 процессора, двухъядерный4G100г
192.168.10.13работник022 процессора, двухъядерный4G100г
192.168.10.17ЛОСЬ1 процессор, двухъядерный4G100г

Версия центос7.9
Развернут к8с-1.27
Сервер ELK развернул Filebeat+ELK.

Это реализуется путем запуска filebeat (sidecar) в приложении Pod. На этот раз в качестве примера будет использоваться Tomcat.

1. Подготовьте каталог данных Tomcat.

По умолчанию в контейнере tomcat нет файла домашней страницы веб-сайта. Если его не добавить, контейнер в модуле не сможет работать нормально.

работа хоста work01

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

2. Напишите файл списка ресурсов приложения Tomcat.

операция главного хоста

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 определяет файлы конфигурации Tomcat и Filebeat Deployment и Filebeat. Давайте объясним их по очереди.
Раздел развертывания

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

метаданные: определяют имя и пространство имен развертывания.
spec: Содержит подробную спецификацию развертывания.
реплики: указывает количество реплик, то есть запуск двух экземпляров Tomcat.
селектор: определяет селектор для сопоставления меток пода.
шаблон: описывает шаблон Pod, включая метаданные и спецификации.
nodeName: указывает имя узла (worker01), на котором работает модуль.
контейнеры: определены два контейнера: Tomcat и Filebeat.

Контейнер Tomcat:
изображение: используйте tomcat:latest image.
порты: откройте порт 8080.
ресурсы: определяет запросы и ограничения ресурсов.
livenessProbe и readinessProbe: используются для проверки работоспособности.
VolumeMounts: монтируются два тома.

Контейнер Filebeat:
изображение: используйте filebeat:7.17.2 image.
args: определяет параметры запуска.
ресурсы: определяет запросы и ограничения ресурсов.
SecurityContext: Запуск от имени пользователя root.
VolumeMounts: монтируются два тома.

Объемы:
tomcat-logs: используйте тома пустого каталога.
tomcatwebroot: используйте том hostPath.
filebeat-config: использовать тома ConfigMap.


Раздел файла конфигурации (ConfigMap)

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

объяснять
метаданные: определяет имя ConfigMap.
data: должен содержать содержимое конфигурации Filebeat (здесь опущено).

3. Напишите файл конфигурации logstash.

конфигурация хоста Elk
Запись файлов конфигурации logstash, не затрагивая предыдущие файлы конфигурации.

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

бегать

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

Убедитесь, что порт работает

ss -anput | grep ":5056"
  • 1

Вставьте сюда описание изображения

4. Примените файл списка ресурсов Tomcat.

операция главного хоста

kubectl apply -f tomcat-logs.yaml
  • 1

Подождите немного, потому что вам нужно скачать изображение
Затем проверьте модуль
Примечание. Требуется VPN.

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

Вставьте сюда описание изображения
Вставьте сюда описание изображения

5. Проверьте, в порядке ли tomcat и filebeat в модуле.

Просмотр журналов, созданных Tomcat (-c: контейнер)
Вставьте сюда описание изображения
Просмотр журналов сбора файлов filebeat

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

Вставьте сюда описание изображения

6. Добавьте индекс на страницу Кианы.

Доступ через хост-браузер

192.168.10.17:5601
  • 1

Вставьте сюда описание изображения
Вставьте сюда описание изображения
Вставьте сюда описание изображения
Вставьте сюда описание изображения
Вставьте сюда описание изображения
Вставьте сюда описание изображения
Вставьте сюда описание изображения
Вы можете видеть, что вы видели журнал
Вставьте сюда описание изображения
Заканчивать
Если это вам помогло, пожалуйста, нажмите и следуйте