Helm Chart instala EFK y verifica la funcionalidad

Helm Chart instala EFK y verifica la funcionalidad

Este artículo presenta cómo compilar rápidamente el sistema de recopilación de registros EFK (Elasticsearch, Filebeat, Kibana) V8.5.1 en el entorno de Kubernetes a través de Helm Chart y verificar sus funciones. Si solo está interesado en la instalación, vaya directamente al capítulo "Instalación de EFK (Elasticsearch, Filebeat, Kibana) V8.5.1".

Requisitos de antecedentes del sistema de recopilación de registros

A medida que la complejidad de varios sistemas de software es cada vez mayor, especialmente después de que se implementan en la nube, es básicamente imposible iniciar sesión en cada nodo para ver los registros de cada módulo. Porque no solo es ineficiente, sino que a veces es imposible dar a los ingenieros acceso directo a los nodos físicos individuales debido a la seguridad. Además, los sistemas de software a gran escala ahora adoptan básicamente el método de implementación de clúster, lo que significa que para cada servicio, se iniciarán varios POD idénticos para proporcionar servicios externos, y cada contenedor generará su propio registro, solo a partir del registro generado. no sé qué POD lo generó, lo que hace que sea más difícil ver los registros distribuidos.

Entonces, en la era de la nube, se necesita una solución para recopilar y analizar registros. En primer lugar, es necesario recopilar los registros distribuidos en varios rincones en un lugar centralizado para una fácil visualización.

Comparación de varias soluciones principales

  • ELK (Búsqueda elástica, Logstash, Kibana)
  • EFK (Búsqueda elástica, Filebeat, Kibana)
  • EFK(Búsqueda elástica,Fluentd,Kibana)

Hay muchas introducciones relacionadas en Internet sobre las ventajas y desventajas y los escenarios aplicables de estos sistemas de recopilación de registros. Aquí solo haré una comparación simple.
a. ELK (Elasticsearch, Logstash, Kibana) frente a EFK (Elasticsearch, Fluentd, Kibana)

Arquitectura y aplicabilidad:
EFK: la arquitectura EFK se basa en Fluentd, que recopila y transmite datos de registro a Elasticsearch a través de Fluentd, y luego usa Kibana para la visualización y el análisis. EFK es adecuado para requisitos de análisis y recopilación de registros complejos, y es especialmente bueno para procesar datos de registro a gran escala.
ELK: la arquitectura ELK se centra en Logstash, que recopila, transforma y transmite datos de registro a Elasticsearch a través de Logstash, y luego usa Kibana para la visualización y el análisis. ELK es adecuado para los requisitos de recopilación y análisis de registros de mediana escala, y puede procesar datos de múltiples fuentes.

Componentes y tecnologías:
EFK: EFK significa Elasticsearch, Fluentd y Kibana. Elasticsearch es un motor de búsqueda y análisis distribuido para almacenar e indexar datos de registro. Fluentd es una herramienta de recopilación y transmisión de registros de código abierto para recopilar y transmitir datos de registro de diferentes fuentes a Elasticsearch. Kibana es una herramienta de visualización para buscar, analizar y visualizar datos almacenados en Elasticsearch.
ELK: ELK significa Elasticsearch, Logstash y Kibana. El rol de Elasticsearch y Kibana es el mismo que en EFK. Logstash es una herramienta de recopilación, transformación y transmisión de datos de código abierto para recopilar, filtrar y transformar datos de varias fuentes y enviarlos a Elasticsearch.

Configuración y ecosistema de complementos:
EFK: Fluentd tiene un amplio ecosistema de complementos, que puede integrar fácilmente varias fuentes y destinos de datos, y realizar el desarrollo de complementos personalizados. Su configuración es relativamente compleja, pero también es muy flexible.
ELK: Logstash también tiene un ecosistema de complementos, pero relativamente pequeño en comparación con Fluentd. La configuración de Logstash es relativamente sencilla, principalmente a través de archivos de configuración.

