NGINXログは、WebサイトのO&Mに使用できる重要な情報を記録します。Simple Log Serviceは、NGINXログ分析用のHTTPレスポンスステータスコードを強化するために使用できるe_table_map関数を提供します。 このトピックでは、e_table_map関数を使用してHTTPレスポンスステータスコードを強化する方法について説明します。
前提条件
NGINXログが収集されます。 詳細については、「データ収集の概要」をご参照ください。
シナリオの例
企業はアプリケーションAを開発し、アプリケーションを維持するためにHTTP応答ステータスコードを定義しました。 データは不規則な間隔で更新されます。 生のNGINXログのhttp_codeフィールドのみがHTTPリクエストのステータスを示します。 このフィールドを使用して問題を効率的に識別することはできません。
この場合、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応答ステータスコードのマッピング表である。
コード
エイリアス
カテゴリ
desc
100
1xx
情報
続行
200
2xx
Success
OK
300
3xx
リダイレクション
複数の選択肢
400
4xx
クライアントエラー
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に書き込みます。
次の例は、http_code LogstoreのHTTP応答ステータスコードを含むログを示しています。
__source__:203.0.XXX.XX __tag__:__receive_time__:1595424194 __topic__: code:200 alias:2xx description:OK category:Success
詳細については、「Simple Log Service SDKの概要」をご参照ください。
http_code 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ペアを指定することを推奨します。 詳細パラメーター設定フィールドの設定方法の詳細については、「データ変換ジョブの作成」をご参照ください。
Logstore内のデータを変換するときに、res_log_logstore_pull関数は別のLogstoreからデータをプルします。 詳細は、「res_log_logstore_pull」をご参照ください。
e_table_map関数は、入力フィールドの値を指定されたテーブルの行にマップし、新しいフィールドを返します。 詳細については、「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 name",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関数は、入力フィールドの値を指定されたテーブルの行にマップし、新しいフィールドを返します。 詳細については、「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オブジェクトをOSSバケットにアップロードします。
詳細については、「オブジェクトのアップロード」をご参照ください。
http_code.csvオブジェクトがアップロードされたOSSバケットの名前とエンドポイント、および必要なAccessKeyペアを取得します。 得られた情報は、データ変換文を書き込むために使用される。
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関数は、入力フィールドの値を指定されたテーブルの行にマップし、新しいフィールドを返します。 詳細については、「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: 埋め込みコードに基づいてデータを強化する
CSV形式のHTTPレスポンスステータスコードのマッピングテーブルを用意します。
生ログを保存するnginx-demo Logstoreのデータ変換ページに移動します。
詳細については、「データ変換ジョブの作成」をご参照ください。
エディターボックスに、データ変換ステートメントを入力します。
tab_parse_csv関数を使用して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関数は、入力フィールドの値を指定されたテーブルの行にマップし、新しいフィールドを返します。 詳細については、「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
データ変換ジョブを作成します。
詳細については、「データ変換ジョブの作成」をご参照ください。