Este tema explica la sintaxis de las funciones de extracción de valores de campo, incluidos sus parámetros y ejemplos.
Lista de funciones
Tipo | Función | Descripción |
Extracción con expresión regular | Extrae un valor de un campo mediante una expresión regular y lo asigna a otro campo. Esta función se puede combinar con otras. Para ver un ejemplo relacionado, consulte Parse Java error logs. | |
Extracción JSON | Procesa un objeto JSON en un campo especificado. Las operaciones incluyen expandir el objeto, extraer datos con JMESPath, o extraer y expandir simultáneamente. Esta función se puede combinar con otras. Para ver un ejemplo relacionado, consulte Transform complex JSON data. | |
Extracción basada en delimitadores | Extrae valores para varios campos desde un campo de origen mediante un delimitador y nombres de campo predefinidos.
Estas funciones se pueden combinar con otras. Para ver un ejemplo relacionado, consulte Parse CSV-formatted logs. | |
Extracción clave-valor | Extrae pares clave-valor de uno o más campos de origen mediante un carácter de comillas especificado. Esta función se puede combinar con otras. Para ver un ejemplo relacionado, consulte Extract dynamic key-value pairs from a string. | |
Extrae pares clave-valor de un campo de origen mediante un delimitador. | ||
Extracción estándar Syslog | Calcula facility y severity a partir de un valor de prioridad basado en el protocolo Syslog y los asigna al nivel correspondiente. Esta función se puede combinar con otras. Para ver un ejemplo relacionado, consulte Parse standard Syslog format data. | |
Extracción basada en reglas | Extrae cadenas mediante las reglas definidas en anchor_rules. |
e_regex
Extrae valores de un campo basándose en una expresión regular y los asigna a otros campos.
-
Sintaxis
e_regex(key, regex, fields_info, mode="fill-auto", pack_json=None) -
Parámetros
Parámetro
Tipo
Obligatorio
Descripción
key
Cualquiera
Sí
El campo de origen. Si el campo no existe, la función no realiza ninguna acción. Para obtener información sobre cómo configurar nombres de campo especiales, consulte event types.
regex
String
Sí
La expresión regular que se utiliza para extraer valores de campo. Admite tanto grupos de captura como grupos sin captura.
NotaUn grupo sin captura, que requiere el prefijo
?:, se usa a veces para agrupar. Por ejemplo,\w+@\w+\.\w(?:\.\cn)?. Para obtener más información, consulte non-capturing groups.fields_info
String/List/Dict
No
Los campos de destino para los valores coincidentes. Este parámetro es obligatorio si no utiliza grupos de captura con nombre en la expresión regular.
mode
String
No
El modo de sobrescritura para los campos. El valor predeterminado es fill-auto. Para obtener más información sobre los valores y sus significados, consulte field extraction check and overwrite mode.
pack_json
String
No
Empaqueta todos los resultados coincidentes de la expresión regular en el campo especificado por
pack_json. El valor predeterminado esNone, lo que indica que el empaquetado está deshabilitado. -
Respuesta
Devuelve el registro actualizado con los campos extraídos y sus valores.
-
Ejemplos
-
Ejemplo 1: Extraer un solo valor
-
Registro sin procesar
msg: 192.168.0.1 http://... 127.0.0.0 -
Regla de transformación
# Extract the first IP address from the msg field. e_regex("msg",r"\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}","ip") -
Resultado de la transformación
msg: 192.168.0.1 http://... 127.0.0.0 ip: 192.168.0.1
-
-
Ejemplo 2: Extraer varios valores
-
Registro sin procesar
msg: 192.168.0.1 http://... 127.0.0.0 -
Regla de transformación
# Extract two IP addresses from the msg field and assign them to server_ip and client_ip. e_regex("msg",r"\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}",["server_ip","client_ip"]) -
Resultado de la transformación
msg: 192.168.0.1 http://... 127.0.0.0 server_ip: 192.168.0.1 client_ip: 127.0.0.0
-
-
Ejemplo 3: Extraer valores mediante un grupo de captura.
-
Registro sin procesar
content: start sys version: deficience, err: 2 -
Regla de transformación
# Use a regular expression to capture the version and error values from the content field. e_regex("content",r"start sys version: (\w+),\s*err: (\d+)",["version","error"]) -
Resultado de la transformación
content: start sys version: deficience, err: 2 error: 2 version: deficience
-
-
Ejemplo 4: Extraer valores mediante un grupo de captura con nombre
-
Registro sin procesar
content: start sys version: deficience, err: 2 -
Regla de transformación
e_regex("content",r"start sys version: (?P<version>\w+),\s*err: (?P<error>\d+)") -
Resultado de la transformación
content: start sys version: deficience, err: 2 error: 2 version: deficience
-
-
Ejemplo 5: Crear dinámicamente un nombre de campo y un valor a partir del campo dict.
-
Registro sin procesar
dict: verify:123 -
Regla de transformación
e_regex("dict",r"(\w+):(\d+)",{r"k_\1": r"v_\2"}) -
Resultado de la transformación
dict: verify:123 k_verify: v_123
-
-
Ejemplo 6: Extraer y empaquetar un valor en el campo name.
-
Registro sin procesar
msg: 192.168.0.1 http://... 127.0.0.0 -
Regla de transformación
e_regex("msg", r"\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}", "ip", pack_json="name") -
Resultado de la transformación
msg:192.168.0.1 http://... 127.0.0.0 name:{"ip": "192.168.0.1"}
-
-
Ejemplo 7: Crear dinámicamente campos a partir del campo dict y empaquetarlos en el campo name.
-
Registro sin procesar
dict: x:123, y:456, z:789 -
Regla de transformación
e_regex("dict", r"(\w+):(\d+)", {r"k_\1": r"v_\2"}, pack_json="name") -
Resultado de la transformación
dict:x:123, y:456, z:789 name:{"k_x": "v_123", "k_y": "v_456", "k_z": "v_789"}
-
-
Ejemplo 8: Extraer y empaquetar valores de un grupo de captura en el campo name.
-
Registro sin procesar
content: start sys version: deficience, err: 2 -
Regla de transformación
e_regex( "content", r"start sys version: (\w+),\s*err: (\d+)", ["version", "error"],pack_json="name") -
Resultado de la transformación
content:start sys version: deficience, err: 2 name:{"version": "deficience", "error": "2"}
-
-
-
Referencias
Puede combinar esta función con otras. Para ver un ejemplo relacionado, consulte Parse Java error logs.
e_json
Realiza operaciones JSON en un objeto JSON dentro de un campo especificado. Estas operaciones incluyen expandir los datos JSON, extraer datos con una expresión JMESPath, o extraer y luego expandir un subconjunto JSON.
-
Sintaxis
e_json(key, expand=None, depth=100, prefix="__", suffix="__", fmt="simple", sep=".", expand_array=True, fmt_array="{parent}_{index}", include_node=r"[\u4e00-\u9fa5\u0800-\u4e00a-zA-Z][\w\-\.]*", exclude_node="", include_path="", exclude_path="", jmes="", output="", jmes_ignore_none=False, mode='fill-auto' )NotaSi la cadena de destino no es un objeto JSON válido, la función
e_jsondevuelve la cadena original sin analizarla. -
Parámetros
Parámetro
Tipo
Obligatorio
Descripción
key
String
Sí
El nombre del campo de entrada. Si el campo no existe, la función no realiza ninguna acción. Para obtener información sobre cómo configurar nombres de campo especiales, consulte Event types.
expand
Boolean
No
Especifica si se debe expandir el campo.
Si el parámetro jmes no está configurado, el valor predeterminado es True, lo que expande el campo.
Si el parámetro jmes está configurado, el valor predeterminado es False, lo que no expande el campo.
depth
Number
No
La profundidad hasta la cual la función expande el campo. Valores válidos: 1 a 2000. El valor predeterminado es 100. Un valor de 1 expande solo el primer nivel.
prefix
String
No
El prefijo que se agrega a cada nombre de campo expandido.
suffix
String
No
El sufijo que se agrega a cada nombre de campo expandido.
fmt
String
No
El método de formato para los nombres de campo expandidos. Valores válidos:
simple (predeterminado): Usa el nombre del nodo actual como nombre de campo. El formato es
{prefix}{current}{suffix}.full: Combina la ruta completa desde el campo de origen hasta el nodo actual como nombre de campo. El formato es
{parent_list_str}{sep}{prefix}{current}{suffix}. El delimitador se especifica mediante el parámetrosep. El delimitador predeterminado es..parent: Combina el nombre del nodo actual con el nombre de su nodo padre inmediato. El formato es
{parent}{sep}{prefix}{current}{suffix}. El delimitador se especifica mediante el parámetrosep. El delimitador predeterminado es..root: Combina el nombre del nodo actual con el nombre del nodo raíz. El formato es
{parent_list[0]}{sep}{prefix}{current}{suffix}. El delimitador se especifica mediante el parámetrosep. El delimitador predeterminado es..
sep
String
No
El delimitador entre los nombres de nodo padre e hijo. Este parámetro aplica cuando
fmtse establece en full, parent o root. El valor predeterminado es..expand_array
Boolean
No
Especifica si se deben expandir las matrices. El valor predeterminado es
True.fmt_array
String
No
El método de formato para la expansión de matrices. El formato es
{parent_rlist[0]}_{index}. También puede crear una cadena de formato personalizada mediante hasta cinco marcadores de posición:parent_list,current,sep,prefixysuffix.include_node
String/Number
No
La lista de permitidos de nodos especifica los nombres de nodo que se incluyen para el filtrado. De forma predeterminada, solo se expanden automáticamente los nodos cuyos nombres consisten en caracteres chinos, dígitos, letras y
_.-.exclude_node
String
No
Una expresión regular que define una lista de bloqueo de nombres de nodo que se excluyen.
include_path
String
No
Una expresión regular que define una lista de permitidos de rutas de nodo que se incluyen.
exclude_path
String
No
Una expresión regular que define una lista de bloqueo de rutas de nodo que se excluyen.
jmes
String
No
Una expresión JMESPath para extraer datos del objeto JSON.
output
String
No
El nombre del campo de salida para el valor extraído mediante la expresión JMESPath.
jmes_ignore_none
Boolean
No
Especifica el comportamiento cuando la expresión JMESPath no encuentra ningún valor. Si es True (el valor predeterminado), se ignora la extracción. Si es
False, se devuelve una cadena vacía.mode
String
No
El modo de sobrescritura de campos. El valor predeterminado es fill-auto. Para obtener más información, consulte Field extraction check and overwrite modes.
-
Filtrado de expansión JSON
Si se establece una lista de permitidos de nodos, solo los nodos en dicha lista se incluyen en el resultado. Ejemplo de expresión regular para una lista de permitidos de nodos:
e_json("json_data_filed", ...., include_node=r'key\d+').Si se establece una lista de bloqueo de nodos, los nodos en dicha lista se excluyen del resultado. Ejemplo de expresión regular para una lista de bloqueo de nodos:
e_json("json_data_filed", ...., exclude_node=r'key\d+').Para la expansión de rutas de nodo, las expresiones regulares
include_pathyexclude_pathse comparan con el inicio de la ruta. Las rutas de nodo usan.como delimitador.
-
Filtrado JMESPath
Use JMESPath para seleccionar y calcular datos.
Seleccione una lista de atributos de elementos desde una ruta JSON específica:
e_json(..., jmes="cve.vendors[*].product",output="product")Concatene atributos de elementos desde una ruta JSON específica con una coma (,):
e_json(..., jmes="join(',', cve.vendors[*].name)",output="vendors")Calcule el valor máximo de atributo para los elementos en una ruta JSON específica:
e_json(..., jmes="max(words[*].score)",output="hot_word")Devuelva una cadena vacía si una ruta específica no existe o está vacía:
e_json(..., jmes="max(words[*].score)",output="hot_word", jmes_ignore_none=False)
-
parent_list y parent_rlist
Los siguientes ejemplos demuestran su uso.
Registro sin procesar:
data: { "k1": 100,"k2": {"k3": 200,"k4": {"k5": 300}}}-
parent_listorganiza los nodos padres de izquierda a derecha.e_json("data", fmt='{parent_list[0]}-{parent_list[1]}#{current}')Resultado de la transformación:
data:{ "k1": 100,"k2": {"k3": 200,"k4": {"k5": 300}}} data-k2#k3:200 data-k2#k5:300 -
parent_rlistorganiza los nodos padres de derecha a izquierda.e_json("data", fmt='{parent_rlist[0]}-{parent_rlist[1]}#{current}')Resultado de la transformación:
data:{ "k1": 100,"k2": {"k3": 200,"k4": {"k5": 300}}} k2-data#k3:200 k4-k2#k5:300
-
-
Respuesta
Devuelve el registro con los campos recién agregados.
-
Ejemplos
-
Ejemplo 1: Expandir un campo.
-
Registro sin procesar
data: {"k1": 100, "k2": 200} -
Regla de transformación
e_json("data",depth=1) -
Resultado de la transformación
data: {"k1": 100, "k2": 200} k1: 100 k2: 200
-
-
Ejemplo 2: Agregar un prefijo y un sufijo a los nombres de campo.
-
Registro sin procesar
data: {"k1": 100, "k2": 200} -
Regla de transformación
e_json("data", prefix="data_", suffix="_end") -
Resultado de la transformación
data: {"k1": 100, "k2": 200} data_k1_end: 100 data_k2_end: 200
-
-
Ejemplo 3: Expandir un campo usando diferentes formatos.
-
Registro sin procesar
data: {"k1": 100, "k2": {"k3": 200, "k4": {"k5": 300} } } -
fmt=full
e_json("data", fmt='full')data: {"k1": 100, "k2": {"k3": 200, "k4": {"k5": 300} } } data.k1: 100 data.k2.k3: 200 data.k2.k4.k5: 300 -
fmt=parent
e_json("data", fmt='parent')data: {"k1": 100, "k2": {"k3": 200, "k4": {"k5": 300} } } data.k1: 100 k2.k3: 200 k4.k5: 300 -
fmt=root
e_json("data", fmt='root')data: {"k1": 100, "k2": {"k3": 200, "k4": {"k5": 300} } } data.k1: 100 data.k3: 200 data.k5: 300
-
-
Ejemplo 4: Extraer datos JSON con un delimitador, prefijo y sufijo especificados.
-
Registro sin procesar
data: {"k1": 100, "k2": {"k3": 200, "k4": {"k5": 300} } } -
Regla de transformación
e_json("data", fmt='parent', sep="@", prefix="__", suffix="__") -
Resultado de la transformación
data: {"k1": 100, "k2": {"k3": 200, "k4": {"k5": 300} } } data@__k1__:100 k2@__k3__:200 k4@__k5__:300
-
-
Ejemplo 5: Usar el parámetro fmt_array para extraer datos JSON como una matriz.
-
Registro sin procesar
people: [{"name": "xm", "sex": "boy"}, {"name": "xz", "sex": "boy"}, {"name": "xt", "sex": "girl"}] -
Regla de transformación
e_json("people", fmt='parent', fmt_array="{parent_rlist[0]}-{index}") -
Resultado de la transformación
people: [{"name": "xm", "sex": "boy"}, {"name": "xz", "sex": "boy"}, {"name": "xt", "sex": "girl"}] people-0.name: xm people-0.sex: boy people-1.name: xz people-1.sex: boy people-2.name: xt people-2.sex: girl
-
-
Ejemplo 6: Usar una expresión JMESPath para extraer un objeto JSON.
-
Registro sin procesar
data: { "people": [{"first": "James", "last": "d"},{"first": "Jacob", "last": "e"}],"foo": {"bar": "baz"}} -
Regla de transformación
e_json("data", jmes='foo', output='jmes_output0') e_json("data", jmes='foo.bar', output='jmes_output1') e_json("data", jmes='people[0].last', output='jmes_output2') e_json("data", jmes='people[*].first', output='jmes_output3') -
Resultado de la transformación
data: { "people": [{"first": "James", "last": "d"},{"first": "Jacob", "last": "e"}],"foo": {"bar": "baz"}} jmes_output0: {"bar": "baz"} jmes_output1: baz jmes_output2: d jmes_output3: ["James", "Jacob"]
-
-
-
Lecturas adicionales
Para ver un ejemplo de cómo combinar esta función con otras, consulte Complex JSON data transformation.
e_csv, e_psv y e_tsv
Estas funciones extraen varios campos de un campo específico mediante un delimitador personalizado y nombres de campo predefinidos.
e_csv: el delimitador predeterminado es la coma (,).
e_psv: el delimitador predeterminado es la barra vertical (|).
e_tsv: el delimitador predeterminado es el carácter de tabulación (
\t).
-
Sintaxis
e_csv(input field name, output field list, sep=",", quote='"', restrict=True, mode="fill-auto") e_psv(input field name, output field list, sep="|", quote='"', restrict=True, mode="fill-auto") e_tsv(input field name, output field list, sep="\t", quote='"', restrict=True, mode="fill-auto") -
Parámetros
Parámetro
Tipo
Obligatorio
Descripción
input field name
Cualquiera
Sí
Nombre del campo de entrada. Si el campo especificado no existe, la función no realiza ninguna acción. Para obtener información sobre cómo especificar nombres de campo especiales, consulte Event types.
output field list
Cualquiera
Sí
Nombres de los campos de salida que almacenan los valores analizados.
Puede proporcionar los nombres como una lista de cadenas, por ejemplo,
["error", "message", "result"].Si los nombres de campo no contienen comas, también puede proporcionar una sola cadena con los nombres separados por comas, por ejemplo,
"error, message, result".Para obtener información sobre cómo especificar nombres de campo especiales, consulte Event types.
sep
String
No
Delimitador. Debe ser un solo carácter.
quote
String
No
Carácter utilizado para encerrar valores. Utilícelo cuando un valor contiene el delimitador.
restrict
Boolean
No
Especifica si se utiliza el modo restringido. El valor predeterminado es True, que habilita el modo restringido. Este parámetro determina el comportamiento cuando el número de valores analizados no coincide con el número de campos de salida:
En modo restringido (True), la función no realiza ninguna acción.
En modo no restringido (False), la función asigna valores a los campos coincidentes.
mode
String
No
Modo de sobrescritura de campos. El valor predeterminado es fill-auto. Para obtener más información sobre los valores y sus significados, consulte Field extraction check and overwrite modes.
-
Respuesta
Devuelve el registro con los nuevos campos agregados.
-
Ejemplos
El siguiente ejemplo utiliza
e_csv. Las funcionese_psvye_tsvfuncionan de manera similar.-
Registro sin procesar
content: 192.168.0.100,10/Jun/2019:11:32:16 +0800,example.aliyundoc.com,GET /zf/11874.html HTTP/1.1,200,0.077,6404,192.168.0.100:8001,200,0.060,https://image.developer.aliyundoc.com/s?q=how-to-make-noodles&from=wy878378&uc_param_str=dnntnwvepffrgibijbprsvdsei,-,Mozilla/5.0 (Linux; Android 9; HWI-AL00 Build/HUAWEIHWI-AL00) AppleWebKit/537.36,-,- -
Regla de transformación
e_csv("content", "remote_addr, time_local,host,request,status,request_time,body_bytes_sent,upstream_addr,upstream_status, upstream_response_time,http_referer,http_x_forwarded_for,http_user_agent,session_id,guid") -
Resultado
content: 192.168.0.100,10/Jun/2019:11:32:16 +0800,example.aliyundoc.com,GET /zf/11874.html HTTP/1.1,200,0.077,6404,192.168.0.100:8001,200,0.060,https://image.developer.aliyundoc.com/s?q=how-to-make-noodles&from=wy878378&uc_param_str=dnntnwvepffrgibijbprsvdsei,-,Mozilla/5.0 (Linux; Android 9; HWI-AL00 Build/HUAWEIHWI-AL00) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Mobile Safari/537.36,-,- body_bytes_sent: 6404 guid: - host: example.aliyundoc.com http_referer: https://image.developer.aliyundoc.com/s?q=how-to-make-noodles&from=wy878378&uc_param_str=dnntnwvepffrgibijbprsvdsei http_user_agent: Mozilla/5.0 (Linux; Android 9; HWI-AL00 Build/HUAWEIHWI-AL00) AppleWebKit/537.36 http_x_forwarded_for: - remote_addr: 192.168.0.100 request: GET /zf/11874.html HTTP/1.1 request_time: 0.077 session_id: - status: 200 time_local: 10/Jun/2019:11:32:16 +0800 topic: syslog-forwarder upstream_addr: 192.168.0.100:8001 upstream_response_time: 0.060 upstream_status: 200
-
-
Más información
Estas funciones pueden combinarse con otras. Para ver un ejemplo relacionado, consulte Parse CSV-formatted logs.
e_kv
Extrae pares clave-valor de uno o más campos de entrada.
-
Sintaxis
e_kv(field_or_list, sep="=", quote='"', escape=False, prefix="", suffix="", mode="fill-auto") -
Parámetros
Parámetro
Tipo
Obligatorio
Descripción
field_or_list
String o lista de strings
Sí
Nombre de uno o más campos de entrada. Para obtener información sobre cómo especificar nombres de campo especiales, consulte Event types.
sep
String
No
Separador de clave-valor, que puede ser una expresión regular. El valor predeterminado es
=.NotaPuede utilizar grupos de no captura, pero no grupos de captura. Para obtener más información, consulte Grouping.
quote
String
No
Carácter utilizado para encerrar valores. El valor predeterminado es
".NotaEl valor de un par clave-valor dinámico extraído suele estar encerrado entre comillas; por ejemplo,
a="abc"yb="xyz". Si un valor no está encerrado entre comillas, el sistema extrae únicamente un valor compuesto por los siguientes caracteres:Chinese characters, letters, numbers, and the symbols _-.%~. Por ejemplo, dea=ab12_-.%~|abc b=123, el sistema extraea: ab12_-.%~yb: 123.escape
Boolean
No
Controla si se interpretan los caracteres de escape en los valores. El valor predeterminado es
False. Por ejemplo, dada la entradakey="abc\"xyz", de forma predeterminada la función extrae el valorabc\para el campokey. Si estableceescape=True, el valor extraído seráabc"xyz.prefix
String
No
Prefijo que se agrega a los nombres de los campos extraídos.
suffix
String
No
Sufijo que se agrega a los nombres de los campos extraídos.
mode
String
No
Modo de sobrescritura de campos. El valor predeterminado es fill-auto. Para obtener más información sobre los modos disponibles, consulte Field extraction check and overwrite modes.
-
Respuesta
Agrega los pares clave-valor extraídos al registro como nuevos campos.
-
Ejemplos
-
Ejemplo 1: extracción de pares clave-valor con el delimitador predeterminado =.
-
Registro sin procesar
http_refer: https://video.developer.aliyundoc.com/s?q=asd&a=1&b=2NotaSi el registro sin procesar es
request_uri: a1=1&a2=&a3=3y el valor de a2 está vacío, la función e_kv() no puede extraer a2. Puede utilizar la función e_regex() para extraerlo; por ejemplo, e_regex("request_uri",r'(\w+)=([^=&]*)',{r"\1":r"\2"},mode="overwrite"). -
Regla de transformación
e_kv("http_refer") -
Resultado
http_refer: https://video.developer.aliyundoc.com/s?q=asd&a=1&b=2 q: asd a: 1 b: 2
-
-
Ejemplo 2: adición de un prefijo y un sufijo a los nombres de campo.
-
Registro sin procesar
http_refer: https://video.developer.aliyundoc.com/s?q=asd&a=1&b=2 -
Regla de transformación
e_kv( "http_refer", sep="=", quote='"', escape=False, prefix="data_", suffix="_end", mode="fill-auto", ) -
Resultado
http_refer: https://video.developer.aliyundoc.com/s?q=asd&a=1&b=2 data_q_end: asd data_a_end: 1 data_b_end: 2
-
-
Ejemplo 3: extracción de pares clave-valor del campo
content2e interpretación de caracteres de escape mediante el parámetroescape.-
Registro sin procesar
content2: k1:"v1\"abc", k2:"v2", k3: "v3" -
Regla de transformación
e_kv("content2", sep=":", escape=True) -
Resultado
content2: k1:"v1\"abc", k2:"v2", k3: "v3" k1: v1"abc k2: v2 k3: v3
-
-
-
Lecturas adicionales
Para ver un ejemplo de cómo combinar esta función con otras, consulte Extract dynamic key-value pairs from a string.
e_kv_delimit
Extrae pares clave-valor de un campo de entrada mediante delimitadores.
-
Sintaxis
e_kv_delimit(field_or_list, pair_sep=r"\s", kv_sep="=", prefix="", suffix="", mode="fill-auto") -
Parámetros
Parámetro
Tipo
Obligatorio
Descripción
field_or_list
string o lista de strings
Sí
Nombre de uno o más campos de entrada. Para obtener información sobre cómo especificar nombres de campo especiales, consulte event type.
pair_sep
string
No
Expresión regular que separa los pares clave-valor. El valor predeterminado es
\s. Otros ejemplos incluyen\s\wyabc\s.NotaPara usar una cadena literal como separador, se recomienda reemplazarla primero por un delimitador de un solo carácter mediante la función str_replace o regex_replace. Después puede utilizar esta función para analizar el campo.
kv_sep
string
No
Expresión regular que separa una clave de su valor. El valor predeterminado es
=. La expresión no se limita a un solo carácter.NotaPuede utilizar grupos de no captura, pero no grupos de captura. Para obtener más información, consulte Grouping.
prefix
string
No
Prefijo que se agrega a los nombres de los campos extraídos.
suffix
string
No
Sufijo que se agrega a los nombres de los campos extraídos.
mode
string
No
Modo de sobrescritura de campos. El valor predeterminado es fill-auto. Para obtener detalles sobre los valores, consulte Field extraction check and overwrite modes.
-
Respuesta
Devuelve el registro con los pares clave-valor extraídos agregados como nuevos campos.
-
Ejemplos
-
Ejemplo 1: extracción de pares clave-valor con el delimitador predeterminado
=.-
Registro sin procesar
data: i=c1 k1=v1 k2=v2 k3=v3NotaSi el registro sin procesar es
request_uri: a1=1&a2=&a3=3, la función e_kv_delimit() no puede extraera2porque su valor está vacío. Para extraer pares con valores vacíos, utilice la función e_regex(). Por ejemplo: e_regex("request_uri",r'(\w+)=([^=&]*)',{r"\1":r"\2"}, mode="overwrite"). -
Regla de transformación
e_kv_delimit("data") -
Resultado
data: i=c1 k1=v1 k2=v2 k3=v3 i: c1 k2: v2 k1: v1 k3: v3
-
-
Ejemplo 2: extracción de pares clave-valor mediante el delimitador
&?.-
Registro sin procesar
data: k1=v1&k2=v2?k3=v3 -
Regla de transformación
e_kv_delimit("data",pair_sep=r"&?") -
Resultado
data: k1=v1&k2=v2?k3=v3 k2: v2 k1: v1 k3: v3
-
-
Ejemplo 3: extracción de pares clave-valor mediante una expresión regular como separador de clave-valor.
-
Registro sin procesar
data: k1=v1 k2:v2 k3=v3 -
Regla de transformación
e_kv_delimit("data", kv_sep=r"(?:=|:)") -
Resultado
data: k1=v1 k2:v2 k3=v3 k2: v2 k1: v1 k3: v3
-
-
e_syslogrfc
Calcula la instalación y la severidad a partir de un valor de prioridad según el protocolo syslog y agrega las etiquetas correspondientes.
-
Sintaxis
e_syslogrfc(key, rfc, fields_info=None, mode='overwrite') -
Parámetros
Parámetro
Tipo
Obligatorio
Descripción
key
Cualquiera
Sí
Nombre del campo que contiene el valor de
priority.rfc
String
Sí
Protocolo syslog que se utilizará. Valores válidos: SYSLOGRFC3164 y SYSLOGRFC5424.
fields_info
Dict
No
Diccionario que asigna nombres de campos de salida predeterminados (claves) a nombres personalizados (valores). Se pueden cambiar los nombres de los siguientes campos:
{"_severity_":"sev","_facility_":"fac","_severitylabel_":"sevlabel","_facilitylabel_":"faclabel"}mode
String
No
Modo de sobrescritura para los campos de salida. El valor predeterminado es overwrite. Para obtener más información, consulte Field extraction check and overwrite modes.
-
Respuesta
Devuelve el registro con los nuevos campos de instalación, severidad y etiqueta.
-
Ejemplos
-
Ejemplo 1: extracción de información de instalación, severidad y etiqueta mediante el protocolo SYSLOGRFC5424.
-
registro sin procesar
receive_time: 1558663265 _priority_: 13 _version_: 1 _log_time_: 2019-05-06 11:50:16.015554+08:00 _hostname_: iZbp1a65********i2qZ _program_: root _procid_: - _msgid_: - _extradata_: - _content_: twish -
regla de transformación
e_syslogrfc("_priority_","SYSLOGRFC5424") -
Resultado
receive_time: 1558663265 _priority_: 13 _version_: 1 _log_time_: 2019-05-06 11:50:16.015554+08:00 _hostname_: iZbp1a65********i2qZ _program_: root _procid_: - _msgid_: - _extradata_: - _content_: twish _facility_: 1 _severity_: 5 _severitylabel_: Notice: normal but significant condition _facilitylabel_: user-level messages
-
-
Ejemplo 2: extracción de información de instalación, severidad y etiqueta mediante el protocolo SYSLOGRFC5424 y cambio de nombre de los campos de salida.
-
registro sin procesar
receive_time: 1558663265 _priority_: 13 _version_: 1 _log_time_: 2019-05-06 11:50:16.015554+08:00 _hostname_: iZbp1a65********i2qZ _program_: root _procid_: - _msgid_: - _extradata_: - _content_: twish -
regla de transformación
e_syslogrfc( "_priority_", "SYSLOGRFC5424", { "_facility_": "fac", "_severity_": "sev", "_facilitylabel_": "_facility_label_", "_severitylabel_": "_severity_label_", }, ) -
Resultado
receive_time: 1558663265 _priority_: 13 _version_: 1 _log_time_: 2019-05-06 11:50:16.015554+08:00 _hostname_: iZbp1a65********i2qZ _program_: root _procid_: - _msgid_: - _extradata_: - _content_: twish fac: 1 sev: 5 _severity_label_: Notice: normal but significant condition _facility_label_: user-level messages
-
-
-
Referencias
Esta función puede combinarse con otras. Para ver un ejemplo relacionado, consulte Parse standard Syslog format data.
e_anchor
Extrae cadenas de un campo de entrada mediante las reglas que usted define en el parámetro anchor_rules.
-
Sintaxis
e_anchor(key,anchor_rules,fields,restrict=False,mode="overwrite") -
Parámetros
Parámetro
Tipo
Obligatorio
Descripción
key
Any
Sí
Nombre del campo de entrada.
anchor_rules
String
Sí
Define el patrón para extraer cadenas, donde un asterisco () representa el contenido que se extraerá. Por ejemplo:
User =; Severity = *;.Los registros que se muestran en la consola tienen formato Key : Value con un espacio predeterminado entre los dos puntos y el valor. Cuando especifique anchor_rules, no incluya este espacio. En la entrada de registro de ejemplo, el campo
contentes el campo destino que se va a extraer._source_: bin-hangzhou-oss _tag_:_object_: test001/test001-or20190906155735.perf _tag_:_receive_time_: 1582768681 _topic_: content: "Download": 4001792NotaNo se puede usar un asterisco (*) como prefijo ni sufijo en el valor del campo de entrada.
fields
Any
Sí
Nombres de los campos de salida para los valores extraídos. Puede especificar los nombres como una lista de cadenas, por ejemplo,
["user", "job", "result"]. Si los nombres de los campos no contienen comas (,), también puede especificarlos como una sola cadena con los nombres separados por comas, por ejemplo,"user, job, result". Para obtener más información sobre cómo especificar nombres de campos especiales, que pueden contener caracteres especiales pero no asteriscos (*), consulte event type.Puede omitir un nombre de campo mediante un asterisco (). Por ejemplo, si especifica
"user,,result", solo se crean los camposuseryresult. Para obtener más información, consulte el Ejemplo 10.restrict
Boolean
No
Especifica si se usa el modo restringido. El valor predeterminado es
False(modo no restringido). Este parámetro determina el comportamiento cuando el número de valores extraídos no coincide con el número de campos de salida:En modo restringido (
True), la función no realiza ninguna acción.En modo no restringido (
False), la función asigna valores a los campos correspondientes en secuencia.
mode
String
No
El valor predeterminado es
overwrite. Consulte field extraction check and overwrite mode para obtener más información. -
Respuesta
Devuelve el registro original con los campos extraídos y sus valores anexados.
-
Ejemplos
-
Ejemplo 1: Extracción de varios valores
-
Registro sin procesar
content : "Aug 2 04:06:08: host=192.168.0.10: local/ssl2 notice mcpd[3772]: User=jsmith@example.com: severity=warning: 01070638:5: Pool member 172.31.51.22:0 monitor status down." -
Regla de transformación
e_anchor("content","User=*: severity=*:",["user_field","severity_field"]) -
Resultado
content : "Aug 2 04:06:08: host=192.168.0.10: local/ssl2 notice mcpd[3772]: User=jsmith@example.com: severity=warning: 01070638:5: Pool member 172.31.51.22:0 monitor status down." user_field : jsmith@example.com severity_field : warning
-
-
Ejemplo 2: Extracción de varios valores de matriz JSON
-
Registro sin procesar
content : '"information":{"name_list":["Twiss","Evan","Wind","like"],"university":["UCL","Stanford University","CMU"]},"other":"graduate"' -
Regla de transformación
e_anchor("content",'name_list":*,"university":*},', ["name_list","universities"]) -
Resultado
content : '"information":{"name_list":["Twiss","Evan","Wind","like"],"university":["UCL","Stanford University","CMU"]},"other":"graduate"' name_list : ["Twiss","Evan","Wind","like"] universities : ["UCL","Stanford University","CMU"]
-
-
Ejemplo 3: Extracción de un registro que contiene caracteres especiales
-
Registro sin procesar
content : (+2019) June 24 "I am iron man" -
Regla de transformación
e_anchor("content", "(+*) * \"*\"",["Year","Date","Msg"]) -
Resultado
content : (+2019) June 24 "I am iron man" Year : 2019 Date : June 24 Msg : I am iron man
-
-
Ejemplo 4: Extracción de un registro que contiene un carácter de control invisible (
\x09)-
Registro sin procesar
content : \x09\x09\x09Chrome/55.0 Safari/537.36 -
Regla de transformación
e_anchor("content", "\x09\x09\x09*/55.0 */537.36",["Google", "Apple"]) -
Resultado
content : \x09\x09\x09Chrome/55.0 Safari/537.36 Google : Chrome Apple : Safari
-
-
Ejemplo 5: Extracción del campo content, que contiene un valor con caracteres especiales. El valor del campo es
To...Subject, que aparece después deMESSAGE:.-
Registro sin procesar
content : 12:08:10,651 INFO sample_server ReportEmailer:178 - DEBUG SENDING MESSAGE: To: example@aliyun.com Subject: New line Breaks in Message -
Regla de transformación
e_anchor("content","* INFO *: \n To: *\n Subject: *",["time","message","email","subject"]) -
Resultado
content : 12:08:10,651 INFO sample_server ReportEmailer:178 - DEBUG SENDING MESSAGE: To: example@aliyun.com Subject: New line Breaks in Message time : 12:08:10,651 message : sample_server ReportEmailer:178 - DEBUG SENDING MESSAGE email : example@aliyun.com subject : New line Breaks in Message
-
-
Ejemplo 6: Extracción del campo content, que contiene un valor con el carácter especial invisible
\t.-
Registro sin procesar
content : I'm tabbed in -
Regla de transformación
e_anchor("content","\tI'm * in","word") # You can also copy the exact value from the content field to create the pattern. # Do not copy the default space after the colon in the field name. e_anchor("content"," I'm * in","word") -
Resultado
content : I'm tabbed in word : tabbed
-
-
Ejemplo 7: Extracción del campo content que contiene un valor con carácter especial, el cual se muestra como
\t.-
Registro sin procesar
content : \tI'm tabbed in -
Regla de transformación
e_anchor("content","\tI'm * in","word") # You can also use the following rule: e_anchor("content"," I'm * in","word") -
Resultado
content : \tI'm tabbed in word : tabbed
-
-
Ejemplo 8: Extracción de un registro en modo restringido
-
Registro sin procesar
content : I used to love having snowball fight with my friends and building snowmen on the streets around our neighborhood -
Regla de transformación
e_anchor("content","I * to * having",["v_word", "n_word","asd"],restrict=True) -
Resultado
content : I used to love having snowball fight with my friends and building snowmen on the streets around our neighborhood
-
-
Ejemplo 9: Extracción de un registro en modo no restringido
-
Registro sin procesar
content : I used to love having snowball fight with my friends and building snowmen on the streets around our neighborhood -
Regla de transformación
e_anchor("content","love * fight with my * and",["test1","test2","test13"],restrict=False) -
Resultado
content : I used to love having snowball fight with my friends and building snowmen on the streets around our neighborhood test1 : having snowball test2 : friends
-
-
Ejemplo 10: Extracción de un valor y omisión de otro
-
Registro sin procesar
content: Could you compare the severity of natural disasters to man-made disasters -
Regla de transformación
e_anchor('content', 'compare the * of natural disasters to man-made *', 'n-word,*') -
Resultado
content : Could you compare the severity of natural disasters to man-made disasters n-word : severity
-
-