首頁  >  文章  >  運維  >  細說nginx日誌如何按天優化

細說nginx日誌如何按天優化

藏色散人
藏色散人轉載
2023-03-31 14:48:492148瀏覽

這篇文章為大家帶來了關於nginx的相關知識,其中主要介紹了nginx日誌如何按天優化,有興趣的朋友下面一起來看一下吧,希望對大家有幫助。

前言:

接著上一篇文章《記一次nginx攔截爬蟲》,發現伺服器nginx日誌非常不好看,時間長了一大堆都在一個文件裡邊(甚至幾年的),對於我這種linux小白就不友好了,所以想把日誌分文件,這樣至少我們去查看日誌的時候會方便很多:

按天分檔

直接上nginx.conf配置

user nginx;
worker_processes 2;

error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;


events {
    worker_connections  1024;
}

http {
    include  /etc/nginx/mime.types;
    default_type application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_iso8601] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for" $request_time $upstream_response_time';

    #引入time_iso8601模块 设置时间 日期变量
    map $time_iso8601 $logdate {
        #&#39;~^(?<ymdh>\d{4}-\d{2}-\d{2}T\d{2})&#39; $ymdh;
        &#39;~^(?<ymd>\d{4}-\d{2}-\d{2})&#39; $ymd;
        default &#39;date-not-found&#39;;
    }

    #日志存放目录
    access_log /var/log/nginx/access-$logdate.log main;

    #日志缓存,将多个日志进行积累,达到一定量级后写入到磁盘,可以减少磁盘旋转,从而降低磁盘i/o,提升nginx能效
    open_log_file_cache max=10;

    sendfile        on;
    #tcp_nopush     on;

    keepalive_timeout  65;

    #gzip  on;

    include /etc/nginx/conf.d/*.conf;

    #隐藏http版本号
    server_tokens off;
}

這樣就會按照天生成日誌檔;這裡邊最重要的就是引入 $time_iso8601(這個是nginx裡邊自帶的一個時間格式)進行自訂變量,不需要額按編譯。

日期格式最佳化

  • nginx自帶兩種時間格式:
    $time_iso8601 形如2023-03-29T16:58:49 08:00
    $time_local 形如14/Nov/2022:08:28:14 0000
    可以看出$time_local的格式看起來不是很美妙,對於我自己來說肯定按照'年月日時分秒' 這樣看更順眼一些,所以我們在自定義日誌格式的時候,時間格式也是選擇的是$time_iso8601

  • 時間怎麼和我們本地時間一致
    時間格式順眼了,但是發現時間還是UTC時區的時間,怎麼處理呢:
    我這邊使用的是docker-compose,可以直接配置環境變數。

version: '3'
services:
  d_nginx:
    container_name: c_nginx
    environment:
      TZ: 'Asia/Shanghai'

第二種就是Dockerfile中編譯,一勞永逸。

FROM nginx:1.20.1-alpine
#定义时区参数
ENV TZ=Asia/Shanghai

有一些低版本的nginx做了以上兩步還是不得行,有可能是因為缺少了tzdata時區資料包。

FROM nginx:1.12.1-alpine
#将alpine的源更换成阿里云的源
RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories
#定义时区参数
ENV TZ=Asia/Shanghai
#安装时区数据包 
RUN apk add --update tzdata
#设置时区 
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo '$TZ' > /etc/timezone

經過上邊的步驟nginx日誌裡邊的格式和時間應該就是我自己想要的了。

#給大家分享一個nginx日誌分析工具

《goaccess》
goaccess nginx.log -a > nginx .html
這個工具能方便快速的分析nginx日誌,能可視化的展示很多信息,幫助我們快速定位問題;比如接口的調用量(具體到某一個接口),訪問者數量等等。

細說nginx日誌如何按天優化

推薦學習:《Nginx使用教學

#

以上是細說nginx日誌如何按天優化的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:learnku.com。如有侵權,請聯絡admin@php.cn刪除