Integrando logs nginx e pesquisa de aplicativo elasticsearch

Integrando logs nginx e pesquisa de aplicativo elasticsearch

Estou tentando configurar uminstância docker appsearch autogerenciada, junto com kibana e elasticsearch, consultado por um aplicativo uvicorn python, proxy de um servidor web nginx

Meu problema atual é que os logs do appsearch mostram o agente de usuário padrão do python e o IP nos logs do appsearch (ou seja, python-requests/2.22.0 e um IP da LAN).

Gostaria de encaminhar os cabeçalhos personalizados nginx que contêm o IP correto e o agente do usuário do cliente remoto para os logs do appsearch que são tão bem consultáveis ​​no kibana.

Percebi que existe um output.elasticsearch.headersque pode ser definido para cabeçalhos personalizados no ambiente ou no filebeat.yml.

Vocês têm alguma idéia sobre isso?

Obrigado.

Responder1

Bem, finalmente consegui.

Não foi necessário nem suficiente usar variáveis ​​​​yml ou de ambiente, pois o IP do cliente real e o agente do usuário não eram estáticos.

Mudei primeiro o proxy nginx.conf para este:

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;

Então, em cada método FastAPI do uvicorn, adicionei um primeiro requestparâmetro:

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

O search_endpoint chama minha classe de pesquisa que, por sua vez, usa o cliente python do appsearch:

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

E então no cliente eu atualizo os cabeçalhos:

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

Em seguida, os logs do aplicativo começaram a registrar os cabeçalhos X personalizados =)

informação relacionada