Filebeat nginx определяет имя приложения через корневой контекст

В настоящее время у меня есть filebeat, читающий журналы nginx и помещающий их в logstash, я пытаюсь определить, из какого приложения поступает журнал, просматривая корневой каталог контекста URI (не уверен, что это правильный способ сделать это), но проблема это когда нет контекста root. Logstash проанализирует значение сразу после хоста.

Вот мой конфиг nginx.

server {
listen       443;
server_name  MyServer.com;
access_log /var/log/nginx/access_dev.log main if=$loggable;
error_log /var/log/nginx/error_dev.log;

ssl                  on;
ssl_certificate      ssl/bundle.pem;
ssl_certificate_key  ssl/wildcard.key;
ssl_session_timeout  5m;
proxy_ssl_verify     off;

ssl_protocols  TLSv1.2;
ssl_ciphers  ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:!aNULL;
ssl_prefer_server_ciphers   on;
add_header X-Forwarded-For $host;
add_header X-Forwarded-Proto $scheme;
add_header Host $host;

add_header 'Access-Control-Allow-Origin' '*';
add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';

location / {
    proxy_set_header X-Forwarded-Proto  $scheme;
    proxy_set_header X-Forwarded-Host $host:$server_port;
    proxy_set_header Host $host;
    proxy_pass https://app01.domain.local:443/;
}

location /applicationOne {
    proxy_set_header X-Forwarded-Proto  $scheme;
    proxy_set_header X-Forwarded-Host $host:$server_port;
    proxy_set_header Host $host;
    proxy_read_timeout 120s;
    proxy_pass https://app02.domain.local:443;
}
}

Можно ли добавить переменные в определенное место и сказать, как называется приложение? Таким образом, для местоположения / я бы добавил, скажем, "Портал", а затем в журнале nginx будет журнал "Портал" в конце?

Вот мой текущий nginx.conf

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

  log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                  '$status $body_bytes_sent "$http_referer" '
                  '"$http_user_agent" "$http_x_forwarded_for" -- 
  $sent_http_x_username';

  map $request_uri $loggable {
    default                                             1;
    ~*\.(ico|css|js|gif|jpg|jpeg|png|svg|woff|woff2|ttf|eot)$ 0;
  }

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

  sendfile        on;
  #tcp_nopush     on;

  keepalive_timeout  65;

  #gzip  on;

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

Пример того, что я прошу с портала в конце журнала.

198.143.37.12 - - [31 / Jul / 2019: 10: 44: 13 -0400] "GET / nosession HTTP / 1.1" 200 3890 "-" "Safari / 14607.2.6.1.1 CFNetwork / 978.0.7 Darwin / 18.6. 0 (x86_64) "" 199.83.71.22 "" Портал "

И если это невозможно, есть ли другие идеи о том, как решить эту проблему?

1 ответ

Я использовал подход, чтобы добавить заголовок, а затем записать этот заголовок.

В моем

location / {
  add_header x-application "App Name";
}

В nginx.conf

$sent_http_x_application

был добавлен в log_fromat

Другие вопросы по тегам