Я пытаюсь настроить самоуправляемый экземпляр docker appsearchвместе с kibana и elasticsearch, запрошенные приложением uvicorn python, проксируемые веб-сервером nginx
Моя текущая проблема заключается в том, что журналы поиска приложений показывают пользовательский агент python по умолчанию и IP-адрес в журналах поиска приложений (т.е. python-requests / 2.22.0 и IP-адрес LAN).
Я хотел бы перенаправить настраиваемые заголовки nginx, содержащие правильный IP-адрес и пользовательский агент удаленного клиента, в журналы поиска приложений, которые так хорошо доступны для запросов в kibana.
Я заметил, что есть output.elasticsearch.headers
которые могут быть установлены в пользовательские заголовки в среде или filebeat.yml.
У вас есть идеи по этому поводу?
Спасибо.
Что ж, наконец-то я это сделал.
Использовать yml или переменные среды было недостаточно, поскольку реальный IP-адрес клиента и пользовательский агент не были статическими.
Сначала я изменил прокси nginx.conf на это:
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;
Затем в каждом методе FastAPI uvicorn я добавил первый request
параметр:
from fastapi import FastAPI
app = FastAPI()
# ...
@app.get("/search")
async def search_endpoint(request: Request):
# ... method implementation
Search_endpoint вызывает мой класс поиска, который, в свою очередь, использует клиент python appsearch:
import elastic_app_search
# ...
client = elastic_app_search.Client(api_key = XXX, base_endpoint = YYY, use_https=False)
А затем в клиенте я обновляю заголовки:
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
Затем журналы приложения начали записывать пользовательские X-заголовки =)