Heim  >  Artikel  >  Betrieb und Instandhaltung  >  So passen Sie die Protokollierung an und aktivieren den Protokollpuffer in Nginx

So passen Sie die Protokollierung an und aktivieren den Protokollpuffer in Nginx

WBOY
WBOYnach vorne
2023-05-14 13:07:331078Durchsuche

Zugriffsprotokoll

nginx schreibt Informationen über Clientanfragen unmittelbar nach der Verarbeitung der Anfrage in das Zugriffsprotokoll. Standardmäßig befindet sich das Zugriffsprotokoll in logs/access.log und die Informationen werden in einem vordefinierten Kombinationsformat in das Protokoll geschrieben.

Wenn Sie Zugriffsinformationen genau aufzeichnen möchten, müssen Sie ein vollständigeres Zugriffsprotokollformat anpassen, wie unten gezeigt:

http {
  log_format geoproxy
  '[$time_local] $remote_addr '
  '$realip_remote_addr $remote_user '
  '$request_method $server_protocol '
  '$scheme $server_name $uri $status '
  '$request_time $body_bytes_sent '
  '$geoip_city_country_code3 $geoip_region '
  '"$geoip_city" $http_x_forwarded_for '
  '$upstream_status $upstream_response_time '
  '"$http_referer" "$http_user_agent"';
  ...
}

Diese Protokollkonfiguration heißt Geoproxy und verwendet viele Nginx-Variablen, um die Nginx-Protokollierungsfunktion zu demonstrieren. Erklären Sie im Detail die spezifische Bedeutung jeder Variablen in den Konfigurationsoptionen:

Wenn ein Benutzer eine Anfrage initiiert, wird die Serverzeit $time_local aufgezeichnet und der Wert von $remote_user ist der Benutzername, der die Basisautorisierung bestanden hat

wird für Nginx verwendet, um die IP-Adresse und die IP-Adresse des Clients zum Öffnen der Anweisungen zu verarbeiten.

Dann notieren Sie die http-Anforderungsmethode $request_method, das Protokoll $server_protocol und die http-Methode $scheme: http oder https; der Servername $server_name, die Anforderungs-URI und der Antwortstatuscode;

Zusätzlich zu den grundlegenden Informationen gibt es auch einige statistische Ergebnisdaten: einschließlich der Zeit der Anforderungsverarbeitung auf Millisekundenebene $request_time und der Datenblockgröße der Serverantwort $ body_bytes_sent;

Darüber hinaus werden auch das Land, in dem sich der Client befindet, $geoip_city_country_code3, die Region $geoip_region und die Stadtinformationen $geoip_city aufgezeichnet;

Variable $http_x_forwarded_for wird verwendet, um die x-forwarded-for-Header-Nachricht von Anfragen aufzuzeichnen initiiert von anderen Proxy-Servern;

Einige Daten im Upstream-Modul werden auch im Protokoll aufgezeichnet: Proxy-Server Der Antwortstatuscode $upstream_status , die Zeit zum Herstellen der Verbindung und zum Empfangen des letzten Bytes des Antworttexts vom Upstream-Server $ upstream_response_time , die Zeit zum Herstellen der Verbindung zum Upstream-Server $upstream_connect_time , die Zeit zum Herstellen der Verbindung und zum Empfangen des ersten Bytes des Antwortheaders vom Upstream-Server $upstream_header_time .

Die Anforderungsquelle $http_referer und der Benutzeragent $http_user_agent können ebenfalls im Protokoll aufgezeichnet werden.

Die Protokollierungsfunktion von nginx ist sehr leistungsfähig und flexibel. Es ist zu beachten, dass: Die zum Definieren des Protokollformats verwendete Direktive log_format gilt nur für Der http-Block Innerhalb von Klassenanweisungen werden alle Zeitwerte in Millisekunden angegeben und mit Millisekundenauflösung gemessen. .

Die Protokollkonfiguration in diesem Format generiert die folgenden Protokolltypen:

[25/feb/2019:16:20:42 +0000] 10.0.1.16 192.168.0.122 derek
get http/1.1 http / 200 0.001 370 usa mi

"ann arbor" - 200 0,001 "-" "curl/7.47.0"


Wenn Sie diese Protokollkonfiguration verwenden müssen, müssen Sie sie in Verbindung mit der access_log-Direktive verwenden ein Protokollverzeichnis und der Konfigurationsname, die als Parameter verwendet werden:
server {
  access_log /var/log/nginx/access.log geoproxy;
  ...
}

access_log kann in mehreren Kontexten verwendet werden, und jeder Kontext kann sein eigenes Protokollverzeichnis und Protokollaufzeichnungsformat definieren.

Fazit: Das Protokollmodul in Nginx ermöglicht die Konfiguration von Protokollformaten für verschiedene Szenarien, um verschiedene Protokolldateien anzuzeigen.