Rendimiento y escalabilidad:
EFK: Debido al uso de Fluentd como herramienta de transmisión de datos, EFK es más liviano, de alto rendimiento y escalable que ELK. Fluentd utiliza un mecanismo de búfer para procesar y almacenar en caché los eventos de registro, lo que tiene un mayor rendimiento y escalabilidad.
ELK: debido al uso de Logstash como herramienta de transmisión de datos, ELK puede consumir más recursos al procesar datos a gran escala y puede tener un cierto impacto en el rendimiento. Pero para los requisitos de recopilación y análisis de registros de mediana escala, ELK aún puede proporcionar un buen rendimiento.

En resumen, el rendimiento actual y la amplitud de aplicación de EFK (Elasticsearch, Fluentd, Kibana) es mayor que el de ELK (Elasticsearch, Logstash, Kibana)

b.ELK(Elasticsearch,Filebeat,Kibana)对比 EFK(Elasticsearch,Fluentd,Kibana)

Tanto Fluentd como Filebeat son herramientas de código abierto que se usan comúnmente para la recopilación de registros y pueden ayudarnos a recopilar, procesar y reenviar grandes cantidades de datos de registro. Aunque todos tienen funciones similares, son bastante diferentes en la filosofía de diseño y los detalles de implementación.

Fluentd es una herramienta de recopilación y agregación de registros desarrollada y mantenida por Treasure Data. Admite una variedad de entrada y salida de datos y proporciona una gran cantidad de complementos y filtros para procesar y transformar datos. Fluentd procesa los datos de registro a través de canalizaciones y puede crear de forma flexible procesos complejos de procesamiento de datos. Fluentd también proporciona un mecanismo de almacenamiento en caché integrado que reduce el riesgo de pérdida de datos. Al mismo tiempo, Fluentd es una herramienta liviana que ocupa menos recursos del sistema.

Filebeat es un recopilador de datos de registro ligero de código abierto de Elastic, diseñado para recopilar, analizar y reenviar varios tipos de datos de registro. Admite múltiples fuentes de datos y puede descubrir automáticamente nuevos archivos de registro. Filebeat tiene un bajo consumo de recursos y admite alta disponibilidad y conmutación por error. Filebeat puede reenviar datos de registro a múltiples destinos de salida, como Elasticsearch, Logstash o Kafka, etc.

La diferencia en el concepto de diseño entre los dos es que Fluentd se enfoca más en el procesamiento y la conversión de datos, mientras que Filebeat se enfoca más en la adquisición y transmisión de datos. Por lo tanto, al elegir qué herramienta usar, debe tenerse en cuenta según los escenarios y las necesidades específicas.

En términos generales, Fluentd es más adecuado para escenarios que requieren procesamiento y conversión de datos complejos, mientras que Filebeat es más adecuado para escenarios simples de recopilación y reenvío de datos de registro. Si necesita una herramienta liviana para procesar datos de registro masivos, Fluentd puede ser más adecuado; si solo necesita un recopilador de registros simple para recopilar y reenviar rápidamente datos de registro, entonces Filebeat puede ser más adecuado para sus necesidades.

1. Instalación de EFK (Elasticsearch, Filebeat, Kibana) V8.5.1

1.1 Requisitos previos

a. Versión de Helm >=v3.2.0, para la instalación de Helm, consulte: Instalación de Helm

b. Se requiere un StorageClass predeterminado. Para conocer el proceso de preparación específico, consulte: Instalar StorageClass en Kubernetes

c. (No es obligatorio) Se recomienda tener los IngressClasses predeterminados. Para conocer el proceso de preparación específico, consulte: Instalación de IngressClass en Kubernetes. Se requiere el paso 4 "Establecer como clase de ingreso predeterminada". Al mismo tiempo, el NodePort el puerto del Ingress se establece preferiblemente en 80 o 443

1.2 Proceso de instalación

a. Crear el directorio de instalación

