El modo sidecar inyecta un contenedor dedicado de LoongCollector (Logtail) en cada pod de aplicación para recopilar registros por pod. Es ideal cuando se requiere control detallado, aislamiento multiinquilino o una recopilación de registros vinculada al ciclo de vida.
Funcionamiento
En el modo sidecar, el contenedor de la aplicación y un contenedor de LoongCollector (Logtail) se ejecutan juntos en un mismo pod. Ambos comparten volúmenes para acceder a los registros y sincronizar sus ciclos de vida.
Uso compartido de registros: El contenedor de la aplicación escribe los registros en un volumen compartido (generalmente un
emptyDir). El contenedor de LoongCollector (Logtail) monta este volumen en modo de solo lectura para recopilar los datos en tiempo real.Asociación de configuración: Cada sidecar de LoongCollector (Logtail) declara su identidad mediante un
custom identifierúnico. Un grupo de máquinas en la consola de SLS con el mismo identificador distribuye las configuraciones de recopilación a todos los sidecars coincidentes.Sincronización del ciclo de vida: Los archivos de señal (
cornerstoneytombstone) en el volumen compartido coordinan el apagado de los contenedores. Junto con elgraceful termination period(terminationGracePeriodSeconds), garantizan que LoongCollector (Logtail) termine de enviar los registros pendientes antes de que el pod finalice.
Antes de empezar
Cree un Project y un logstore para almacenar sus registros. Si ya cuenta con ellos, continúe con Step 1: Inject the LoongCollector Sidecar Container.
Project: Unidad de gestión de recursos en SLS que aísla los registros por proyecto o servicio.
logstore: Unidad de almacenamiento para registros.
Crear un project
Crear un logstore
Paso 1: Inyectar el contenedor sidecar de LoongCollector
Inyecte un contenedor sidecar de LoongCollector en su pod de aplicación con un volumen compartido para la recopilación de registros. Para una prueba rápida, utilice Appendix: YAML example.
1. Modificar la configuración YAML del pod
-
Definir volúmenes compartidos
En
spec.template.spec.volumes, agregue tres volúmenes compartidos al mismo nivel quecontainers:volumes: # Shared log directory (written by the application container, read by the sidecar) - name: ${shared_volume_name} # <-- The name must match the name in volumeMounts emptyDir: {} # Signal directory for inter-container communication (for graceful start/stop) - name: tasksite emptyDir: medium: Memory # Use memory as the medium for better performance sizeLimit: "50Mi" # Shared host time zone configuration: Synchronizes the time zone for all containers in the pod - name: tz-config # <-- The name must match the name in volumeMounts hostPath: path: /usr/share/zoneinfo/Asia/Shanghai # Modify the time zone as needed -
Configurar los puntos de montaje del contenedor de la aplicación
En la sección
volumeMountsde su contenedor de aplicación, comoyour-business-app-container, agregue los siguientes puntos de montaje de volumen:Asegúrese de que el contenedor de la aplicación escriba los registros en el directorio
${shared_volume_path}para que LoongCollector pueda recopilarlos.volumeMounts: # Mount the shared log volume to the application log output directory - name: ${shared_volume_name} mountPath: ${shared_volume_path} # Example: /var/log/app # Mount the communication directory - name: tasksite mountPath: /tasksite # Shared directory for communication with the LoongCollector container # Mount the timezone file - name: tz-config mountPath: /etc/localtime readOnly: true -
Inyectar el contenedor sidecar de LoongCollector
En el arreglo
spec.template.spec.containers, añada la siguiente definición de contenedor sidecar:- name: loongcollector image: aliyun-observability-release-registry.cn-shenzhen.cr.aliyuncs.com/loongcollector/loongcollector:v3.1.1.0-20fa5eb-aliyun command: ["/bin/bash", "-c"] args: - | echo "[$(date)] LoongCollector: Starting initialization" # Start the LoongCollector service /etc/init.d/loongcollectord start # Wait for the configuration to download and the service to be ready sleep 15 # Verify the service status if /etc/init.d/loongcollectord status; then echo "[$(date)] LoongCollector: Service started successfully" touch /tasksite/cornerstone else echo "[$(date)] LoongCollector: Failed to start service" exit 1 fi # Wait for the application container to complete (via the tombstone file signal) echo "[$(date)] LoongCollector: Waiting for application container to complete" until [[ -f /tasksite/tombstone ]]; do sleep 2 done # Allow time to upload remaining logs echo "[$(date)] LoongCollector: Business completed, waiting for log transmission" sleep 30 # Stop the service echo "[$(date)] LoongCollector: Stopping service" /etc/init.d/loongcollectord stop echo "[$(date)] LoongCollector: Shutdown complete" # health check livenessProbe: exec: command: ["/etc/init.d/loongcollectord", "status"] initialDelaySeconds: 30 periodSeconds: 10 timeoutSeconds: 5 failureThreshold: 3 # resource configuration resources: requests: cpu: "100m" memory: "128Mi" limits: cpu: "2000m" memory: "2048Mi" # environment variable configuration env: - name: ALIYUN_LOGTAIL_USER_ID value: "${your_aliyun_user_id}" - name: ALIYUN_LOGTAIL_USER_DEFINED_ID value: "${your_machine_group_user_defined_id}" - name: ALIYUN_LOGTAIL_CONFIG value: "/etc/ilogtail/conf/${your_region_config}/ilogtail_config.json" # Enable full drain mode to ensure all logs are sent before the pod terminates - name: enable_full_drain_mode value: "true" # Append pod environment information as log tags - name: ALIYUN_LOG_ENV_TAGS value: "_pod_name_|_pod_ip_|_namespace_|_node_name_|_node_ip_" # Automatically inject pod and node metadata as log tags - name: "_pod_name_" valueFrom: fieldRef: fieldPath: metadata.name - name: "_pod_ip_" valueFrom: fieldRef: fieldPath: status.podIP - name: "_namespace_" valueFrom: fieldRef: fieldPath: metadata.namespace - name: "_node_name_" valueFrom: fieldRef: fieldPath: spec.nodeName - name: "_node_ip_" valueFrom: fieldRef: fieldPath: status.hostIP # Volume mounts (shared with the application container) volumeMounts: # Read-only mount for the application log directory - name: ${shared_volume_name} # <-- Shared log directory name mountPath: ${dir_containing_your_files} # <-- Path to the shared directory in the sidecar readOnly: true # Mount the communication directory - name: tasksite mountPath: /tasksite # Mount the timezone - name: tz-config mountPath: /etc/localtime readOnly: true
2. Adaptar la lógica del ciclo de vida del contenedor de la aplicación
Según el tipo de carga de trabajo, modifique el contenedor de la aplicación para admitir una salida coordinada con el sidecar:
Tareas de corta duración (Job/CronJob)
# 1. Wait for LoongCollector to be ready
echo "[$(date)] Application: Waiting for LoongCollector to be ready..."
until [[ -f /tasksite/cornerstone ]]; do
sleep 1
done
echo "[$(date)] Application: LoongCollector is ready, starting application logic"
# 2. Execute core application logic (ensure logs are written to the shared directory)
echo "Hello, World!" >> /app/logs/business.log
# 3. Save the exit code
retcode=$?
echo "[$(date)] Application: Task completed with exit code: $retcode"
# 4. Notify LoongCollector that the application task is complete
touch /tasksite/tombstone
echo "[$(date)] Application: Tombstone created, exiting"
exit $retcode
Servicios de larga duración (Deployment / StatefulSet)
# Define the signal handler function
_term_handler() {
echo "[$(date)] [nginx-demo] Caught SIGTERM, starting graceful shutdown..."
# Send a QUIT signal to Nginx for a graceful stop
if [ -n "$NGINX_PID" ]; then
kill -QUIT "$NGINX_PID" 2>/dev/null || true
echo "[$(date)] [nginx-demo] Sent SIGQUIT to Nginx PID: $NGINX_PID"
# Wait for Nginx to stop gracefully
wait "$NGINX_PID"
EXIT_CODE=$?
echo "[$(date)] [nginx-demo] Nginx stopped with exit code: $EXIT_CODE"
fi
# Notify LoongCollector that the application container has stopped
echo "[$(date)] [nginx-demo] Writing tombstone file"
touch /tasksite/tombstone
exit $EXIT_CODE
}
# Register the signal handler
trap _term_handler SIGTERM SIGINT SIGQUIT
# Wait for LoongCollector to be ready
echo "[$(date)] [nginx-demo]: Waiting for LoongCollector to be ready..."
until [[ -f /tasksite/cornerstone ]]; do
sleep 1
done
echo "[$(date)] [nginx-demo]: LoongCollector is ready, starting application logic"
# Start Nginx
echo "[$(date)] [nginx-demo] Starting Nginx..."
nginx -g 'daemon off;' &
NGINX_PID=$!
echo "[$(date)] [nginx-demo] Nginx started with PID: $NGINX_PID"
# Wait for the Nginx process
wait $NGINX_PID
EXIT_CODE=$?
# Also notify LoongCollector if the exit was not caused by a signal
if [ ! -f /tasksite/tombstone ]; then
echo "[$(date)] [nginx-demo] Unexpected exit, writing tombstone"
touch /tasksite/tombstone
fi
exit $EXIT_CODE
3. Establecer el periodo de terminación elegante
En spec.template.spec, establezca un periodo de terminación elegante lo suficientemente largo para permitir que LoongCollector cargue todos los registros restantes.
spec:
# ... Your other existing spec configurations ...
template:
spec:
terminationGracePeriodSeconds: 600 # 10-minute graceful stop period
4. Variables
|
Parámetro |
Descripción |
|
|
El ID de su cuenta de Alibaba Cloud. Configure user identifiers. |
|
|
Identificador personalizado utilizado para crear un grupo de máquinas. Ejemplo: Importante
Asegúrese de que este identificador sea único dentro de la región del Project. |
|
|
La configuración correspondiente a la región y al tipo de acceso de red de su Project de SLS. Service regions. Ejemplo: Si su Project está en la región China (Hangzhou), utilice |
|
|
Nombre personalizado para el volumen compartido. Importante
El valor de |
|
|
Ruta de montaje en el contenedor de LoongCollector donde se encuentran los registros de texto. |
5. Aplicar la configuración y verificar
-
Ejecute el siguiente comando para desplegar los cambios:
kubectl apply -f <YOUR-YAML> -
Compruebe el estado del pod para confirmar que el contenedor de LoongCollector se inyectó correctamente:
kubectl describe pod <YOUR-POD-NAME>Si observa dos contenedores (el de la aplicación y
loongcollector) y su estado es Running, la inyección se realizó correctamente.
Paso 2: Crear un grupo de máquinas con identificador personalizado
Registra las instancias sidecar de LoongCollector en SLS para gestionar centralizadamente la configuración de recopilación.
Procedimiento
-
Crear un grupo de máquinas
Vaya al project deseado. En el panel de navegación izquierdo, haga clic en
.En la página Machine Groups, haga clic en
> Create Machine Group.
-
Configurar el grupo de máquinas
Configure los siguientes parámetros y haga clic en OK:
-
Name: Nombre del grupo de máquinas. No se puede modificar después de la creación. Debe cumplir los siguientes requisitos:
Contener únicamente letras minúsculas, dígitos, guiones (-) y guiones bajos (_).
Comenzar y terminar con una letra minúscula o un dígito.
Tener entre 2 y 128 caracteres de longitud.
Machine Group Identifier: Seleccione Custom Identifier.
Custom Identifier: Introduzca el valor de la variable de entorno
ALIYUN_LOGTAIL_USER_DEFINED_IDque estableció para el contenedor de LoongCollector en el archivo YAML en Step 1. El valor debe coincidir exactamente. De lo contrario, la asociación fallará.
-
-
Verificar el estado de latido del grupo de máquinas
Después de crear el grupo de máquinas, haga clic en su nombre para comprobar el estado de latido en la sección Machine Group Status.
OK: LoongCollector se conectó a SLS y el grupo de máquinas quedó registrado.
-
FAIL:
El cambio de configuración puede tardar hasta dos minutos en surtir efecto. Actualice la página y vuelva a comprobar el estado.
Si el estado sigue siendo FAIL después de dos minutos, consulte Troubleshoot Logtail machine group issues.
Cada pod corresponde a una instancia independiente de LoongCollector. Para una gestión más granular, utilice identificadores personalizados distintos para diferentes aplicaciones o entornos.
Paso 3: Crear una configuración de recopilación
Una configuración de recopilación define qué archivos de registro recopila LoongCollector, cómo analizarlos sintácticamente y qué contenido filtrar.
Procedimiento
En la página
Logstore, haga clic en el icono
situado antes del nombre del logstore deseado para expandirlo.Haga clic en
junto a Data Collection. En el cuadro de diálogo Quick Data Import, busque la tarjeta Kubernetes - File y haga clic en Integrate Now.-
Configure Machine Group Configurations y luego haga clic en Next.
Scenario: Seleccione Kubernetes Clusters.
Deployment Method: Seleccione Sidecar.
Select Machine Group: En la lista Source Machine Group, seleccione el grupo de máquinas que creó en Step 2. Haga clic en
para moverlo a la lista Applied Machine Group.
En la página Logtail Configurations, configure las reglas de recopilación de Logtail.
1. Configuraciones globales y de entrada
Defina el nombre, el origen de los registros y el alcance de la recopilación para la configuración.
Global Configurations:
-
Configuration Name: Nombre personalizado para la configuración de recopilación. Debe ser único dentro de su project. No se puede modificar después de la creación. Convenciones de nomenclatura:
Solo puede contener letras minúsculas, dígitos, guiones (-) y guiones bajos (_).
Debe comenzar y terminar con una letra minúscula o un dígito.
Input Configurations:
Type: Seleccione Text Log Collection.
Logtail Deployment Mode: Seleccione Sidecar.
-
File Path Type:
Path in Container: Recopila archivos de registro desde dentro de un contenedor.
Host Path: Recopila registros de servicios locales del host.
-
File Path: Ruta para la recopilación de registros.
Linux: La ruta debe comenzar con una barra diagonal (/). Por ejemplo,
/data/mylogs/**/*.logespecifica todos los archivos con extensión .log en el directorio/data/mylogsy sus subdirectorios.Windows: La ruta debe comenzar con una letra de unidad, como
C:\Program Files\Intel\**\*.Log.
Maximum Directory Monitoring Depth: Especifica la profundidad máxima de directorios para el comodín
**en File Path. El valor predeterminado de 0 monitorea únicamente el directorio actual.
2. Procesamiento y estructuración de registros
Configure reglas de procesamiento de registros para transformar datos sin procesar y no estructurados en datos estructurados y consultables. Esto mejora la eficiencia de las consultas y el análisis de registros. Se recomienda agregar una muestra de registro antes de configurar las reglas:
En la página Logtail Configuration, dentro del área Processor Configurations, haga clic en Add Sample Log e introduzca el contenido del registro que desea recopilar. El sistema identifica el formato del registro basándose en la muestra y ayuda a generar expresiones regulares y reglas de análisis sintáctico, lo cual simplifica la configuración.
Escenario 1: Manejo de registros multilínea (como trazas de pila de Java)
Registros como las pilas de excepciones de Java y los objetos JSON suelen abarcar varias líneas. En el modo de recopilación predeterminado, se dividen en múltiples registros incompletos, lo que provoca pérdida de contexto. Para evitarlo, habilite el modo multilínea y configure una expresión regular de inicio de línea para fusionar las líneas consecutivas de un mismo registro en una sola entrada completa.
Ejemplo:
Registro sin procesar | En el modo de recopilación predeterminado, cada línea se trata como un registro independiente. La traza de pila se fragmenta y se pierde el contexto. | Con el modo multilínea habilitado, una expresión regular de inicio de línea identifica los registros completos y preserva toda la estructura semántica. |
| En el modo predeterminado, este registro se divide en 6 registros independientes: el primero contiene solo el mensaje de error | Al habilitar el modo multilínea, el registro de error |
Procedimiento: En la página Logtail Configuration, dentro del área Processor Configurations, habilite Multi-line Mode:
-
Type: Seleccione Custom o Multi-line JSON.
-
Custom: El formato del registro sin procesar no es fijo. Debe configurar una Regex to Match First Line para identificar la línea inicial de cada entrada de registro.
-
Regex to Match First Line: Puede generarla automáticamente o introducirla manualmente. La expresión regular debe coincidir con una línea completa de datos. Por ejemplo, la expresión regular de coincidencia del ejemplo anterior es
\[\d+-\d+-\w+:\d+:\d+,\d+]\s\[\w+]\s.*.-
Generación automática: Haga clic en Generate Regex Automatically. Luego, en el cuadro de texto Log Sample, seleccione el contenido del registro a extraer y haga clic en Generate Regex.
El modo heredado de recopilación de salida estándar de Kubernetes no admite la función Add Log Sample ni la generación automática de expresiones regulares. Para probar una expresión regular, cree un LogStore de tipo registro de texto, pruebe la expresión regular en dicho LogStore y luego pegue la expresión regular en la configuración de Logtail del LogStore destino.
Entrada manual: Haga clic en Enter Regex Manually. Después de introducir la expresión, haga clic en Validate.
-
-
Multi-line JSON: Cuando todos los registros sin procesar tienen formato JSON estándar, Simple Log Service maneja automáticamente los saltos de línea dentro de un solo registro JSON.
-
-
Processing Method If Splitting Fails:
Discard: Si un segmento de texto no coincide con la regla de inicio de línea, se descarta.
Retain Single Line: El texto no coincidente se divide y se conserva en el modo original de una sola línea.
Escenario 2: Registros estructurados
Cuando los registros sin procesar son texto no estructurado o semiestructurado, como registros de acceso de NGINX o registros de salida de aplicaciones, la consulta y el análisis directos suelen ser ineficientes. Simple Log Service ofrece diversos plugins de análisis de datos que convierten automáticamente registros sin procesar de diferentes formatos en datos estructurados. Esto proporciona una base sólida para el análisis, el monitoreo y las alertas posteriores.
Ejemplo:
Registro sin procesar | Registro tras el análisis estructurado |
| |
Pasos de configuración: En el área Processor Configurations de la página Logtail Configurations:
Agregar un plugin de análisis sintáctico: Haga clic en Add Processor y configure un plugin, como un regular expression, delimiter, or JSON parsing plugin, según el formato de sus registros. Por ejemplo, para recopilar registros de NGINX, seleccione .
-
NGINX Log Configuration: Copie la definición completa de
log_formatdel archivo de configuración de su servidor Nginx (nginx.conf) y péguela en este cuadro de texto.Ejemplo:
log_format main '$remote_addr - $remote_user [$time_local] "$request" ''$request_time $request_length ''$status $body_bytes_sent "$http_referer" ''"$http_user_agent"';ImportanteLa definición de formato debe coincidir exactamente con el log_format de su servidor. De lo contrario, el análisis sintáctico fallará.
-
Descripción de parámetros de configuración generales: Los siguientes parámetros son comunes a muchos plugins de análisis sintáctico y tienen funciones consistentes.
Original Field: Especifica el campo de origen que se va a analizar. El valor predeterminado es
content, que corresponde a toda la entrada de registro recopilada.Retain Original Field if Parsing Fails: Recomendado. Si el plugin no logra analizar sintácticamente un registro, esta opción conserva el contenido sin procesar en el campo original.
Retain Original Field if Parsing Succeeds: Si se selecciona, esta opción conserva el contenido sin procesar incluso después de un análisis sintáctico exitoso.
3. Filtrado de registros
Los grandes volúmenes de registros de bajo valor (como los de nivel DEBUG o INFO) desperdician almacenamiento, incrementan costos, reducen la eficiencia de las consultas y generan riesgos de fuga de datos. Configure directivas de filtrado para lograr una recolección de registros eficiente y segura.
Filtrado por contenido
Es posible filtrar con base en los campos del contenido del registro; por ejemplo, recolectar únicamente los registros con nivel WARNING o ERROR.
Ejemplo:
Registro original sin procesamiento | Recolectar solo registros |
| |
Procedimiento: En el área Processor Configurations de la página Logtail Configuration
Haga clic en Add Processor y seleccione :
Field Name: Campo del registro que se utilizará para el filtrado.
Field Value: Expresión regular empleada para el filtrado. Solo se admite la coincidencia de texto completo; no se admite la coincidencia parcial por palabra clave.
Lista de bloqueados de recolección
Utilice una lista de bloqueados para excluir directorios o archivos específicos y evitar que se carguen registros irrelevantes o sensibles.
Procedimiento: En la página Logtail Configuration, dentro del área , habilite Collection Blacklist y haga clic en Add.
Se admite la coincidencia exacta y la coincidencia con comodines para directorios y nombres de archivo. Los únicos caracteres comodín disponibles son el asterisco (*) y el signo de interrogación (?).
-
File Path Blacklist: Rutas de archivo que se deben ignorar. Ejemplos:
/home/admin/private*.log: Ignora todos los archivos del directorio/home/admin/que comienzan con "private" y terminan con ".log"./home/admin/private*/*_inner.log: Ignora los archivos que terminan con "_inner.log" dentro de los directorios que comienzan con "private" bajo el directorio/home/admin/.
-
File Blacklist: Nombres de archivo que se deben ignorar durante la recolección. Ejemplo:
app_inner.log: Ignora todos los archivos llamadosapp_inner.log.
-
Directory Blacklist: La ruta del directorio no debe terminar con una barra diagonal (/). Ejemplos:
/home/admin/dir1/: La lista de bloqueados de directorios no surtirá efecto./home/admin/dir*: Ignora los archivos de todos los subdirectorios bajo/home/admin/que comienzan con "dir"./home/admin/*/dir: Ignora todos los archivos en los subdirectorios llamados "dir" que se encuentran en el segundo nivel bajo el directorio/home/admin/. Por ejemplo, se ignoran los archivos del directorio/home/admin/a/dir, mientras que se recolectan los del directorio/home/admin/a/b/dir.
Filtrado de contenedores
Establezca condiciones de recolección con base en los metadatos del contenedor (variables de entorno, etiquetas de Pod, namespaces, nombres de contenedor) para controlar qué registros de contenedores se recolectan.
Pasos de configuración: En la página Logtail Configurations, dentro del área Input Configurations, habilite Container Filtering y haga clic en Add.
Varias condiciones tienen una relación "AND". Todas las coincidencias de expresiones regulares se basan en el motor de expresiones regulares RE2 de Go, el cual presenta algunas limitaciones en comparación con motores como PCRE. Siga las indicaciones de Appendix: Regular expression limits (container filtering) al escribir expresiones regulares.
Lista de bloqueados/permitidos de variables de entorno: Filtra contenedores según sus variables de entorno.
Lista de bloqueados/permitidos de etiquetas de Pod de K8s: Filtra contenedores según las etiquetas de Pod de sus pods anfitriones.
Coincidencia regex de nombre de Pod de K8s: Filtra contenedores según el nombre de su Pod.
Coincidencia regex de Namespace de K8s: Filtra contenedores según su namespace.
Coincidencia regex de nombre de contenedor de K8s: Filtra contenedores según su nombre.
Lista de bloqueados/permitidos de etiquetas de contenedor: Filtra contenedores según sus etiquetas. Este método está diseñado para Docker y no se recomienda para Kubernetes.
4. Clasificación de registros
Cuando varias aplicaciones comparten el mismo formato de registro, resulta difícil distinguir el origen de cada uno. Configure temas de registro y etiquetado de registros para automatizar la asociación de contexto y la clasificación lógica.
Temas de registro
Si varias aplicaciones generan registros con el mismo formato pero en rutas distintas (como /apps/app-A/run.log y /apps/app-B/run.log), genere un tema para diferenciar los registros de cada servicio.
Procedimiento: En , seleccione un método para generar temas. Se admiten los siguientes tres tipos:
Tema de grupo de máquinas: Cuando una configuración de recolección se aplica a varios grupos de máquinas, LoongCollector utiliza automáticamente el nombre del grupo de máquinas del servidor como valor del campo
__topic__para la carga. Esta opción es adecuada para escenarios donde los registros se clasifican por host.Custom: El formato es
customized://<custom_topic_name>; por ejemplo,customized://app-login. Resulta útil para escenarios de temas estáticos con identificadores de servicio fijos.-
Extracción de ruta de archivo: Extrae información clave de la ruta completa del archivo de registro para marcar dinámicamente el origen del registro. Es útil cuando varios usuarios o aplicaciones comparten el mismo nombre de archivo de registro pero tienen rutas diferentes. Si varios usuarios o servicios escriben registros en distintos directorios de nivel superior, pero las subrutas y los nombres de archivo son idénticos, el origen no puede distinguirse solo por el nombre del archivo. Por ejemplo:
/data/logs ├── userA │ └── serviceA │ └── service.log ├── userB │ └── serviceA │ └── service.log └── userC └── serviceA └── service.logEn este caso, configure Extracción de ruta de archivo y utilice una expresión regular para extraer información clave de la ruta completa. El resultado coincidente se carga luego al Logstore como tema.
Regla de extracción de ruta de archivo: Basada en grupos de captura de expresiones regulares
Al configurar una expresión regular, el sistema determina automáticamente el formato del campo de salida según la cantidad y el nombre de los grupos de captura. Las reglas son las siguientes:
En la expresión regular para la ruta de archivo, debe escapar la barra diagonal (/).
Tipo de grupo de captura
Escenario
Campo generado
Ejemplo de regex
Ejemplo de ruta coincidente
Ejemplo de campo generado
Grupo de captura único (solo un
(.*?))Solo se requiere una dimensión para distinguir el origen (como nombre de usuario o entorno)
Genera el campo
__topic__\/logs\/(.*?)\/app\.log/logs/userA/app.log__topic__: userAVarios grupos de captura sin nombre (varios
(.*?))Se necesitan varias dimensiones para distinguir el origen, pero no se requieren etiquetas semánticas
Genera un campo de etiqueta
__tag__:__topic_{i}__, donde{i}es el número ordinal del grupo de captura\/logs\/(.*?)\/(.*?)\/app\.log/logs/userA/svcA/app.log__tag__:__topic_1__userA__tag__:__topic_2__svcAVarios grupos de captura con nombre (mediante
(?P<name>.*?))Se necesitan varias dimensiones para distinguir el origen y se desea que los significados de los campos sean claros para facilitar consultas y análisis
Genera un campo de etiqueta
__tag__:{name}\/logs\/(?P<user>.*?)\/(?P<service>.*?)\/app\.log/logs/userA/svcA/app.log__tag__:user:userA;__tag__:service:svcA
Etiquetado de registros
Habilite el enriquecimiento de etiquetas de registro para extraer información clave de las variables de entorno del contenedor o de las etiquetas de Pod de Kubernetes y usarlas como etiquetas para una agrupación detallada de registros.
Pasos de configuración: En el área Input Configurations de la página Logtail Configurations, habilite Log Tag Enrichment y haga clic en Add.
-
Environment Variables: Configure el nombre de la variable de entorno y el nombre de la etiqueta. El valor de la variable de entorno se almacena como valor de la etiqueta.
Nombre de la variable de entorno: Nombre de la variable de entorno que se va a extraer.
Nombre de la etiqueta: Nombre de la etiqueta.
-
Pod Labels: Configure el nombre de la etiqueta de Pod y el nombre de la etiqueta. El valor de la etiqueta de Pod se almacena como valor de la etiqueta.
Nombre de la etiqueta de Pod: Nombre de la etiqueta de Pod de Kubernetes que se va a extraer.
Nombre de la etiqueta: Nombre de la etiqueta.
5. Configuración de salida
De forma predeterminada, todos los registros se envían al Logstore actual con compresión lz4. Para distribuir registros en varios Logstores, configure destinos de salida adicionales.
Distribución dinámica a múltiples destinos
La distribución a múltiples destinos solo está disponible en LoongCollector 3.0.0 y versiones posteriores. Logtail no admite esta función.
Se pueden configurar hasta cinco destinos de salida.
Después de configurar varios destinos de salida, la configuración de recolección deja de aparecer en la lista de configuraciones de recolección del Logstore actual. Para consultar, modificar o eliminar una configuración de distribución a múltiples destinos, consulte Manage multi-destination distribution configurations.
Pasos de configuración: En el área Output Configurations de la página Logtail Configurations.
Haga clic en
para expandir la configuración de salida.-
Haga clic en Add Output Targets y complete la siguiente configuración:
Logstores: Seleccione el Logstore de destino.
Compression Method: Se admiten lz4 y zstd.
-
Route Settings: Enruta los registros según los campos de etiqueta. El sistema carga los registros coincidentes en el Logstore de destino. Si esta configuración está vacía, el sistema carga todos los registros recolectados en este destino.
-
Tag Name: Nombre del campo de etiqueta utilizado para el enrutamiento. Introduzca únicamente el nombre del campo (por ejemplo,
__path__), sin el prefijo__tag__:. Los campos de etiqueta se dividen en dos categorías:Las etiquetas se describen en Manage LoongCollector collection tags .
Relacionadas con el agente: Vinculadas al agente de recolección e independientes de los plugins. Algunos ejemplos son
__hostname__y__user_defined_id__.Relacionadas con el plugin de entrada: Proporcionadas por los plugins de entrada para enriquecer los registros con información contextual. Algunos ejemplos incluyen
__path__para la recolección de archivos y_pod_name_o_container_name_para la recolección en Kubernetes.
Tag Value: Si el campo de etiqueta de un registro coincide con este valor, el sistema envía el registro a este Logstore de destino.
Discard this tag?: Si se habilita, el sistema elimina este campo de etiqueta de los registros antes de cargarlos.
-
Paso 4: Configurar consulta y análisis
Una vez que haya configurado el procesamiento de registros y los plugins, haga clic en Next para ir a la página Query and Analysis Configurations:
El sistema habilita de forma predeterminada full-text index, lo que permite realizar búsquedas por palabras clave en el contenido original del registro.
Para realizar consultas precisas por campo, espere a que se carguen los Preview Data en la página y luego haga clic en Automatic Index Generation. Simple Log Service genera un field index con base en la primera entrada de los datos de vista previa.
Una vez completada la configuración, haga clic en Next para finalizar la configuración de recolección.
Paso 5: Consultar los registros cargados
Después de crear una configuración de recolección y aplicarla a un grupo de máquinas, esta se despliega automáticamente y comienza a recolectar registros incrementales.
Verificar nuevas entradas de registro: LoongCollector recolecta únicamente registros incrementales. Ejecute
tail -f /path/to/your/log/filey utilice su aplicación para generar nuevas entradas de registro.-
Consultar registros: Vaya a la página Search & Analyze del Logstore objetivo y haga clic en Search & Analyze. El intervalo de tiempo predeterminado corresponde a los últimos 15 minutos. Compruebe si aparecen nuevos registros. Los campos predeterminados para registros de texto de contenedores son los siguientes:
Parámetro
Descripción
tag:hostname
Nombre del host del contenedor.
tag:path
Ruta del archivo de registro dentro del contenedor.
tag:container_ip
Dirección IP del contenedor.
tag:image_name
Nombre de la imagen que utiliza el contenedor.
NotaSi varias imágenes tienen el mismo hash pero distintos nombres o etiquetas, la configuración de recolección selecciona uno de los nombres según el hash. No se garantiza que el nombre seleccionado coincida con el definido en el archivo YAML.
tag:pod_name
Nombre del pod.
tag:namespace
Namespace al que pertenece el pod.
tag:pod_uid
Identificador único (UID) del pod.
Configuraciones clave para la integridad de los registros
Estos parámetros de configuración afectan directamente la integridad y confiabilidad de la recolección de registros.
Configuración de recursos de LoongCollector
Una asignación adecuada de recursos es fundamental para el rendimiento de la recolección en escenarios de alto volumen. Parámetros clave:
# Configure CPU and memory resources based on the log generation rate
resources:
limits:
cpu: "2000m"
memory: "2Gi"
# Parameters that affect collection performance
env:
- name: cpu_usage_limit
value: "2"
- name: mem_usage_limit
value: "2048"
- name: max_bytes_per_sec
value: "209715200"
- name: process_thread_count
value: "8"
- name: send_request_concurrency
value: "20"
Para configurar Logtail según su volumen de datos, consulte Logtail network types, startup parameters, and configuration files.
Configuración de cuotas del lado del servidor
Los límites de cuota del lado del servidor o los problemas de red pueden bloquear la transmisión de datos y generar contrapresión que afecta la integridad de los registros. Use CloudLens for SLS to monitor Project resource quotas.
Optimización de la configuración inicial de recolección
La directiva inicial de recolección de archivos al iniciar el pod afecta la integridad de los registros, especialmente en escenarios de alto throughput.
El tamaño inicial de recolección especifica dónde comienza la recolección en un archivo nuevo. Valor predeterminado: 1024 KB.
Si un archivo tiene un tamaño inferior a 1024 KB, la recolección comienza desde su inicio.
Si un archivo supera los 1024 KB, la recolección comienza 1024 KB antes de su final.
El tamaño inicial de recolección puede variar entre 0 y 10,485,760 KB (10 GB).
enable_full_drain_mode
Garantiza que LoongCollector complete toda la recolección y transmisión de datos antes de finalizar al recibir una señal SIGTERM.
# Parameter that affects collection integrity
env:
- name: enable_full_drain_mode
value: "true" # Enable full drain mode
Preguntas frecuentes
Gestión de configuraciones de distribución a múltiples destinos
Las configuraciones de distribución a múltiples destinos se aplican a varios Logstores y deben gestionarse a nivel de Project:
Inicie sesión en la consola de Log Service y haga clic en el nombre del Project objetivo.
-
En la página del Project objetivo, dentro del panel de navegación izquierdo, haga clic en
.NotaEsta página centraliza la gestión de todas las configuraciones de recolección dentro del Project, incluidas aquellas que permanecen después de eliminar un Logstore.
Siguientes pasos
Data visualization: Utilice un panel de visualización para supervisar tendencias en métricas clave.
Automated alerting for data anomalies: Configure directivas de alerta para detectar anomalías del sistema en tiempo real.
SLS recolecta únicamente registros incrementales. Para recolectar registros históricos, consulte Import historical log files.
Apéndice: Ejemplo de YAML
Configuración completa de Kubernetes con un contenedor de aplicación Nginx y un contenedor sidecar de LoongCollector.
Antes de utilizar esta configuración, reemplace los siguientes marcadores de posición:
Reemplace
${your_aliyun_user_id}con el ID de su cuenta de Alibaba Cloud.Reemplace
${your_machine_group_user_defined_id}con el custom identifier of the machine group that you created in Step 3. El valor debe coincidir exactamente.-
Reemplace
${your_region_config}con el nombre de configuración que corresponda a la región y al tipo de red de su proyecto de SLS.Ejemplo: Si su proyecto se encuentra en la región China (Hangzhou), utilice
cn-hangzhoupara acceso por red interna ocn-hangzhou-internetpara acceso por red pública.
Tareas de corta duración (Job/CronJob)
apiVersion: batch/v1
kind: Job
metadata:
name: demo-job
spec:
backoffLimit: 3
activeDeadlineSeconds: 3600
completions: 1
parallelism: 1
template:
spec:
restartPolicy: Never
terminationGracePeriodSeconds: 300
containers:
# Application container
- name: demo-job
image: debian:bookworm-slim
command: ["/bin/bash", "-c"]
args:
- |
# Wait for LoongCollector to be ready.
echo "[$(date)] Business: Waiting for LoongCollector to be ready..."
until [[ -f /tasksite/cornerstone ]]; do
sleep 1
done
echo "[$(date)] Business: LoongCollector is ready, starting business logic"
# Run the application logic.
echo "Hello, World!" >> /app/logs/business.log
# Save the exit code.
retcode=$?
echo "[$(date)] Business: Task completed with exit code: $retcode"
# Notify LoongCollector that the task is finished.
touch /tasksite/tombstone
echo "[$(date)] Business: Tombstone created, exiting"
exit $retcode
# Resource requests and limits
resources:
requests:
cpu: "100m"
memory: "128Mi"
limits:
cpu: "500"
memory: "512Mi"
# volume mounts
volumeMounts:
- name: app-logs
mountPath: /app/logs
- name: tasksite
mountPath: /tasksite
# LoongCollector sidecar container
- name: loongcollector
image: aliyun-observability-release-registry.cn-hongkong.cr.aliyuncs.com/loongcollector/loongcollector:v3.1.1.0-20fa5eb-aliyun
command: ["/bin/bash", "-c"]
args:
- |
echo "[$(date)] LoongCollector: Starting initialization"
# Start the LoongCollector service.
/etc/init.d/loongcollectord start
# Wait for the configuration to download and the service to be ready.
sleep 15
# Verify the service status.
if /etc/init.d/loongcollectord status; then
echo "[$(date)] LoongCollector: Service started successfully"
touch /tasksite/cornerstone
else
echo "[$(date)] LoongCollector: Failed to start service"
exit 1
fi
# Wait for the application container to finish.
echo "[$(date)] LoongCollector: Waiting for business container to complete"
until [[ -f /tasksite/tombstone ]]; do
sleep 2
done
echo "[$(date)] LoongCollector: Business completed, waiting for log transmission"
# Allow sufficient time to send remaining logs.
sleep 30
echo "[$(date)] LoongCollector: Stopping service"
/etc/init.d/loongcollectord stop
echo "[$(date)] LoongCollector: Shutdown complete"
# health check
livenessProbe:
exec:
command: ["/etc/init.d/loongcollectord", "status"]
initialDelaySeconds: 30
periodSeconds: 10
timeoutSeconds: 5
failureThreshold: 3
# Resource requests and limits
resources:
requests:
cpu: "100m"
memory: "128Mi"
limits:
cpu: "500m"
memory: "512Mi"
# environment variables
env:
- name: ALIYUN_LOGTAIL_USER_ID
value: "your-user-id"
- name: ALIYUN_LOGTAIL_USER_DEFINED_ID
value: "your-user-defined-id"
- name: ALIYUN_LOGTAIL_CONFIG
value: "/etc/ilogtail/conf/cn-hongkong/ilogtail_config.json"
- name: ALIYUN_LOG_ENV_TAGS
value: "_pod_name_|_pod_ip_|_namespace_|_node_name_"
# Inject pod metadata.
- name: "_pod_name_"
valueFrom:
fieldRef:
fieldPath: metadata.name
- name: "_pod_ip_"
valueFrom:
fieldRef:
fieldPath: status.podIP
- name: "_namespace_"
valueFrom:
fieldRef:
fieldPath: metadata.namespace
- name: "_node_name_"
valueFrom:
fieldRef:
fieldPath: spec.nodeName
# volume mounts
volumeMounts:
- name: app-logs
mountPath: /app/logs
readOnly: true
- name: tasksite
mountPath: /tasksite
- name: tz-config
mountPath: /etc/localtime
readOnly: true
# Volume definitions
volumes:
- name: app-logs
emptyDir: {}
- name: tasksite
emptyDir:
medium: Memory
sizeLimit: "10Mi"
- name: tz-config
hostPath:
path: /usr/share/zoneinfo/Asia/Shanghai
Servicios de larga duración (Deployment / StatefulSet)
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-demo
namespace: production
labels:
app: nginx-demo
version: v1.0.0
spec:
replicas: 3
strategy:
type: RollingUpdate
rollingUpdate:
maxUnavailable: 1
maxSurge: 1
selector:
matchLabels:
app: nginx-demo
template:
metadata:
labels:
app: nginx-demo
version: v1.0.0
spec:
terminationGracePeriodSeconds: 600 # 10-minute graceful shutdown period
containers:
# Application container - Web application
- name: nginx-demo
image: anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6
# Startup command and signal handling
command: ["/bin/sh", "-c"]
args:
- |
# Define the signal handler.
_term_handler() {
echo "[$(date)] [nginx-demo] Caught SIGTERM, starting graceful shutdown..."
# Send the QUIT signal to Nginx for a graceful stop.
if [ -n "$NGINX_PID" ]; then
kill -QUIT "$NGINX_PID" 2>/dev/null || true
echo "[$(date)] [nginx-demo] Sent SIGQUIT to Nginx PID: $NGINX_PID"
# Wait for Nginx to stop gracefully.
wait "$NGINX_PID"
EXIT_CODE=$?
echo "[$(date)] [nginx-demo] Nginx stopped with exit code: $EXIT_CODE"
fi
# Notify LoongCollector that the application container has stopped.
echo "[$(date)] [nginx-demo] Writing tombstone file"
touch /tasksite/tombstone
exit $EXIT_CODE
}
# Register the signal handler.
trap _term_handler SIGTERM SIGINT SIGQUIT
# Wait for LoongCollector to be ready.
echo "[$(date)] [nginx-demo]: Waiting for LoongCollector to be ready..."
until [[ -f /tasksite/cornerstone ]]; do
sleep 1
done
echo "[$(date)] [nginx-demo]: LoongCollector is ready, starting business logic"
# Start Nginx.
echo "[$(date)] [nginx-demo] Starting Nginx..."
nginx -g 'daemon off;' &
NGINX_PID=$!
echo "[$(date)] [nginx-demo] Nginx started with PID: $NGINX_PID"
# Wait for the Nginx process to exit.
wait $NGINX_PID
EXIT_CODE=$?
# If the process exits without a signal, notify LoongCollector.
if [ ! -f /tasksite/tombstone ]; then
echo "[$(date)] [nginx-demo] Unexpected exit, writing tombstone"
touch /tasksite/tombstone
fi
exit $EXIT_CODE
# Resource requests and limits
resources:
requests:
cpu: "200m"
memory: "256Mi"
limits:
cpu: "1000m"
memory: "1Gi"
# volume mounts
volumeMounts:
- name: nginx-logs
mountPath: /var/log/nginx
- name: tasksite
mountPath: /tasksite
- name: tz-config
mountPath: /etc/localtime
readOnly: true
# LoongCollector sidecar container
- name: loongcollector
image: aliyun-observability-release-registry.cn-shenzhen.cr.aliyuncs.com/loongcollector/loongcollector:v3.1.1.0-20fa5eb-aliyun
command: ["/bin/bash", "-c"]
args:
- |
echo "[$(date)] LoongCollector: Starting initialization"
# Start the LoongCollector service.
/etc/init.d/loongcollectord start
# Wait for the configuration to download and the service to be ready.
sleep 15
# Verify the service status.
if /etc/init.d/loongcollectord status; then
echo "[$(date)] LoongCollector: Service started successfully"
touch /tasksite/cornerstone
else
echo "[$(date)] LoongCollector: Failed to start service"
exit 1
fi
# Wait for the application container to finish.
echo "[$(date)] LoongCollector: Waiting for business container to complete"
until [[ -f /tasksite/tombstone ]]; do
sleep 2
done
echo "[$(date)] LoongCollector: Business completed, waiting for log transmission"
# Allow sufficient time to send remaining logs.
sleep 30
echo "[$(date)] LoongCollector: Stopping service"
/etc/init.d/loongcollectord stop
echo "[$(date)] LoongCollector: Shutdown complete"
# health check
livenessProbe:
exec:
command: ["/etc/init.d/loongcollectord", "status"]
initialDelaySeconds: 30
periodSeconds: 10
timeoutSeconds: 5
failureThreshold: 3
# Resource requests and limits
resources:
requests:
cpu: "100m"
memory: "128Mi"
limits:
cpu: "2000m"
memory: "2048Mi"
# environment variables
env:
- name: ALIYUN_LOGTAIL_USER_ID
value: "${your_aliyun_user_id}"
- name: ALIYUN_LOGTAIL_USER_DEFINED_ID
value: "${your_machine_group_user_defined_id}"
- name: ALIYUN_LOGTAIL_CONFIG
value: "/etc/ilogtail/conf/${your_region_config}/ilogtail_config.json"
# Enable full drain mode to send all logs when the pod stops.
- name: enable_full_drain_mode
value: "true"
# Append pod environment information as log tags.
- name: "ALIYUN_LOG_ENV_TAGS"
value: "_pod_name_|_pod_ip_|_namespace_|_node_name_|_node_ip_"
# Get pod and node information.
- name: "_pod_name_"
valueFrom:
fieldRef:
fieldPath: metadata.name
- name: "_pod_ip_"
valueFrom:
fieldRef:
fieldPath: status.podIP
- name: "_namespace_"
valueFrom:
fieldRef:
fieldPath: metadata.namespace
- name: "_node_name_"
valueFrom:
fieldRef:
fieldPath: spec.nodeName
- name: "_node_ip_"
valueFrom:
fieldRef:
fieldPath: status.hostIP
# volume mounts
volumeMounts:
- name: nginx-logs
mountPath: /var/log/nginx
readOnly: true
- name: tasksite
mountPath: /tasksite
- name: tz-config
mountPath: /etc/localtime
readOnly: true
# Volume definitions
volumes:
- name: nginx-logs
emptyDir: {}
- name: tasksite
emptyDir:
medium: Memory
sizeLimit: "50Mi"
- name: tz-config
hostPath:
path: /usr/share/zoneinfo/Asia/Shanghai
Apéndice: Procesadores nativos
En la página Logtail Configuration, dentro del área Processor Configurations, puede agregar complementos de procesamiento para estructurar los registros sin procesar. Para añadir un complemento de procesamiento a una configuración de recopilación existente, siga estos pasos:
En el panel de navegación izquierdo, seleccione
Logstores y localice el logstore de destino.Haga clic en
a la izquierda del nombre para expandir el logstore.Haga clic en Logtail Configuration. En la lista de configuraciones, busque la configuración de Logtail deseada y haga clic en Manage Logtail Configuration en la columna Actions.
En la página de configuración de Logtail, haga clic en Edit.
Esta sección presenta únicamente los complementos de procesamiento más utilizados, que cubren los escenarios comunes de procesamiento de registros. Para conocer más funciones, consulte Extension processing plug-ins .
Reglas para combinar complementos (aplica a LoongCollector / Logtail 2.0 y versiones posteriores):
Los complementos de procesamiento nativos y de extensión se pueden usar de forma independiente o combinada según sea necesario.
Se recomienda utilizar primero los complementos de procesamiento nativos, ya que ofrecen mejor rendimiento y mayor estabilidad.
Cuando las funciones nativas no satisfacen los requisitos del negocio, puede agregar complementos de procesamiento de extensión después de los nativos configurados para realizar un procesamiento complementario.
Restricción de orden:
Todos los complementos se ejecutan secuencialmente en el orden en que se configuran, lo que forma una cadena de procesamiento. Nota: Todos los complementos de procesamiento nativos deben preceder a cualquier complemento de procesamiento de extensión. Después de agregar un complemento de procesamiento de extensión, no podrá añadir más complementos de procesamiento nativos.
Análisis con expresiones regulares
Utilice expresiones regulares para extraer campos de los registros como pares clave-valor, lo que permite su consulta y análisis de forma independiente.
Ejemplo:
Registro sin procesar sin ningún procesamiento | Uso del complemento de análisis con expresiones regulares |
| |
Procedimiento: En la sección Processor Configurations de la página Logtail Configurations, haga clic en Add Processor y seleccione .
-
Regular Expression: Expresión regular para coincidir con el contenido del registro. Puede generarla automáticamente o introducirla de forma manual.
-
Generación automática:
Haga clic en Generate.
En el cuadro Log Sample, seleccione el contenido del registro que desea extraer.
-
Haga clic en Generate Regular Expression.
Por ejemplo, si pega un registro en formato Apache Combined en el cuadro Log Sample, este contendrá campos como la IP del cliente, la marca de tiempo, el método y la ruta de la solicitud, el código de estado, Referer y User-Agent.
Entrada manual: Introduzca manualmente la expresión regular en Manually Enter Regular Expression según el formato del registro.
Después de introducir la expresión, haga clic en Validate para comprobar si analiza correctamente el contenido del registro.
-
Extracted Field: Establezca un nombre de campo (clave) para cada fragmento de contenido de registro extraído (valor).
Para obtener información sobre otros parámetros, consulte las descripciones generales de parámetros en Use case 2: Structured logs.
Análisis por delimitador
Utilice el análisis por delimitador para dividir el contenido del registro en pares clave-valor. Admite delimitadores de uno o varios caracteres.
Ejemplo:
Registro sin procesar sin ningún procesamiento | Campos divididos por el carácter especificado |
| |
Procedimiento: En la sección Processor Configurations de la página Logtail Configurations, haga clic en Add Processor y seleccione .
-
Delimiter: Carácter utilizado para dividir el contenido del registro.
Ejemplo: Para un archivo CSV, seleccione Custom e introduzca una coma (,).
Quote: Cuando el valor de un campo contiene el delimitador, debe especificar un carácter de comilla para envolver el campo y evitar una división incorrecta.
-
Extracted Field: Asigne un nombre de campo (clave) a cada columna en orden secuencial. Los nombres de campo deben cumplir las siguientes reglas:
Solo pueden contener letras, dígitos y guiones bajos (_).
Deben comenzar con una letra o un guion bajo (_).
Pueden tener una longitud máxima de 128 bytes.
Para obtener información sobre otros parámetros, consulte las descripciones generales de parámetros en Use case 2: Structured logs.
Análisis JSON
Analiza registros con formato de objetos JSON y los convierte en pares clave-valor.
Ejemplo:
Registro sin procesar sin ningún procesamiento | Extracción automática de pares clave-valor JSON estándar |
| |
Procedimiento: En la sección Processor Configurations de la página Logtail Configurations, haga clic en Add Processor y seleccione .
Original Field: El valor predeterminado es
content. Este campo contiene el registro sin procesar que se va a analizar.Para obtener información sobre otros parámetros, consulte las descripciones generales de parámetros en Use case 2: Structured logs.
Expansión de campos JSON
Expande un campo que contiene un objeto JSON anidado en múltiples pares clave-valor.
Ejemplo:
Registro sin procesar sin ningún procesamiento | Profundidad de expansión: 0, uso de la profundidad de expansión como prefijo | Profundidad de expansión: 1, uso de la profundidad de expansión como prefijo |
| | |
Procedimiento: En la sección Processor Configurations de la página Logtail Configurations, haga clic en Add Processor y seleccione .
Original Field: Nombre del campo original que se va a expandir, por ejemplo,
content.JSON Expansion Depth: Nivel de expansión del objeto JSON. Un valor de 0 (predeterminado) expande completamente el objeto, 1 expande solo el nivel actual, y así sucesivamente.
Character to Concatenate Expanded Keys: Carácter utilizado para unir los nombres de campo durante la expansión JSON. El valor predeterminado es un guion bajo (_).
Name Prefix of Expanded Keys: Prefijo que se agrega a los nombres de campo después de la expansión JSON.
-
Expand Array: Active este interruptor para expandir matrices en pares clave-valor con índices.
Ejemplo:
{"k":["a","b"]}se expande ak[0]: "a", k[1]: "b".Para cambiar el nombre de un campo expandido (por ejemplo, de
prefix_s_key_k1anew_field_name), agregue un procesador Rename Fields para completar la asignación. Para obtener información sobre otros parámetros, consulte las descripciones generales de parámetros en Use case 2: Structured logs.
Análisis de matrices JSON
Utilice la función json_extract function para extraer objetos JSON de una matriz JSON.
Ejemplo:
Registro sin procesar sin ningún procesamiento | Extracción de estructura de matriz JSON |
| |
Procedimiento: En la página Logtail Configuration, dentro del área Processor Configurations, cambie el Processing Method a SPL, configure la SPL Statement y utilice la función json_extract para extraer objetos JSON de la matriz JSON.
Ejemplo: Extraiga elementos de la matriz JSON en el campo de registro content y almacene los resultados en los nuevos campos json1 y json2.
* | extend json1 = json_extract(content, '$[0]'), json2 = json_extract(content, '$[1]')
Análisis de registros Apache
Estructure el contenido del registro según las definiciones de su archivo de configuración de registros de Apache y analícelo en múltiples pares clave-valor.
Ejemplo:
Registro sin procesar sin ningún procesamiento | Análisis de formato de registro común de Apache |
| |
Procedimiento: En la sección Processor Configurations de la página Logtail Configurations, haga clic en Add Processor y seleccione .
Log Format: combined
-
APACHE LogFormat Configuration: El sistema rellena automáticamente este campo según el Log Format seleccionado.
ImportanteAsegúrese de que el contenido generado automáticamente coincida exactamente con la definición
LogFormaten el archivo de configuración de Apache de su servidor (generalmente/etc/apache2/apache2.conf). Para obtener información sobre otros parámetros, consulte las descripciones generales de parámetros en Use case 2: Structured logs.
Enmascaramiento de datos
Enmascare datos confidenciales en los registros.
Ejemplo:
Registro sin procesar sin ningún procesamiento | Resultado del enmascaramiento |
| |
Procedimiento: En la página Logtail Configuration, dentro del área Processor Configurations, haga clic en Add Processor y seleccione :
Original Field: Campo de origen que contiene el contenido del registro antes del análisis.
-
Data Masking Method:
const: Reemplaza el contenido confidencial con la cadena especificada.
md5: Reemplaza el contenido confidencial con su hash MD5 correspondiente.
Replacement String: Si selecciona const en Data Masking Method, debe introducir una cadena para reemplazar el contenido confidencial.
Content Expression that Precedes Replaced Content: Se utiliza para encontrar contenido confidencial. Configure mediante sintaxis RE2.
Content Expression to Match Replaced Content: Expresión para el contenido confidencial. Configure mediante sintaxis RE2.
Análisis de tiempo
Analiza el campo de tiempo en el registro y establece el resultado del análisis como el campo __time__ del registro.
Ejemplo:
Registro sin procesar sin ningún procesamiento | Análisis de tiempo |
| En la vista de detalles de registros de SLS, el registro JSON se analiza correctamente en campos estructurados. Cada campo ( |
Procedimiento: En la página Logtail Configuration, dentro del área Processor Configurations, haga clic en Add Processor y seleccione :
Original Field: Campo de origen que contiene el contenido del registro antes del análisis.
Time Format: Establezca el formato de tiempo correspondiente según el contenido temporal del registro.
Time Zone: Seleccione la zona horaria del campo de tiempo del registro. De forma predeterminada, se utiliza la zona horaria de la máquina, que corresponde a la zona horaria del entorno donde se ejecuta el proceso de LoongCollector (Logtail).
Limitaciones de expresiones regulares para filtrado de contenedores
Las expresiones regulares para el filtrado de contenedores utilizan el motor Go RE2, el cual tiene limitaciones de sintaxis en comparación con PCRE.
1. Diferencias en la sintaxis de grupos con nombre
Go utiliza la sintaxis (?P<name>...) para definir un grupo con nombre y no admite la sintaxis (?<name>...) de PCRE.
Sintaxis correcta:
(?P<year>\d{4})Sintaxis incorrecta:
(?<year>\d{4})
2. Funciones de expresiones regulares no admitidas
El motor RE2 no admite las siguientes funciones comunes pero complejas de expresiones regulares:
Aserciones:
(?=...),(?!...),(?<=...)y(?<!...)Expresiones condicionales:
(?(condition)true|false)Coincidencia recursiva:
(?R)y(?0)Referencias a subprogramas:
(?&name)y(?P>name)Grupos atómicos:
(?>...)
3. Recomendaciones
Utilice herramientas como Regex101 para depurar expresiones regulares. Seleccione el modo Golang (RE2) para garantizar la compatibilidad. La sintaxis no admitida impide el análisis o la coincidencia correctos.