Integración de registros de nginx y búsqueda de aplicaciones elasticsearch

Integración de registros de nginx y búsqueda de aplicaciones elasticsearch

Estoy intentando configurar uninstancia de búsqueda de aplicaciones acoplables autoadministrada, junto con kibana y elasticsearch, consultado por una aplicación uvicorn python, proxy por un servidor web nginx

Mi problema actual es que los registros de búsqueda de aplicaciones muestran el agente de usuario predeterminado de Python y la IP en los registros de búsqueda de aplicaciones (es decir, python-requests/2.22.0 y una IP de LAN).

Me gustaría reenviar los encabezados personalizados de nginx que contienen la IP correcta y el agente de usuario del cliente remoto a los registros de búsqueda de aplicaciones que se pueden consultar tan fácilmente en kibana.

Me di cuenta de que existe un output.elasticsearch.headersencabezado que se puede configurar en el entorno o filebeat.yml.

¿Tienen alguna idea sobre esto?

Gracias.

Respuesta1

Bueno, finalmente lo he logrado.

No fue necesario ni suficiente usar yml o variables de entorno ya que la IP real del cliente y el agente de usuario no eran estáticos.

Primero cambié el proxy nginx.conf a esto:

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-User-Agent $http_user_agent;

Luego, en cada método FastAPI de uvicorn agregué un primer requestparámetro:

from fastapi import FastAPI
app = FastAPI()
# ...
@app.get("/search")
async def search_endpoint(request: Request):
# ... method implementation 

Search_endpoint llama a mi clase de búsqueda que a su vez utiliza el cliente Python de appsearch:

import elastic_app_search
# ...
client = elastic_app_search.Client(api_key = XXX, base_endpoint = YYY, use_https=False)

Y luego en el cliente actualizo los encabezados:

x_headers = {
    'Connection': 'close',
    'X-Forwarded-For': request.headers['X-Forwarded-For'],
    'X-User-Agent': request.headers['X-User-Agent']
}
client.session.session.headers.update(x_headers)
# For current appsearch python client the repeated name was necessary

Luego, los registros de la aplicación comenzaron a registrar los encabezados X personalizados =)

información relacionada