programing

nginx에서 JSON 로그를 생성하는 방법

showcode 2023. 3. 11. 09:40
반응형

nginx에서 JSON 로그를 생성하는 방법

nginx에서 JSON 로그를 생성하려고 합니다.

와 같은 솔루션은 알고 있습니다만, 로그에 기록하는 필드에는 올바르게 이스케이프해야 하는 사용자 생성 입력(HTTP 헤더 등)이 포함되어 있습니다.

2011년 10월부터 2008년 5월까지 다음과 같은 nginx changelog 엔트리를 알고 있습니다.

*) Change: now the 0x7F-0x1F characters are escaped as \xXX in an
   access_log.
*) Change: now the 0x00-0x1F, '"' and '\' characters are escaped as \xXX
   in an access_log.

하지만 이것은 여전히 도움이 되지 않는다\xXX는 JSON 문자열에서 유효하지 않습니다.

HttpSetMiscModule 모듈도 살펴보았습니다.HttpSetMiscModule 모듈에는set_quote_json_str지시문입니다만, 이것은 단지\x22도움이 안 되는 줄에 매달려서 말이야

다른 솔루션이 nginx에서 JSON 형식으로 로그인 할 수 있는 방법이 있습니까?

마지막으로 모듈 없이 vanilla nginx를 사용하여 이 작업을 수행할 수 있는 좋은 방법이 있는 것 같습니다.정의:

log_format json_combined escape=json
  '{'
    '"time_local":"$time_local",'
    '"remote_addr":"$remote_addr",'
    '"remote_user":"$remote_user",'
    '"request":"$request",'
    '"status": "$status",'
    '"body_bytes_sent":"$body_bytes_sent",'
    '"request_time":"$request_time",'
    '"http_referrer":"$http_referer",'
    '"http_user_agent":"$http_user_agent"'
  '}';

escape=json이 nginx 1.11.8에 추가되었습니다.http://nginx.org/en/docs/http/ngx_http_log_module.html#log_format

Nginx용 추가 모듈인 https://github.com/jiaz/nginx-http-json-log을 사용해 보십시오.

다음을 사용할 수 있습니다.

PS: if 파라미터(1.7.0)는 조건부 로깅을 활성화합니다.조건이 "0" 또는 빈 문자열로 평가되면 요청이 기록되지 않습니다.

map $status $http_referer{
    ~\xXX  0;
    default 1;
}

access_log /path/to/access.log combined if=$http_referer;

JSON 데이터를 확인하려면 https://github.com/zaach/jsonlint 등의 도구를 사용하는 것이 좋습니다.새로운 로깅 포맷의 출력을 테스트하여 실제 JSON인지 확인할 수 있습니다.

언급URL : https://stackoverflow.com/questions/25049667/how-to-generate-a-json-log-from-nginx

반응형