#切换到当前用户根目录并建立logging文件夹
cd ~ && mkdir logging

cd logging

b. Cree un espacio de nombres de registro, un espacio de nombres independiente ayuda a la administración de recursos

kubectl create ns logging

c. Agregar almacén de repositorio oficial elástico

helm repo add elastic https://helm.elastic.co

D. Para instalar elasticsearch,
si necesita cumplir con algunos requisitos personalizados, consulte el archivo oficial values.yaml, donde se describirá cada parámetro en detalle: referencia del sitio web oficial

helm pull elastic/elasticsearch --version 8.5.1

tar -xvf elasticsearch-8.5.1.tgz

cd elasticsearch

#(非必要)以下的操作主要是修改elasticsearch服务暴露方式以及ingress设置
vi values.yaml
#搜索ClusterIP关键字
service:
  enabled: true
  labels: {
    
    }
  labelsHeadless: {
    
    }
  type: ClusterIP #将此处改为NodePort
  # Consider that all endpoints are considered "ready" even if the Pods themselves are not
  # https://kubernetes.io/docs/reference/kubernetes-api/service-resources/service-v1/#ServiceSpec
  publishNotReadyAddresses: false
  nodePort: ""
  annotations: {
    
    }
  httpPortName: http
  transportPortName: transport
  loadBalancerIP: ""
  loadBalancerSourceRanges: []
  externalTrafficPolicy: ""
#搜索ingress关键字
ingress:
  enabled: false #改为true
  annotations: {
    
    }
  # kubernetes.io/ingress.class: nginx #取消注释
  # kubernetes.io/tls-acme: "true" #取消注释
  className: "nginx"
  pathtype: ImplementationSpecific
  hosts:
    - host: chart-example.local
      paths:
        - path: /

Ejecutar el comando de instalación

cd ~/logging

helm install elasticsearch ./elasticsearch -n logging

#成功后看到如下提示
NAME: elasticsearch
LAST DEPLOYED: Wed May 31 02:37:03 2023
NAMESPACE: logging
STATUS: deployed
REVISION: 1
NOTES:
1. Watch all cluster members come up.
  $ kubectl get pods --namespace=logging -l app=elasticsearch-master -w
2. Retrieve elastic user's password.
  $ kubectl get secrets --namespace=logging elasticsearch-master-credentials -ojsonpath='{
    
    .data.password}' | base64 -d
3. Test cluster health using Helm test.
  $ helm --namespace=logging test elasticsearch

#通过如下命令检测&确保Pod正确运行
kubectl get pods --namespace=logging -l app=elasticsearch-master -w
NAME                     READY   STATUS    RESTARTS   AGE
elasticsearch-master-0   1/1     Running   0          3h10m
elasticsearch-master-1   1/1     Running   0          3h10m
elasticsearch-master-2   1/1     Running   0          3h10m

e. Instalar
la referencia del sitio web oficial de Filebeat

cd ~/logging

helm pull elastic/filebeat --version 8.5.1

tar -xvf filebeat-8.5.1.tgz
执行安装命令
helm install filebeat ./filebeat -n logging

#成功后看到如下提示
NAME: filebeat
LAST DEPLOYED: Wed May 31 02:55:52 2023
NAMESPACE: logging
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
1. Watch all containers come up.
  $ kubectl get pods --namespace=logging -l app=filebeat-filebeat -w

#通过如下命令检测&确保Pod正确运行
kubectl get pods --namespace=logging -l app=filebeat-filebeat -w
NAME                      READY   STATUS    RESTARTS   AGE
filebeat-filebeat-asdn6   1/1     Running   0          3h6m
filebeat-filebeat-sdab4   1/1     Running   0          3h6m
filebeat-filebeat-asbvg   1/1     Running   0          175m

F. Instalar
la referencia del sitio web oficial de Kibana

cd ~/logging

helm pull elastic/kibana --version 8.5.1

tar -xvf kibana-8.5.1.tgz

cd kibana