In praktischen Anwendungen ist es sehr nützlich, verschiedene Protokolle für unterschiedliche Kontexte zu konfigurieren. Der aufgezeichnete Protokollinhalt kann einfache Informationen sein oder alle notwendigen Informationen können detailliert aufgezeichnet werden. Darüber hinaus kann der Protokollinhalt neben unterstützendem Text auch Daten im JSON-Format und im XML-Format aufzeichnen. Tatsächlich helfen Ihnen Nginx-Protokolle dabei, Informationen wie Serververkehr, Client-Nutzung und Client-Herkunft zu verstehen. Darüber hinaus können Zugriffsprotokolle Ihnen dabei helfen, Antworten und Probleme im Zusammenhang mit dem Upstream-Server zu lokalisieren, oder bestimmte URIs sind auch für Tests nützlich, da sie zur Analyse des Datenverkehrs und zur Simulation realer Benutzerinteraktionsszenarien verwendet werden können. Protokolle sind bei der Fehlerbehebung, beim Debuggen, bei der Anwendungsanalyse und bei Geschäftsanpassungen unverzichtbar.

Fehlerprotokoll

Um das Fehlerprotokoll von Nginx genau zu lokalisieren, verwenden Sie die integrierte error_log-Direktive, um das Fehlerprotokollverzeichnis und die Ebene der Aufzeichnung von Fehlerprotokollen zu definieren. Die Konfiguration ist wie folgt:

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

Die error_log-Direktive erfordert bei der Konfiguration ein erforderliches Protokoll und eine optionale Fehlerstufenoption.

Mit Ausnahme der if-Direktive kann die error_log-Direktive in allen Kontexten verwendet werden. Zu den Fehlerprotokollebenen gehören:

Debug, Info, Hinweis, Warnung, Fehler, Krit, Warnung und Notfall. Die angegebene Log-Level-Reihenfolge ist die Log-Level-Reihenfolge vom kleinsten zum strengsten Datensatz. Es ist zu beachten, dass beim Kompilieren des Nginx-Servers das Debug-Protokoll

mit dem Flag --with-debug verwendet werden muss.

Wenn in der Serverkonfiguration ein Fehler auftritt, müssen Sie zunächst das Fehlerprotokoll überprüfen, um das Problem zu lokalisieren. Das Fehlerprotokoll

ist auch ein nützliches Tool zum Auffinden von Anwendungsservern (z. B. Fastcgi-Diensten). Über das Fehlerprotokoll können wir Verbindungsfehler des Arbeitsprozesses, Speicherzuweisung, Client-IP, Anwendungsserver und andere Probleme debuggen. Das Fehlerprotokollformat unterstützt keine benutzerdefinierten Protokollformate; es zeichnet jedoch auch Daten wie die aktuelle Zeit, die Protokollebene und spezifische Informationen auf.

注意:错误日志的默认设置适用于全局。要覆盖它,请将 error_log 指令放在 main (顶级)配置上下文中。 error_log 在开源 nginx 1.5.2 版中添加了在同一配置级别指定多个指令的功能。

通过 syslog 将日志发送到统一服务器

既然不再需要将日志写到磁盘的某个目录,而是发送到统一的日志服务器,则将原有的目录部分替换为服务器 ip 即可,配置如下:

error_log syslog:server=10.0.1.42 debug;
access_log syslog:server=10.0.1.42,tag=nginx,severity=info geoproxy;

#error_log server=unix:/var/log/nginx.sock debug;
#access_log syslog:server=[2001:db8::1]:1234,facility=local7,tag=nginx,severity=info;

error_log 和 access_log 指令的 syslog 参数紧跟冒号 : 和一些参数选项。包括:必选的 server 标记表示需要连接的 ip、dns 名称或 unix 套接字;

可以使用如上注释的高端玩。

可选参数有 facility 、 severity 、 tag :

server 参数接收带端口的 ip 地址或 dns 名称;默认是 udp 514 端口。

facility 参数设置 syslog 的类型 facility ,值是 syslog rfc 标准定义的 23 个值中一个,默认值为 local7 。其他可能的值是: auth , authpriv , daemon , cron , ftp , lpr , kern , mail , news , syslog , user , uucp , local0 ... local7

tag 参数表示日志文件中显示时候的标题,默认值是 nginx 。

severity 设置消息严重程度,默认是 info 级别日志。

日志缓冲区

当系统处于负载状态时,启用日志缓冲区以降低 nginx worker 进程阻塞。大量的磁盘读写和 cpu 资源使用对于服务器资源也是一种巨大消耗。将日志数据缓冲到内存中可能是很小的一个优化手段, buffer 参数意义是缓冲区的大小,功能是当缓冲区已经写满时,日志会被写入文件中; flush 参数意义是缓冲区内日志在缓冲区内存中保存的最长时间,功能即当缓存中的日志超过最大缓存时间,也会被写入到文件中, 不足的地方即写入到日志文件的日志有些许延迟,即时调试中应当关闭日志缓冲。 。配置如下:

http {
  access_log /var/log/nginx/access.log main buffer=32k flush=1m;
}

Das obige ist der detaillierte Inhalt vonSo passen Sie die Protokollierung an und aktivieren den Protokollpuffer in Nginx. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:yisu.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen