深入了解nginx日誌級別

一、nginx日誌級別介紹

nginx作為一款高效、穩定、靈活的Web伺服器和反向代理伺服器,在應用和運維中廣泛使用。在nginx的運維中,日誌文件是非常重要的組成部分,它能夠記錄nginx的基本信息、請求信息、錯誤信息等。nginx的日誌級別主要有以下幾種:

  • alert – 系統級別緊急信息
  • critical – 關鍵錯誤信息
  • error – 一般性錯誤信息
  • warn – 警告信息
  • notice – 一些特殊信息
  • info – 一般信息
  • debug – 調試信息

二、日誌級別的設置

nginx的日誌級別可以在nginx.conf配置文件中設置:

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

此處我們設置為warn級別,意味著只有警告信息和以上級別的信息會記錄在日誌文件中。如果要記錄更詳細的信息,可以將級別設置為debug。

三、日誌文件的分類

按照日誌文件類型和記錄格式,我們可以將日誌文件分成兩類:訪問日誌和錯誤日誌。

1. 訪問日誌

訪問日誌用來記錄每個請求的基本信息,以下是一些典型的訪問日誌格式:

  • combined – 以Apache的combined日誌格式為模板
  • main – 簡單的nginx默認格式
  • json – 以JSON格式記錄
  • grpc – 以gRPC格式記錄

以下是以combined格式為例的訪問日誌配置,該格式可以同時記錄請求信息和響應碼:

  access_log /var/log/nginx/access.log combined;

2. 錯誤日誌

錯誤日誌用來記錄任何nginx處理請求時發生的錯誤信息。

以下是一個用於記錄所有錯誤級別的基本配置:

  error_log /var/log/nginx/error.log;

此處未設置級別,表示記錄所有調試信息、消息、警告和錯誤信息。

四、注意事項

1. 周期性日誌文件切割

由於nginx的日誌文件很容易變得非常大,而且記錄時間跨度較長,因此需要對日誌文件進行切割。切割日誌文件的方式有很多,可以使用logrotate、crontab等工具進行周期性的日誌文件切割。具體操作如下:

  sudo vim /etc/crontab

添加一行在每天凌晨1點鐘執行切割任務的計劃:

  0 1 * * * root /usr/sbin/logrotate /etc/logrotate.conf >/dev/null 2>&1

2. 日誌防護措施

nginx日誌記錄了一些敏感信息,如請求地址、參數、cookie等等,泄露這些信息會對系統造成安全威脅。因此需要採取措施保護這些日誌文件。常見的保護措施有:

  • 文件許可權設置
  • 加密存儲
  • 開啟訪問日誌壓縮

以下是設置壓縮訪問日誌的配置:

  gzip on;
  gzip_comp_level 2;
  gzip_min_length 1024;
  gzip_types text/plain text/css text/javascript application/json application/javascript application/xml;
  gzip_disable 「MSIE [1-6]\.」;

3. 日誌分析工具

nginx的日誌文件內容很難直接閱讀,需要使用日誌分析工具將其可視化。目前市面上比較常用的日誌分析工具有ELK、Fluentd、Logstash、Splunk等等。以下是使用ELK進行nginx日誌分析的簡單配置:

  access_log /var/log/nginx/access.log combined_json;
  # Additional logs for ELK
  log_format json escaped_json '{ "@timestamp": "$time_iso8601", '
                                '"host": "$server_addr", '
                                '"client_ip": "$remote_addr", '
                                '"size": $body_bytes_sent, '
                                '"response_time": $request_time, '
                                '"upstream_response_time": $upstream_response_time, '
                                '"upstream_connect_time": $upstream_connect_time, '
                                '"upstream_status": $upstream_status, '
                                '"request_method": "$request_method", '
                                '"url": "$uri", '
                                '"request": "$request", '
                                '"http_referrer": "$http_referer", '
                                '"http_x_forwarded_for": "$http_x_forwarded_for", '
                                '"http_user_agent": "$http_user_agent" }';
  error_log /var/log/nginx/error.log debug;

  # ELK Integration
  if ($request_uri = /healthz) { return 200; }
  location /nginx_logs {
    access_log off;

    tcp_nodelay on;
    proxy_http_version      1.1;
    proxy_connect_timeout   10s;
    proxy_request_buffering off;
    proxy_buffering         off;
    proxy_pass              http://localhost:5000/;

    # Send JSON logs
    log_format escaped_json '{ "@timestamp": "$time_iso8601", '
                                '"host": "$server_addr", '
                                '"client_ip": "$remote_addr", '
                                '"size": $body_bytes_sent, '
                                '"response_time": $request_time, '
                                '"upstream_response_time": $upstream_response_time, '
                                '"upstream_connect_time": $upstream_connect_time, '
                                '"upstream_status": $upstream_status, '
                                '"request_method": "$request_method", '
                                '"url": "$uri", '
                                '"request": "$request", '
                                '"http_referrer": "$http_referer", '
                                '"http_x_forwarded_for": "$http_x_forwarded_for", '
                                '"http_user_agent": "$http_user_agent" }';
   access_log syslog:server=logs.mysite.com:60223,facility=local7,tag=mynamespace,severity=informational escaped_json;
  }

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/236025.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-12 11:57
下一篇 2024-12-12 11:57

