Uso de ICAgent para recopilar logs de contenedores
CCE trabaja con AOM para recopilar logs de carga de trabajo. Al crear un nodo, CCE instala el ICAgent por usted (el DaemonSet llamado icagent en el espacio de nombres del kube-system del clúster). Una vez que ICAgent recopila los logs de carga de trabajo y los informa a la AOM, puede ver los logs de carga de trabajo en la consola de CCE o de AOM.
Notas y restricciones
El ICAgent solo recopila archivos de log de texto *.log, *.trace y *.out.
Facturación
AOM ofrece una cuota de recopilación de logs gratuita de 500 MB por cada cuenta cada mes. Si se excede la cuota, se le cobrará. Para obtener más información, véase la Facturación. Puede hacer clic en la consola de AOM para ver los logs.
Uso de ICAgent para recopilar logs
Puede agregar una política para recopilar logs mediante ICAgent para una carga de trabajo.
- Cuando crea una carga de trabajo, establezca el registro para el contenedor.
- Haga clic en para agregar una política de log.
Lo siguiente usa Nginx como ejemplo. Las políticas de log se varían en función de las cargas de trabajo.Figura 1 Adición de una política de log
- Establezca Storage Type en Host Path o Container Path.
Tabla 1 Configuración de políticas de log Parámetro
Descripción
Storage Type
- Host Path (hostPath): Una ruta de host se monta en la ruta de contenedor especificada. En la ruta del host del nodo, puede ver la salida de los logs de contenedor en la ruta de montaje.
- Container Path (emptyDir): Una ruta temporal del nodo se monta en la ruta especificada. Los datos que existen en la ruta temporal pero que el recopilador no notifica a AOM desaparecerán después de eliminar el pod.
Host Path
Introduzca una ruta de acceso de host, por ejemplo, /var/paas/sys/log/nginx.
Container Path
Ruta del contenedor (por ejemplo, /tmp) en la que se montarán los recursos de almacenamiento.AVISO:- No monte el almacenamiento en un directorio del sistema como / o /var/run; esta acción puede provocar un error de contenedor. Se recomienda montar el contenedor en un directorio vacío. Si el directorio no está vacío, asegúrese de que no haya archivos que afecten al inicio del contenedor en el directorio. De lo contrario, dichos archivos se reemplazarán, lo que provocará errores al iniciar el contenedor y crear la carga de trabajo.
- Cuando el contenedor está montado en un directorio de alto riesgo, se recomienda utilizar una cuenta con los permisos mínimos para iniciar el contenedor; de lo contrario, los archivos de alto riesgo en la máquina host podrían estar dañados.
- AOM recopila solo los primeros 20 archivos de log que se han modificado recientemente. Recoge archivos de 2 niveles de subdirectorios de forma predeterminada.
- AOM solo recopila los archivos de texto de log .log, .trace y .out en las rutas de montaje.
- Para obtener más información acerca de cómo establecer permisos para puntos de montaje en un contenedor, consulte Configurar un contexto de seguridad para un pod o un contenedor.
Extended Host Path
Este parámetro solo es obligatorio si Storage Type está establecido en Host Path.
Las rutas de host extendidas contienen ID de pod o nombres de contenedor para distinguir diferentes contenedores en las que está montada la ruta de host.
Se agregue un directorio de nivel 3 al directorio/subdirectorio de volumen original. Puede obtener fácilmente la salida de archivos por un solo Pod.
- None: No se ha configurado ninguna ruta extendida.
- PodUID: ID de un pod.
- PodName: Nombre de un pod.
- PodUID/ContainerName: ID de un pod o nombre de un contenedor.
- PodName/ContainerName: Nombre de un pod o un contenedor.
Ruta de colección
Una ruta de recopilación limita el ámbito de la recopilación a los registros especificados.
- Si no se especifica ninguna ruta de recopilación, los archivos de log de los formatos .log, .trace y .out se recopilarán a partir de la ruta especificada.
- /Path/**/ indica que todos los archivos de log de los formatos .log, .trace y .out se recopilarán de forma recursiva desde la ruta especificada y todos los subdirectorios a 5 niveles de profundidad.
- * en los nombres de los archivos de log indica una coincidencia difusa.
Ejemplo: La ruta de recopilación /tmp/**/test*.log indica que todos los archivos .log con el prefijo test se recopilarán de /tmp y subdirectorios a 5 niveles de profundidad.
ATENCIÓN:Asegúrese de que la versión de ICAgent es 5.12.22 o posterior.
Log Dump
El volcado de logs se refiere a la rotación de archivos de log en un host local.
- Enabled: AOM analiza los archivos de log cada minuto. Cuando un archivo de log supera los 50 MB, se descarga inmediatamente. Se genera un nuevo archivo .zip en el directorio donde se encuentra el archivo de log. Para un archivo de log, AOM almacena solo los 20 archivos de .zip más recientes. Cuando el número de archivos .zip supera los 20, se eliminarán los archivos .zip anteriores. Una vez completado el volcado, se borrará el archivo de log en AOM.
- Disabled: AOM no volca los archivos de log.
NOTA:- AOM rota los archivos de log mediante copytruncate. Antes de habilitar el volcado de log, asegúrese de que los archivos de log estén escritos en el modo de adición. De lo contrario, pueden producirse agujeros de archivo.
- Actualmente, los componentes principales de log como Log4j y Logback admiten la rotación de archivos de log. Si ya ha establecido la rotación para los archivos de log, omita la configuración. De lo contrario, pueden producirse conflictos.
- Se recomienda configurar la rotación de archivos de log para sus propios servicios para controlar de manera flexible el tamaño y el número de archivos enrollados.
- Haga clic en OK.
Ejemplo de YAML (ICAgent)
Puede establecer la ruta de almacenamiento del log contenedor definiendo un archivo YAML.
Como se muestra en la siguiente figura, un emptyDir está montado en una ruta temporal a /var/log/nginx. De esta manera, el ICAgent recopila los logs de /var/log/nginx. El campo policy es personalizado por CCE y permite al ICAgent identificar y recopilar logs.
apiVersion: apps/v1 kind: Deployment metadata: name: testlog namespace: default spec: selector: matchLabels: app: testlog template: replicas: 1 metadata: labels: app: testlog spec: containers: - image: 'nginx:alpine' name: container-0 resources: requests: cpu: 250m memory: 512Mi limits: cpu: 250m memory: 512Mi volumeMounts: - name: vol-log mountPath: /var/log/nginx policy: logs: rotate: '' volumes: - emptyDir: {} name: vol-log imagePullSecrets: - name: default-secret
A continuación se muestra cómo utilizar un volumen de hostPath. En comparación con emptyDir, el tipo de volumes se cambia a hostPath y la ruta en el host debe configurarse para este volumen de hostPath. En el siguiente ejemplo, el /tmp/log del host se monta en /var/log/nginx. De esta manera, el ICAgent puede recopilar los logs de /var/log/nginx sin eliminar los logs de /tmp/log.
apiVersion: apps/v1 kind: Deployment metadata: name: testlog namespace: default spec: replicas: 1 selector: matchLabels: app: testlog template: metadata: labels: app: testlog spec: containers: - image: 'nginx:alpine' name: container-0 resources: requests: cpu: 250m memory: 512Mi limits: cpu: 250m memory: 512Mi volumeMounts: - name: vol-log mountPath: /var/log/nginx readOnly: false extendPathMode: PodUID policy: logs: rotate: Hourly annotations: pathPattern: '**' format: '' volumes: - hostPath: path: /tmp/log name: vol-log imagePullSecrets: - name: default-secret
Parámetro |
Descripción |
Descripción |
---|---|---|
extendPathMode |
Ruta de host extendida |
Las rutas de host extendidas contienen ID de pod o nombres de contenedor para distinguir diferentes contenedores en las que está montada la ruta de host. Se agregue un directorio de nivel 3 al directorio/subdirectorio de volumen original. Puede obtener fácilmente la salida de archivos por un solo Pod.
|
policy.logs.rotate |
Volcado de logs |
El volcado de logs se refiere a la rotación de archivos de log en un host local.
NOTA:
|
policy.logs.annotations.pathPattern |
Ruta de colección |
Una ruta de recopilación limita el ámbito de la recopilación a los registros especificados.
Ejemplo: La ruta de recopilación /tmp/**/test*.log indica que todos los archivos .log con el prefijo test se recopilarán de /tmp y subdirectorios a 5 niveles de profundidad.
ATENCIÓN:
Asegúrese de que la versión de ICAgent es 5.12.22 o posterior. |
policy.logs.annotations.format |
Coincidencia de logs de varias líneas |
Algunos registros de programa (por ejemplo, los logs de programa Java) contienen un log que ocupa varias líneas. De forma predeterminada, el sistema de recopilación de logs recopila logs por línea. Si desea mostrar los logs como un único mensaje de log en el sistema de recopilación de logs, puede habilitar la función de log de varias líneas y usar el modo de log de tiempo o patrón regular. Cuando una línea de mensaje de log coincide con el formato de tiempo preestablecido o la expresión regular, se considera como el inicio de un mensaje de log y la siguiente línea comienza con esta línea de mensaje de log se considera como el identificador de fin del mensaje de log. El formato es el siguiente: { "multi": { "mode": "time", "value": "YYYY-MM-DD hh:mm:ss" } } multi indica el modo multilínea.
|
Visualización de logs
Después de configurar una ruta de recopilación de logs y crear la carga de trabajo, ICAgent recopila los archivos de log de la ruta de acceso configurada. La recolección dura aproximadamente 1 minuto.
Una vez completada la recopilación de logs, vaya a la página de detalles de la carga de trabajo y haga clic en Logs en la esquina superior derecha para ver los logs.
También puede ver los logs en la consola de AOM.
También puede ejecutar el comando kubectl logs para ver la salida estándar de un contenedor.
# View logs of a specified pod. kubectl logs <pod_name> kubectl logs -f <pod_name> # Similar to tail -f # View logs of a specified container in a specified pod. kubectl logs <pod_name> -c <container_name> kubectl logs pod_name -c container_name -n namespace (one-off query) kubectl logs -f <pod_name> -n namespace (real-time query in tail -f mode)