Visualización de logs de aplicación en nodos virtuales
Descubra cómo ver los logs de aplicaciones que se ejecutan en nodos virtuales en un cluster de Kubernetes que ha creado con Kubernetes Engine (OKE).
Una vez creado un cluster con nodos virtuales mediante Kubernetes Engine, tiene dos opciones para acceder a los logs de las aplicaciones que se ejecutan en los nodos virtuales:
- Visualice los logs de stdout y stderr desde los contenedores de aplicaciones mediante el comando
kubectl logs
. - Envíe logs de aplicación a un servidor de logs persistente para su visualización.
Visualización de logs stdout y stderr mediante el comando kubectl logs
kubectl logs
:-
Si todavía no lo ha hecho, siga los pasos para configurar el archivo de configuración kubeconfig del cluster y (si es necesario) defina la variable de entorno KUBECONFIG para que apunte al archivo. Tenga en cuenta que debe configurar su propio archivo kubeconfig. No puede acceder a un cluster utilizando un archivo kubeconfig que haya configurado un usuario diferente. Consulte Configuración del acceso a los clusters.
- En una ventana de terminal, ejecute el comando
kubectl logs
introduciendo:kubectl logs <pod-name>
Por ejemplo:
kubectl logs nginx
Cuando el pod contenga más de un contenedor, especifique el contenedor para el que desea ver los logs. Por ejemplo, si el pod
myapp
tiene dos contenedores denominadosnginx
ylogging
y desea mostrar los logs del contenedorlogging
, introduzca:kubectl logs myapp logging
Envío de logs a un servidor de logs persistente
Puede enviar los logs de las aplicaciones que se ejecutan en nodos virtuales a un servidor de logs remoto, como OpenSearch, y ver los logs de ese servidor. Dado que los nodos virtuales no soportan el conjunto de daemons de Kubernetes, no puede ejecutar un agente de registro en el nivel de nodo. En su lugar, puede ejecutar un agente de registro ligero como sidecar para cada uno de los pods de la aplicación. Puede utilizar cualquier agente de registro que se pueda ejecutar como sidecar en un pod de Kubernetes, como Bit de fluido.
Por ejemplo, para ejecutar Fluent Bit como sidecar en un pod para enviar logs de aplicación a un servidor de log OpenSearch remoto:
- Cree una instancia de Kubernetes ConfigMap por cluster o por espacio de nombres, especificando los valores de configuración de bit fluido que se van a utilizar. En particular, tenga en cuenta que debe especificar la dirección IP, el número de puerto y los parámetros de autenticación del servidor de log remoto.
Por ejemplo:
apiVersion: v1 kind: ConfigMap metadata: name: fluentbit-config data: fluent-bit.conf: | [SERVICE] flush 1 daemon Off [INPUT] Name tail Path /mnt/log/* [OUTPUT] name opensearch match * host <ip-address> port <port-number> tls On HTTP_User <username> HTTP_Passwd <example-password> Index fluent-bit Suppress_Type_Name On
donde:
host <ip-address>
especifica la dirección IP del servidor de Opensearch.port <port-number>
especifica el puerto del servidor de Opensearch (9200 por defecto).HTTP_User <username>
especifica el nombre de usuario del servidor de Opensearch.HTTP_Passwd <example-password>
especifica la contraseña para el servidor de Opensearch.
- Agregue un sidecar de bit fluido a cada pod. Tenga en cuenta que debe configurar todos los pods con un sidecar de bit fluido para asegurarse de que los logs de aplicación se envían al destino de log persistente.
-
En la sección
volumes
de cada especificación de pod, especifique:- emptyDir donde se escriben los logs de aplicación, de la siguiente forma:
- name: logs emptyDir: {}
- Una referencia a ConfigMap que ha creado anteriormente, de la siguiente forma:
- name: fluentbit-config configMap: name: fluentbit-config
- emptyDir donde se escriben los logs de aplicación, de la siguiente forma:
-
En la sección
containers
de cada especificación de pod, debe especificar que el contenedor de registro:- Utiliza la imagen
fluent/fluent-bit
. - Monta
logs
emptyDir yfluentbit-config
ConfigMap.
Por ejemplo:
- name: logging image: fluent/fluent-bit resources: requests: cpu: 100m memory: 50Mi volumeMounts: - name: logs mountPath: /mnt/log - name: fluentbit-config mountPath: /fluent-bit/etc
- Utiliza la imagen
A continuación, se muestra un ejemplo de una especificación de pod completa:
apiVersion: v1 kind: Pod metadata: name: date-logging spec: containers: - name: date image: busybox resources: requests: cpu: 500m memory: 200Mi command: ["sh", "-c"] args: - while [ 1 ]; do echo "Writing the date in /mnt/log/date.log"; date >> /mnt/log/date.log; sleep 10; done volumeMounts: - name: logs mountPath: /mnt/log - name: logging image: resources: requests: cpu: 100m memory: 50Mi volumeMounts: - name: logs mountPath: /mnt/log - name: fluentbit-config mountPath: /fluent-bit/etc volumes: - name: logs emptyDir: {} - name: fluentbit-config configMap: name: fluentbit-config
-