ホームページ  >  記事  >  運用・保守  >  nginx ログを日ごとに最適化する方法を詳しく説明する

nginx ログを日ごとに最適化する方法を詳しく説明する

藏色散人
藏色散人転載
2023-03-31 14:48:492123ブラウズ

この記事では、nginx のログを日常的に最適化する方法を中心に、nginx に関する知識を紹介します。興味のある友達は一緒に見てください。皆様のお役に立てれば幸いです。

前書き:

前の記事「nginx インターセプト クローラーを思い出してください 」に続き、サーバーの nginx ログが非常に醜いことがわかりました。久しぶりです。多くのログが 1 つのファイル (数年前のものであっても) に含まれており、私のような Linux 初心者にとっては不親切です。そのため、少なくともログが多くなるように、ログをファイルに分割したいと考えています。ログを確認するのがより便利です:

Files by date

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 には 2 つの時刻形式が付属しています:
    のような形の $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'

2 つ目は、Dockerfile で完全にコンパイルすることです。

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

nginx の低レベル バージョンでは、依然として上記 2 つの手順を実行できないものがあります。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 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はlearnku.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。