相關推薦

  • Cron執行日誌用法介紹

    本文將從多個方面對cron執行日誌進行詳細闡述,包括cron執行日誌的定義、cron執行日誌的產生原因、cron執行日誌的格式以及如何解讀cron執行日誌。 一、定義 Cron是一…

    編程 2025-04-29
  • Hibernate日誌列印sql參數

    本文將從多個方面介紹如何在Hibernate中列印SQL參數。Hibernate作為一種ORM框架,可以通過列印SQL參數方便開發者調試和優化Hibernate應用。 一、通過配置…

    編程 2025-04-29
  • Python如何區分代碼塊的級別

    Python是一種動態語言,其程序在運行前需由解釋器進行解析。在Python語言中,代碼塊的級別是非常重要的,對於代碼塊的排列順序、執行順序及錯誤檢測都有著重要的影響。Python…

    編程 2025-04-29
  • 使用Snare服務收集日誌:完整教程

    本教程將介紹如何使用Snare服務收集Windows伺服器上的日誌,並將其發送到遠程伺服器進行集中管理。 一、安裝和配置Snare 1、下載Snare安裝程序並安裝。 https:…

    編程 2025-04-29
  • Log4j日誌列印到Systemout.log

    Log4j是Apache的一個強大的日誌組件,可以幫助開發者更好地管理日誌。在Java應用程序中,很多開發者都會選擇使用Log4j來實現日誌輸出。本文將介紹如何使用Log4j將日誌…

    編程 2025-04-28
  • 圖像與信號處理期刊級別

    本文將從多個方面介紹圖像與信號處理期刊級別的相關知識,包括圖像壓縮、人臉識別、關鍵點匹配等等。 一、圖像壓縮 圖像在傳輸和存儲中佔據了大量的空間,因此圖像壓縮成為了很重要的技術。常…

    編程 2025-04-28
  • Java如何從Nginx下載文件

    本文將從以下幾個方面詳細介紹如何使用Java從Nginx下載文件。 一、準備工作 在Java中下載文件需要使用到Apache HttpClient庫,這個庫是一個基於Java的HT…

    編程 2025-04-27
  • 如何將Linux系統日誌發送到日誌伺服器

    本文將介紹如何將Linux系統日誌發送到日誌伺服器,以方便管理和監控系統狀態。 一、安裝rsyslog軟體包 rsyslog是Linux系統上默認的系統日誌軟體,用於收集系統事件和…

    編程 2025-04-27
  • SpringBoot如何設置不輸出Info日誌

    本篇文章將帶您了解如何在SpringBoot項目中關閉Info級別日誌輸出。 一、為什麼要關閉Info日誌 在開發中,我們經常會使用Log4j、Logback等框架來輸出日誌信息,…

    編程 2025-04-27
  • nginx與apache應用開發詳解

    一、概述 nginx和apache都是常見的web伺服器。nginx是一個高性能的反向代理web伺服器,將負載均衡和緩存集成在了一起,可以動靜分離。apache是一個可擴展的web…

    編程 2025-04-25

發表回復

登錄後才能評論