Nginx'te Özel Erişim ve Hata Günlüğü Formatlarını Yapılandırma
Nginx HTTP sunucusu, son derece özelleştirilebilir olağanüstü bir günlük kaydı olanağına sahiptir. Bu yazıda, Linux'ta Nginx için erişim ve hata günlükleri için kendi formatlarınızı nasıl yapılandıracağınızı açıklayacağız.
Bu kılavuzun amacı, hata ayıklama, sorun giderme veya web sunucunuzda ve web uygulamalarında (istek izleme gibi) ortaya çıkan olayların analizi amacıyla özel günlük formatlarını yapılandırmak için günlüklerin nasıl oluşturulduğunu anlamanıza yardımcı olmaktır.
Ayrıca Okuyun: Linux için 4 İyi Açık Kaynak Günlük İzleme ve Yönetim Aracı
Bu makale, erişim/hata günlüklerinin yapılandırılması ve Nginx'te koşullu günlük kaydının nasıl etkinleştirileceği konusunda sizi aydınlatacak üç bölümden oluşmaktadır.
Nginx'te Erişim Günlüklerini Yapılandırma
Nginx altında, sunucuya yapılan tüm istemci istekleri, ngx_http_log_module modülü kullanılarak erişim günlüğüne belirtilen biçimde kaydedilir.
Varsayılan günlük dosyası log/access.log'dur (Linux sistemlerinde genellikle /var/log/nginx/access_log) ve günlük kaydı için varsayılan biçim normalde birleştirilmiş veya ana günlük dosyasıdır biçimi (bu bir dağıtımdan diğerine değişebilir).
access_log yönergesi (bağlam dışında konum ve sınırdaysa http, sunucu, konum için geçerlidir) günlük dosyasını ayarlamak için kullanılır ve log_format yönergesi (bağlam dışında geçerlidir) kullanılır. Yalnızca http bağlamı) günlük biçimini ayarlamak için kullanılır. Günlük formatı, ortak değişkenler ve yalnızca günlük yazıldığı sırada oluşturulan değişkenler tarafından tanımlanır.
Günlük formatını yapılandırmaya yönelik sözdizimi şöyledir:
log_format format_name 'set_of_variables_to_define_format';
ve erişim günlüğünü yapılandırmaya yönelik sözdizimi şöyledir:
access_log /path/to/log_file format_name; #simplest form
OR
access_log /path/to/log_file [format [buffer=size] [gzip[=level]] [flush=time] [if=condition]];
Aşağıdaki, CentOS 7'deki varsayılan Nginx yapılandırma dosyasından /etc/nginx/nginx.conf'dan bir alıntıdır.
http {
#main log format
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log;
}
Bu günlük formatı aşağıdaki günlük girişini sağlar.
127.0.0.1 - dbmanager [20/Nov/2017:18:52:17 +0000] "GET / HTTP/1.1" 401 188 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:47.0) Gecko/20100101 Firefox/47.0"
Aşağıda, bazı varsayılan değişkenleri kullanarak web uygulamalarımıza gelen istekleri izlemek için kullandığımız başka bir yararlı günlük kaydı biçimi bulunmaktadır; en önemlisi istek kimliğine sahiptir ve istemci konum ayrıntılarını (ülke, ülke kodu, bölge ve şehir) günlüğe kaydeder.
log_format custom '$remote_addr - $remote_user [$time_local] '
'"$request" $status $body_bytes_sent '
'"$http_referer" "$http_user_agent" '
'"$http_x_forwarded_for" $request_id '
'$geoip_country_name $geoip_country_code '
'$geoip_region_name $geoip_city ';
Bunu şu şekilde kullanabilirsiniz:
access_log /var/log/nginx/access.log custom;
Bu, şu şekilde görünen bir günlük girişi üretecektir.
153.78.107.192 - - [21/Nov/2017:08:45:45 +0000] "POST /ngx_pagespeed_beacon?url=https%3A%2F%2Fwww.example.com%2Fads%2Ffresh-oranges-1509260795 HTTP/2.0" 204 0 "https://www.suasell.com/ads/fresh-oranges-1509260795" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:47.0) Gecko/20100101 Firefox/47.0" "-" a02b2dea9cf06344a25611c1d7ad72db Uganda UG Kampala Kampala
Aynı düzeydeki access_log yönergelerini kullanarak birden fazla günlük belirtebilirsiniz, burada http bağlamında birden fazla günlük dosyası kullanıyoruz.
http{
##default log format
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
##request tracing using custom format
log_format custom '$remote_addr - $remote_user [$time_local] '
'"$request" $status $body_bytes_sent '
'"$http_referer" "$http_user_agent" '
'"$http_x_forwarded_for" $request_id '
'$geoip_country_name $geoip_country_code '
'$geoip_region_name $geoip_city ';
##this uses the default log format
access_log /var/log/nginx/access.log;
##this uses the our custom log format
access_log /var/log/nginx/custom_log custom;
}
Aşağıda, sıkıştırmayla ilgili değişkenler içeren günlük formatları ve sıkıştırılmış günlük dosyaları oluşturmak için yararlı olan daha gelişmiş günlük yapılandırma örnekleri yer almaktadır:
access_log /var/log/nginx/custom_log custom buffer 32k;
access_log /path/to/log.gz compression gzip flush=5m;
Nginx'te Hata Günlüklerini Yapılandırma
Nginx'in herhangi bir aksaklık yaşaması durumunda, bunlarla ilgili bilgileri hata günlüğüne kaydeder. Bu sorunlar farklı önem düzeylerine tabidir: hata ayıklama, bilgi, bildirim, uyarı, hata Strong> (bu, varsayılan düzeydir ve genel olarak çalışır), kritik, uyarı veya acil durum.
Varsayılan günlük dosyası log/error.log'dur, ancak normalde Linux dağıtımlarında /var/log/nginx/ konumunda bulunur. error_log yönergesi günlük dosyasını belirtmek için kullanılır ve ana, http, posta, akış, sunucu, konum bağlamında (bu sırayla) kullanılabilir.
Şuna da dikkat etmelisiniz:
- Ana bağlamdaki konfigürasyonlar her zaman daha düşük seviyeler tarafından yukarıdaki sıraya göre devralınır.
- ve daha düşük seviyelerdeki konfigürasyonlar, daha yüksek seviyelerden devralınan konfigürasyonları geçersiz kılar.
Aşağıdaki sözdizimini kullanarak hata günlüğünü yapılandırabilirsiniz:
error_log /path/to/log_file log_level;
Örneğin:
error_log /var/log/nginx/error_log warn;
Bu, Nginx'e warn türündeki ve daha ciddi düzeydeki kritik, alert ve acil türündeki tüm iletileri günlüğe kaydetmesi talimatını verecektir. mesajlar.
Bir sonraki örnekte, kritik, uyarı ve acil düzeylerindeki mesajlar günlüğe kaydedilecektir.
error_log /var/www/example1.com/log/error_log crit;
Aşağıdaki yapılandırmayı göz önünde bulundurun; burada farklı düzeylerde (http ve sunucu bağlamında) hata günlüğünü tanımladık. Bir hata durumunda mesaj, hatanın ortaya çıktığı seviyeye en yakın olan yalnızca bir hata günlüğüne yazılır.
http {
log_format compression '$remote_addr - $remote_user [$time_local] '
'"$request" $status $body_bytes_sent '
'"$http_referer" "$http_user_agent" "$gzip_ratio"';
error_log /var/log/nginx/error_log crit;
server {
listen 80;
server_name example1.com;
#this logs errors messages for example1.com only
error_log /var/log/nginx/example1.error_log warn;
…...
}
server {
listen 80;
server_name example2.com;
#this logs errors messages for example2.com only
error_log /var/log/nginx/example1.error_log;
…….
}
}
Aşağıdaki yapılandırmada olduğu gibi birden fazla error_log yönergesi kullanırsanız (aynı düzey), iletiler belirtilen tüm günlüklere yazılır.
server {
listen 80;
server_name example1.com;
error_log /var/www/example1.com/log/error_log warn;
error_log /var/log/nginx/example1.error_log crit;
…...
}
Nginx'te Koşullu Günlüğü Yapılandırma
Bazı durumlarda Nginx'in mesajların koşullu günlüğünü tutmasını isteyebiliriz. Her mesajın Nginx tarafından günlüğe kaydedilmesi gerekmez, bu nedenle belirli durumlar için erişim günlüklerimizden önemsiz veya daha az önemli günlük girişlerini göz ardı edebiliriz.
Değerleri diğer değişkenlerin değerlerine bağlı olan değişkenler oluşturan ngx_http_map_module modülünü kullanabiliriz. Bir harita bloğunun içindeki parametreler (yalnızca http içeriğinde bulunması gereken), kaynak ve sonuç değerleri arasındaki eşlemeyi belirtir.
Bu tür bir ayar için, koşulun “0 ”
veya boş bir dize olarak değerlendirilmesi durumunda istek günlüğe kaydedilmeyecektir. Bu örnek, 2xx ve 3xx HTTP durum kodlarına sahip istekleri hariç tutar.
http{
map $status $condition {
~^[23] 0;
default 1;
}
server{
access_log /path/to/access.log custom if=$condition;
}
}
İşte geliştirme aşamasında bir web uygulamasında hata ayıklamaya yönelik başka bir yararlı örnek. Bu, tüm mesajları göz ardı edecek ve yalnızca hata ayıklama bilgilerini günlüğe kaydedecektir.
http{
map $info $debuggable {
default 0;
debug 1;
}
server{
……..
access_log /var/log/nginx/testapp_debug_access_log debug if=$debuggable;
#logs other requests
access_log /var/log/nginx/testapp_access.log main;
…….
}
}
Sistem günlüğüne giriş yapmak da dahil olmak üzere daha fazla bilgiyi burada bulabilirsiniz.
Şimdilik bu kadar! Bu kılavuzda Nginx'te erişim ve hata günlükleri için özel günlük kaydı formatının nasıl yapılandırılacağını açıkladık. Bu makale hakkında soru sormak veya düşüncelerinizi paylaşmak için aşağıdaki geri bildirim formunu kullanın.