Nginx ログには、ウェブサイトの運用保守 (O&M) に重要な情報が含まれています。Simple Log Service の e_table_map 関数を使用すると、HTTP リクエストのリターンコードをエンリッチでき、ログデータ分析が簡素化されます。このトピックでは、e_table_map 関数を使用して HTTP リターンコードをエンリッチする方法について説明します。
前提条件
Nginx ログデータを収集済みです。詳細については、「データ収集」をご参照ください。
シナリオの説明
ある企業では、アプリケーションの開発中に HTTP リクエストリターンコードを標準化しています。マッピングデータは、統合メンテナンスのために定期的に更新されます。アプリケーションのメンテナンス中、生 Nginx ログの http_code フィールドのみがリクエスト状態を示すために使用されますが、これはトラブルシューティングには十分ではありません。
この問題に対処するために、HTTP リターンコードマッピングテーブルに基づいてログフィールドをエンリッチし、e_table_map 関数を使用して HTTP リクエスト状態をより直感的にすることができます。
-
生ログのサンプル
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.66生ログは nginx-demo という名前の LogStore に保存されます。http_code フィールドは HTTP リターンコードを示します。
-
HTTP リターンコードマッピングテーブル
以下は一般的な HTTP リターンコードマッピングテーブルです。
code
alias
category
desc
100
1xx
Informational
Continue
200
2xx
Success
OK
300
3xx
Redirection
Multiple Choices
400
4xx
Client Error
Bad Request
-
エンリッチされたログのサンプル
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
利用可能なソリューション
処理フロー
-
HTTP リターンコードをテーブルオブジェクトに変換します。
-
e_table_map 関数を使用してデータエンリッチメントを行います。
推奨ソリューション
これらの要件を満たすために、データエンリッチメントには以下のいずれかのソリューションを選択できます。
|
ソリューション |
データ量サポート |
増分更新 |
バッチ更新 |
|
|
大量 |
サポートされています |
サポートされています |
データ量が多く、頻繁に更新されるマッピングテーブル。 |
|
|
大 |
サポートされていません |
サポートされています |
頻繁に更新されるマッピングテーブル。 |
|
|
大 |
サポートされていません |
サポートされています |
更新頻度が低い比較的静的なマッピングテーブル。 |
|
|
少量 |
サポートされていません |
サポートされていません |
一般的な HTTP リターンコードマッピングテーブル。 |
ソリューション 1: LogStore を使用したデータエンリッチメント (推奨)
-
ソフトウェア開発キット (SDK) を使用して、HTTP リターンコードを http_code という名前の LogStore に書き込みます。
以下は、LogStore 内の HTTP リターンコードログのサンプルです。
__source__:203.0.XXX.XX __tag__:__receive_time__:1595424194 __topic__: code:200 alias:2xx description:OK category:Success詳細については、「SDK リファレンス」をご参照ください。
-
HTTP リターンコードを保存する LogStore の名前、エンドポイント、および AccessKey を取得します。これらの情報はデータ変換ステートメントを編集するために必要です。
Simple Log Service のエンドポイントと AccessKey ペア。詳細については、「エンドポイント」および「AccessKey ペア」をご参照ください。
-
生ログを保存する nginx-demo LogStore にログインし、データ変換ページに移動します。
詳細については、「データ変換タスクの作成」をご参照ください。
-
エディターでデータ変換ステートメントを入力します。
http_code LogStore からデータを読み取り、e_table_map 関数を使用して対応するフィールドの値を返します。
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")])重要データセキュリティのため、AccessKey は詳細パラメーター設定で構成する必要があります。詳細パラメーターの構成方法については、「データ変換タスクの作成」をご参照ください。
-
res_log_LogStore_pull 関数を使用して、別の LogStore からデータをプルします。詳細については、「res_log_LogStore_pull」をご参照ください。
-
この関数は、入力フィールドの値に基づいてテーブル内の対応する行を検索し、指定されたフィールドの値を返します。詳細については、「e_table_map」をご参照ください。
-
-
クリック[データのプレビュー]。
Nginx ログがエンリッチされると、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 -
データ変換タスクを作成します。
詳細については、「データ変換タスクの作成」をご参照ください。
ソリューション 2: MySQL テーブルを使用したデータエンリッチメント
-
HTTP リターンコードを ApsaraDB RDS for MySQL データベースに保存します。
以下は、ApsaraDB RDS for MySQL データベース内の HTTP リターンコードマッピングテーブルを示しています。

-
ApsaraDB RDS for MySQL データベースのホストアドレス、ユーザー名、パスワード、およびテーブル名を取得します。これらの情報はデータ変換ステートメントを編集するために必要です。
-
生ログを保存する nginx-demo LogStore にログインし、データ変換ページに移動します。
詳細については、「データ変換タスクの作成」をご参照ください。
-
エディターでデータ変換ステートメントを入力します。
MySQL データベースからデータを読み取り、e_table_map 関数を使用して対応するフィールドの値を返します。
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")])重要データセキュリティのため、AccessKey は詳細パラメーター設定で構成する必要があります。詳細パラメーターの構成方法については、「データ変換タスクの作成」をご参照ください。
-
res_rds_mysql 関数を使用して、ApsaraDB RDS for MySQL データベースからテーブルコンテンツをプルします。詳細については、「res_rds_mysql」をご参照ください。
-
この関数は、入力フィールドの値に基づいてテーブル内の対応する行を検索し、指定されたフィールドの値を返します。詳細については、「e_table_map」をご参照ください。
-
-
クリック [データのプレビュー]。
Nginx ログがエンリッチされると、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 -
データ変換タスクを作成します。
詳細については、「データ変換タスクの作成」をご参照ください。
ソリューション 3: OSS ファイルを使用したデータエンリッチメント
-
HTTP リターンコードを http_code.csv という名前のファイルに保存し、そのファイルを Object Storage Service (OSS) バケットにアップロードします。
詳細については、「ファイルのアップロード」をご参照ください。
-
http_code.csv ファイルが保存されている OSS バケットの名前、エンドポイント、および AccessKey を取得します。これらの情報はデータ変換ステートメントを編集するために必要です。
Object Storage Service (OSS) のエンドポイント。詳細については、「リージョンとエンドポイント」をご参照ください。
-
生ログを保存する nginx-demo LogStore にログインし、データ変換ページに移動します。
詳細については、「データ変換タスクの作成」をご参照ください。
-
エディターでデータ変換ステートメントを入力します。
OSS バケットからデータを読み取り、e_table_map 関数を使用して対応するフィールドの値を返します。
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")])重要データセキュリティのため、AccessKey は詳細パラメーター設定で構成する必要があります。詳細パラメーターの構成方法については、「データ変換タスクの作成」をご参照ください。
-
res_oss_file 関数は、OSS バケットからファイルコンテンツを取得し、定期的なリフレッシュをサポートします。詳細については、「res_oss_file」をご参照ください。
-
tab_parse_csv 関数を使用して、CSV 形式のテキストからテーブルを作成します。詳細については、「tab_parse_csv」をご参照ください。
-
この関数は、入力フィールドの値に基づいてテーブル内の対応する行を検索し、指定されたフィールドの値を返します。詳細については、「e_table_map」をご参照ください。
-
-
クリックします[データのプレビュー]。
Nginx ログがエンリッチされると、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 -
データ変換タスクを作成します。
詳細については、「データ変換タスクの作成」をご参照ください。
ソリューション 4: コードの埋め込み
-
HTTP リターンコードマッピングテーブルを CSV 形式で準備します。
-
生ログを保存する nginx-demo LogStore にログインし、データ変換ページに移動します。
詳細については、「データ変換タスクの作成」をご参照ください。
-
エディターでデータ変換ステートメントを入力します。
tab_parse_csv 関数を使用して HTTP リターンコードを CSV 形式からテーブルに変換します。その後、e_table_map 関数を使用して対応するフィールドの値を返します。
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")])重要データセキュリティのため、AccessKey は詳細パラメーター設定で構成する必要があります。詳細パラメーターの構成方法については、「データ変換タスクの作成」をご参照ください。
-
tab_parse_csv 関数を使用して、CSV 形式のテキストからテーブルを作成します。詳細については、「tab_parse_csv」をご参照ください。
-
この関数は、入力フィールドの値に基づいてテーブル内の対応する行を検索し、指定されたフィールドの値を返します。詳細については、「e_table_map」をご参照ください。
-
-
クリック[データのプレビュー]。
Nginx ログがエンリッチされると、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 -
データ変換タスクを作成します。
詳細については、「データ変換タスクの作成」をご参照ください。