nginx配置日誌為json格式,nginx按照天實現日誌分割,nginx配置負載均衡
阿新 • • 發佈:2021-01-16
1.nginx功能,可以作為HTTP伺服器,也可作為反向代理伺服器,郵件伺服器。支援FastCGI、SSL、Virtual Host、URL Rewrite、Gzip等功能。並且支援很多第三方的模組擴充套件。在使用nginx過程中我們除了要使用nginx自身的功能之外,我們還需要讓它使用起來更加得心應手和舒服,這時我們可以自己配置nginx日誌顯示,實現服務監聽,訪問統計等。一個好的nginx日誌配置方便我們對服務的監控,負載均衡和session共享可以方便我們橫向擴充套件服務,日誌分割使我們更容易區分每天服務的訪問情況。具體配置如下
1.nginx配置日誌為json格式,方便其它服務抓取資料,實現訪問監聽
#配置日誌為json格式 log_format main '{ "@timestamp":"$time_local", "host":"$server_addr", "clientip":"$remote_addr", "remote_user":"$remote_user", "request":"$request", "http_user_agent":"$http_user_agent", "size":"$body_bytes_sent", "responsetime":"$request_time", "upstreamtime":"$upstream_response_time", "upstreamhost":"$upstream_addr", "http_host":"$host", "url":"$uri", "domain":"$host", "xff":"$http_x_forwarded_for", "referer":"$http_referer", "status":"$status" }';
2.nginx配置日誌按照天分割,配置在server裡
#日誌按照天分割 if ($time_iso8601 ~ "^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2})") { set $year $1; set $month $2; set $day $3; set $hour $4; set $minutes $5; set $seconds $6; } access_log logs/nginx_access_$year-$month-$day.log main;
3.nginx配置負載均衡,使用ip_hash實現session共享
#負載均衡,使用ip_hash實現session共享
upstream dianyu_net_server {
server 102.13.22.223:8080;
server 102.13.22.224:8080;
server 102.13.22.225:8080;
ip_hash;
}
4.nginx全部配置如下
#配置啟動使用者為root
user root;
worker_processes 1;
events {
worker_connections 1024;
}
http {
#配置日誌為json格式
log_format main '{
"@timestamp":"$time_local",
"host":"$server_addr",
"clientip":"$remote_addr",
"remote_user":"$remote_user",
"request":"$request",
"http_user_agent":"$http_user_agent",
"size":"$body_bytes_sent",
"responsetime":"$request_time",
"upstreamtime":"$upstream_response_time",
"upstreamhost":"$upstream_addr",
"http_host":"$host",
"url":"$uri",
"domain":"$host",
"xff":"$http_x_forwarded_for",
"referer":"$http_referer",
"status":"$status"
}';
#不生效
#access_log logs/access.log main;#1、轉發的日誌檢視
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
#負載均衡實現session共享,缺少配置流量分配和健康檢查
upstream dianyu_net_server {
server 102.13.22.223:8080;
server 102.13.22.224:8080;
server 102.13.22.225:8080;
ip_hash;
}
server {
listen 80;
server_name 127.0.0.1;
location / {
proxy_pass http://dianyu_net_server;
gzip on;
gzip_min_length 1k;
gzip_buffers 16 64k;
gzip_http_version 1.1;
gzip_comp_level 6;
gzip_types text/plain application/x-javascript text/css application/xml image/jpeg image/gif image/png;
gzip_vary on;
gzip_disable "MSIE [1-6]\.";
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
#proxy_set_header X-Forwarded-For $http_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_connect_timeout 100;
proxy_read_timeout 600;
proxy_send_timeout 600;
proxy_buffer_size 64k;
proxy_buffers 4 32k;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 64k;
}
#日誌按照天分割
if ($time_iso8601 ~ "^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2})")
{
set $year $1;
set $month $2;
set $day $3;
set $hour $4;
set $minutes $5;
set $seconds $6;
}
access_log logs/nginx_access_$year-$month-$day.log main;
}
}
nginx日誌欄位解釋,引數明細
$remote_addr | 客戶端ip地址(代理伺服器,顯示代理服務ip) |
$http_x_forwarded_for | 可以記錄客戶端IP,通過代理伺服器來記錄客戶端的ip地址 |
$remote_user | 使用者記錄遠端客戶端的使用者名稱稱(一般為‘-’) |
$time_local | 用具記錄訪問時間和時區 |
$status | 響應狀態碼 ‘404’頁面找不到 ‘200’成功等 |
$request_time | 整個請求的總時間,從接收使用者請求的第一個位元組到傳送完響應資料的時間,即包括接收請求資料時間,程式響應時間,輸出響應資料時間 |
$bytes_sent | 傳輸給客戶端的位元組數 |
$body_bytes_sent | 給客戶端傳送的檔案主題內容位元組數,響應頭不計算在內 |
$request_length | 請求的長度(包括請求的地址,http請求頭和請求主體) |
$http_referer | url跳轉來源,用來記錄從哪個頁面連結訪問過來的 |
$upstream_addr | 後臺提供服務的地址(即轉發處理的目標地址) |
$upstream_response_time | 從nginx向後端建立連線開始到接受完資料然後關閉連線為止的時間 |
$http_user_agent | 使用者所使用的代理(一般為瀏覽器) |
$request | 用於記錄請求的url以及請求方法 |
$request_body | 客戶端的請求主體,此變數可以在location中使用,將請求主體通過proxy_pass,fastcgi_pass,uwsgi_pass和scgi_pass傳遞給下一級的代理 |
$args | 請求中的引數值 |
$uri | 請求中的當前URI(不帶請求引數,引數位於$args),可以不同於瀏覽器傳遞的$request_uri的值,它可以通過內部重定向,或者使用index指令修改 |
$request_uri | 這個變數等於包含一些客戶端請求引數的原始URI,它無法修改 |
$remote_port | 客戶端埠 |