Enriqueça os códigos de status de resposta HTTP em logs do Nginx com a função e_table_map. Cada código de status é mapeado para seu alias, categoria e descrição, o que simplifica a análise de logs e a solução de problemas.
Pré-requisitos
Dados de log do Nginx coletados. Para mais informações, consulte Coleta de dados.
Cenário
Uma empresa mantém uma tabela de mapeamento de códigos de status HTTP atualizada periodicamente para uma aplicação. Nos logs brutos do Nginx, apenas o campo http_code indica o status da requisição, mas isso não fornece contexto suficiente para solucionar problemas.
Para resolver essa questão, use a função e_table_map para enriquecer os campos de log com base na tabela de mapeamento de códigos de status HTTP e tornar o status da requisição HTTP mais legível.
-
Exemplo de log bruto:
body_bytes_sent:1750 host:www.example.com http_referer:www.example.aliyundoc.com http_user_agent:Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_6; it-it) AppleWebKit/533.20.25 (KHTML, like Gecko) Version/5.0.4 Safari/533.20.27 http_x_forwarded_for:203.0.XXX.XX remote_addr:203.0.XXX.XX remote_user:p288 request_length:13741 request_method:GET request_time:71 request_uri:/request/path-1/file-1 http_code:200 time_local:11/Aug/2021:06:52:27 upstream_response_time:0.66O log bruto está armazenado em um Logstore chamado nginx-demo. O campo http_code indica o código de status HTTP.
-
Tabela de mapeamento de códigos de status HTTP:
A tabela a seguir mostra um exemplo de mapeamento de códigos de status HTTP:
code
alias
category
desc
100
1xx
Informational
Continue
200
2xx
Success
OK
300
3xx
Redirection
Multiple Choices
400
4xx
Client Error
Bad Request
-
Exemplo de log enriquecido:
body_bytes_sent:1750 host:www.example.com http_code:200 http_code_alias:2xx http_code_category:Success http_code_desc:OK http_referer:www.example.aliyundoc.com http_user_agent:Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_6; it-it) AppleWebKit/533.20.25 (KHTML, like Gecko) Version/5.0.4 Safari/533.20.27 http_x_forwarded_for:203.0.XXX.XX remote_addr:203.0.XXX.XX remote_user:p288 request_length:13741 request_method:GET request_time:71 request_uri:/request/path-1/file-1 time_local:11/Aug/2021:06:52:27 upstream_response_time:0.66
Soluções
Processing flow
Converta os códigos de status HTTP em um objeto de tabela.
Use a função e_table_map para enriquecer os dados de log.
Soluções recomendadas
Selecione uma das soluções abaixo para enriquecimento de dados conforme sua fonte de dados e requisitos de atualização:
|
Solução |
Suporte a volume de dados |
Atualizações incrementais |
Atualizações em lote |
Mais indicado para |
|
Grande |
Suportado |
Suportado |
Tabelas de mapeamento grandes com atualizações frequentes. |
|
|
Grande |
Não suportado |
Suportado |
Tabelas de mapeamento atualizadas frequentemente. |
|
|
Grande |
Não suportado |
Suportado |
Tabelas de mapeamento relativamente estáticas e com atualizações pouco frequentes. |
|
|
Pequeno |
Não suportado |
Não suportado |
Tabelas de mapeamento de códigos de status HTTP padrão com pequenos volumes de dados. |
Solução 1: Enriquecer dados usando um Logstore (recomendado)
-
Grave os dados de mapeamento de códigos de status HTTP em um Logstore chamado http_code com um SDK.
O exemplo a seguir mostra um log de código de status HTTP no Logstore:
__source__:203.0.XXX.XX __tag__:__receive_time__:1595424194 __topic__: code:200 alias:2xx description:OK category:SuccessPara mais informações, consulte Referência do SDK.
-
Obtenha o nome do Logstore, o endpoint e o par de AccessKey do Logstore que armazena os dados de mapeamento de códigos de status HTTP.
Para mais informações sobre o endpoint e o par de AccessKey, consulte Endpoints e Par de AccessKey.
-
Abra o Logstore nginx-demo que armazena os logs brutos e acesse a página de transformação de dados.
Para mais informações, consulte Criar uma tarefa de transformação de dados.
-
No editor, insira a instrução de transformação de dados.
Leia os dados do Logstore http_code e use a função e_table_map para retornar os valores dos campos correspondentes:
e_table_map( res_log_logstore_pull("cn-hangzhou-intranet.log.aliyuncs.com", res_local("AK_ID"),res_local("AK_KEY"),"live-demo","http_code", ["code","alias","description","category"]), [("http_code","code")], [("alias","http_code_alias"), ("description","http_code_desc"), ("category","http_code_category")])ImportantePara garantir a segurança dos dados, configure o par de AccessKey nas configurações avançadas de parâmetros. Para mais informações, consulte Criar uma tarefa de transformação de dados.
A função res_log_logstore_pull extrai dados de outro Logstore. Para mais informações, consulte res_log_logstore_pull.
A função e_table_map localiza a linha correspondente na tabela com base no valor do campo de entrada e retorna os valores dos campos especificados. Para mais informações, consulte e_table_map.
-
Clique em Preview Data.
Após o enriquecimento, o log do Nginx inclui os seguintes campos de código de status HTTP:
body_bytes_sent:1750 host:www.example.com http_code:200 http_code_alias:2xx http_code_category:Success http_code_desc:OK http_referer:www.example.aliyundoc.com http_user_agent:Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_6; it-it) AppleWebKit/533.20.25 (KHTML, like Gecko) Version/5.0.4 Safari/533.20.27 http_x_forwarded_for:203.0.XXX.XX remote_addr:203.0.XXX.XX remote_user:p288 request_length:13741 request_method:GET request_time:71 request_uri:/request/path-1/file-1 time_local:11/Aug/2021:06:52:27 upstream_response_time:0.66 -
Crie uma tarefa de transformação de dados.
Para mais informações, consulte Criar uma tarefa de transformação de dados.
Solução 2: Enriquecer dados usando uma tabela MySQL
-
Armazene os códigos de status HTTP em um banco de dados ApsaraDB RDS for MySQL.
O exemplo a seguir mostra a tabela de mapeamento de códigos de status HTTP no RDS for MySQL.
MySQL [etl-test]> select * from http_code limit 10; +------+-------+---------------+-----------------------------------+ | code | alias | category | description | +------+-------+---------------+-----------------------------------+ | 100 | 1xx | Informational | Continue | | 101 | 1xx | Informational | Switching Protocols | | 102 | 1xx | Informational | Processing (WebDAV) | | 200 | 2xx | Success | OK | | 201 | 2xx | Success | Created | | 202 | 2xx | Success | Accepted | | 203 | 2xx | Success | Non-Authoritative Information | | 204 | 2xx | Success | No Content | | 205 | 2xx | Success | Reset Content | | 206 | 2xx | Success | Partial Content | +------+-------+---------------+-----------------------------------+ 10 rows in set (0.04 sec) Obtenha o endereço do host, o nome de usuário, a senha, o nome do banco de dados e o nome da tabela do banco de dados ApsaraDB RDS for MySQL.
-
Abra o Logstore nginx-demo que armazena os logs brutos e acesse a página de transformação de dados.
Para mais informações, consulte Criar uma tarefa de transformação de dados.
-
No editor, insira a instrução de transformação de dados.
Leia os dados do banco de dados MySQL e use a função e_table_map para retornar os valores dos campos correspondentes:
e_table_map(res_rds_mysql(address="MySQL host address", username="username", password="password", database="database",table="table name", refresh_interval=300), [("http_code","code")], [("alias","http_code_alias"), ("description","http_code_desc"), ("category","http_code_category")])ImportantePara garantir a segurança dos dados, configure o par de AccessKey nas configurações avançadas de parâmetros. Para mais informações, consulte Criar uma tarefa de transformação de dados.
A função res_rds_mysql extrai o conteúdo da tabela de um banco de dados ApsaraDB RDS for MySQL. Para mais informações, consulte res_rds_mysql.
A função e_table_map localiza a linha correspondente na tabela com base no valor do campo de entrada e retorna os valores dos campos especificados. Para mais informações, consulte e_table_map.
-
Clique em Preview Data.
Após o enriquecimento, o log do Nginx inclui os seguintes campos de código de status HTTP:
body_bytes_sent:1750 host:www.example.com http_code:200 http_code_alias:2xx http_code_category:Success http_code_desc:OK http_referer:www.example.aliyundoc.com http_user_agent:Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_6; it-it) AppleWebKit/533.20.25 (KHTML, like Gecko) Version/5.0.4 Safari/533.20.27 http_x_forwarded_for:203.0.XXX.XX remote_addr:203.0.XXX.XX remote_user:p288 request_length:13741 request_method:GET request_time:71 request_uri:/request/path-1/file-1 time_local:11/Aug/2021:06:52:27 upstream_response_time:0.66 -
Crie uma tarefa de transformação de dados.
Para mais informações, consulte Criar uma tarefa de transformação de dados.
Solução 3: Enriquecer dados usando um arquivo OSS
-
Salve os códigos de status HTTP em um arquivo chamado http_code.csv e faça upload do arquivo para um bucket do Object Storage Service (OSS).
Para mais informações, consulte Fazer upload de arquivos.
-
Obtenha o nome do bucket, o endpoint e o par de AccessKey do bucket OSS onde o arquivo http_code.csv está armazenado.
Para mais informações sobre endpoints do OSS, consulte Regiões e endpoints.
-
Abra o Logstore nginx-demo que armazena os logs brutos e acesse a página de transformação de dados.
Para mais informações, consulte Criar uma tarefa de transformação de dados.
-
No editor, insira a instrução de transformação de dados.
Leia os dados do bucket OSS e use a função e_table_map para retornar os valores dos campos correspondentes:
e_table_map( tab_parse_csv( res_oss_file(endpoint="oss-cn-shanghai-internal.aliyuncs.com", ak_id=res_local("AK_ID"), ak_key=res_local("AK_KEY"), bucket="ali-sls-etl-test", file="http_code.csv", format='text')), [("http_code","code")], [("alias","http_code_alias"), ("description","http_code_desc"), ("category","http_code_category")])ImportantePara garantir a segurança dos dados, configure o par de AccessKey nas configurações avançadas de parâmetros. Para mais informações, consulte Criar uma tarefa de transformação de dados.
A função res_oss_file recupera o conteúdo de arquivos de um bucket OSS e suporta atualização periódica. Para mais informações, consulte res_oss_file.
A função tab_parse_csv cria uma tabela a partir de texto no formato CSV. Para mais informações, consulte tab_parse_csv.
A função e_table_map localiza a linha correspondente na tabela com base no valor do campo de entrada e retorna os valores dos campos especificados. Para mais informações, consulte e_table_map.
-
Clique em Preview Data.
Após o enriquecimento, o log do Nginx inclui os seguintes campos de código de status HTTP:
body_bytes_sent:1750 host:www.example.com http_code:200 http_code_alias:2xx http_code_category:Success http_code_desc:OK http_referer:www.example.aliyundoc.com http_user_agent:Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_6; it-it) AppleWebKit/533.20.25 (KHTML, like Gecko) Version/5.0.4 Safari/533.20.27 http_x_forwarded_for:203.0.XXX.XX remote_addr:203.0.XXX.XX remote_user:p288 request_length:13741 request_method:GET request_time:71 request_uri:/request/path-1/file-1 time_local:11/Aug/2021:06:52:27 upstream_response_time:0.66 -
Crie uma tarefa de transformação de dados.
Para mais informações, consulte Criar uma tarefa de transformação de dados.
Solução 4: Incorporar a tabela de mapeamento no código
Prepare a tabela de mapeamento de códigos de status HTTP no formato CSV.
-
Abra o Logstore nginx-demo que armazena os logs brutos e acesse a página de transformação de dados.
Para mais informações, consulte Criar uma tarefa de transformação de dados.
-
No editor, insira a instrução de transformação de dados.
Use a função tab_parse_csv para converter os códigos de status HTTP do formato CSV em uma tabela e, em seguida, use a função e_table_map para retornar os valores dos campos correspondentes:
e_table_map(tab_parse_csv("code,alias,category,description\n100,1xx,Informational,Continue\n101,1xx,Informational,Switching Protocols\n102,1xx,Informational,Processing (WebDAV)\n200,2xx,Success,OK\n201,2xx,Success,Created\n202,2xx,Success,Accepted\n203,2xx,Success,Non-Authoritative Information\n204,2xx,Success,No Content\n205,2xx,Success,Reset Content\n206,2xx,Success,Partial Content\n207,2xx,Success,Multi-Status (WebDAV)\n208,2xx,Success,Already Reported (WebDAV)\n226,2xx,Success,IM Used\n300,3xx,Redirection,Multiple Choices\n301,3xx,Redirection,Moved Permanently\n302,3xx,Redirection,Found\n303,3xx,Redirection,See Other\n304,3xx,Redirection,Not Modified\n305,3xx,Redirection,Use Proxy\n306,3xx,Redirection,(Unused)\n307,3xx,Redirection,Temporary Redirect\n308,3xx,Redirection,Permanent Redirect (experimental)\n400,4xx,Client Error,Bad Request\n401,4xx,Client Error,Unauthorized\n402,4xx,Client Error,Payment Required\n403,4xx,Client Error,Forbidden\n404,4xx,Client Error,Not Found\n405,4xx,Client Error,Method Not Allowed\n406,4xx,Client Error,Not Acceptable\n407,4xx,Client Error,Proxy Authentication Required\n408,4xx,Client Error,Request Timeout\n409,4xx,Client Error,Conflict\n410,4xx,Client Error,Gone\n411,4xx,Client Error,Length Required\n412,4xx,Client Error,Precondition Failed\n413,4xx,Client Error,Request Entity Too Large\n414,4xx,Client Error,Request-URI Too Long\n415,4xx,Client Error,Unsupported Media Type\n416,4xx,Client Error,Requested Range Not Satisfiable\n417,4xx,Client Error,Expectation Failed\n418,4xx,Client Error,I'm a teapot (RFC 2324)\n420,4xx,Client Error,Enhance Your Calm (Twitter)\n422,4xx,Client Error,Unprocessable Entity (WebDAV)\n423,4xx,Client Error,Locked (WebDAV)\n424,4xx,Client Error,Failed Dependency (WebDAV)\n425,4xx,Client Error,Reserved for WebDAV\n426,4xx,Client Error,Upgrade Required\n428,4xx,Client Error,Precondition Required\n429,4xx,Client Error,Too Many Requests\n431,4xx,Client Error,Request Header Fields Too Large\n444,4xx,Client Error,No Response (Nginx)\n449,4xx,Client Error,Retry With (Microsoft)\n450,4xx,Client Error,Blocked by Windows Parental Controls (Microsoft)\n451,4xx,Client Error,Unavailable For Legal Reasons\n499,4xx,Client Error,Client Closed Request (Nginx)\n500,5xx,Server Error,Internal Server Error\n501,5xx,Server Error,Not Implemented\n502,5xx,Server Error,Bad Gateway\n503,5xx,Server Error,Service Unavailable\n504,5xx,Server Error,Gateway Timeout\n505,5xx,Server Error,HTTP Version Not Supported\n506,5xx,Server Error,Variant Also Negotiates (Experimental)\n507,5xx,Server Error,Insufficient Storage (WebDAV)\n508,5xx,Server Error,Loop Detected (WebDAV)\n509,5xx,Server Error,Bandwidth Limit Exceeded (Apache)\n510,5xx,Server Error,Not Extended\n511,5xx,Server Error,Network Authentication Required\n598,5xx,Server Error,Network read timeout error\n599,5xx,Server Error,Network connect timeout error\n"), [("http_code","code")], [("alias","http_code_alias"), ("description","http_code_desc"), ("category","http_code_category")])ImportantePara garantir a segurança dos dados, configure o par de AccessKey nas configurações avançadas de parâmetros. Para mais informações, consulte Criar uma tarefa de transformação de dados.
A função tab_parse_csv cria uma tabela a partir de texto no formato CSV. Para mais informações, consulte tab_parse_csv.
A função e_table_map localiza a linha correspondente na tabela com base no valor do campo de entrada e retorna os valores dos campos especificados. Para mais informações, consulte e_table_map.
-
Clique em Preview Data.
Após o enriquecimento, o log do Nginx inclui os seguintes campos de código de status HTTP:
body_bytes_sent:1750 host:www.example.com http_code:200 http_code_alias:2xx http_code_category:Success http_code_desc:OK http_referer:www.example.aliyundoc.com http_user_agent:Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_6; it-it) AppleWebKit/533.20.25 (KHTML, like Gecko) Version/5.0.4 Safari/533.20.27 http_x_forwarded_for:203.0.XXX.XX remote_addr:203.0.XXX.XX remote_user:p288 request_length:13741 request_method:GET request_time:71 request_uri:/request/path-1/file-1 time_local:11/Aug/2021:06:52:27 upstream_response_time:0.66 -
Crie uma tarefa de transformação de dados.
Para mais informações, consulte Criar uma tarefa de transformação de dados.