vi values.yaml
#对外暴露方式设置为NodePort,搜索ClusterIP关键字
service:
  type: ClusterIP #此处修改为NodePort
  loadBalancerIP: ""
  port: 5601
  nodePort: ""
  labels: {
    
    }
  annotations: {
    
    }
  # cloud.google.com/load-balancer-type: "Internal"
  # service.beta.kubernetes.io/aws-load-balancer-internal: 0.0.0.0/0
  # service.beta.kubernetes.io/azure-load-balancer-internal: "true"
  # service.beta.kubernetes.io/openstack-internal-load-balancer: "true"
  # service.beta.kubernetes.io/cce-load-balancer-internal-vpc: "true"
  loadBalancerSourceRanges: []
  # 0.0.0.0/0
  httpPortName: http

#(非必须)设置ingress地址,搜索ingress关键字
ingress:
  enabled: false #修改为true
  className: "nginx"
  pathtype: ImplementationSpecific
  annotations: {
    
    }
  # kubernetes.io/ingress.class: nginx #取消注释
  # kubernetes.io/tls-acme: "true" #取消注释
  hosts:
    - host: kibana-example.local
      paths:
        - path: /

Ejecutar el comando de instalación

cd cd ~/logging

helm install kibana ./kibana -n logging

#成功后看到如下提示
NAME: kibana
LAST DEPLOYED: Wed May 31 03:16:37 2023
NAMESPACE: logging
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
1. Watch all containers come up.
  $ kubectl get pods --namespace=logging -l release=kibana -w
2. Retrieve the elastic user's password.
  $ kubectl get secrets --namespace=logging elasticsearch-master-credentials -ojsonpath='{
    
    .data.password}' | base64 -d
3. Retrieve the kibana service account token.
  $ kubectl get secrets --namespace=logging kibana-kibana-es-token -ojsonpath='{
    
    .data.token}' | base64 -d

#通过如下命令检测&确保Pod正确运行
kubectl get pods --namespace=logging -l release=kibana -w
NAME                             READY   STATUS    RESTARTS   AGE
kibana-kibana-234897xx1c-h38ncj   1/1     Running   0          177m

2. Verificación funcional

2.1 Inicio de sesión de interfaz gráfica de usuario

a. Obtenga el número de puerto de NodePort del servicio kibana

kubectl get svc -n logging | grep kibana
kibana-kibana                   NodePort    172.16.67.29     <none>        5601:30239/TCP                  3h3m

Ver el número de puerto es 19812

b. Obtenga la contraseña de inicio de sesión de la interfaz de kibana
Después de instalar correctamente kibana a través de Helm Chart, puede ver el mensaje:
Recupere la contraseña del usuario elástico.
$ kubectl get secrets --namespace=logging elasticsearch-master-credentials -ojsonpath='{.data. contraseña} ' | base64 -d

kubectl get secrets --namespace=logging elasticsearch-master-credentials -ojsonpath='{.data.password}' | base64 -d
54iEaxD2AFE838H

c. Inicie sesión con la interfaz gráfica, el nombre de usuario predeterminado es "elástico"
inserte la descripción de la imagen aquí
e ingrese Data Streams en Index Management, puede ver que filebeat-8.5.1 se ha incluido como un elemento de índice de datos
inserte la descripción de la imagen aquí

2.2 Verificación de la recopilación de registros

a. Crear un pod que produzca registros

cd ~/logging

vi test-logging-pod.yaml
#写入如下内容
apiVersion: v1
kind: Pod
metadata:
  name: counter
spec:
  containers:
  - name: count
    image: busybox
    args: [/bin/sh, -c,
            'i=0; while true; do echo "$i: $(date)"; i=$((i+1)); sleep 1; done']

b. Ver Observabilidad->Registros->Stream en la interfaz
inserte la descripción de la imagen aquí

Supongo que te gusta

Origin blog.csdn.net/weixin_46660849/article/details/130975322
Recomendado
Clasificación