Интеграция журналов nginx и поиска приложений elasticsearch

Я пытаюсь настроить самоуправляемый экземпляр docker appsearch вместе с kibana и elasticsearch, запрашиваемый приложением uvicorn python, проксируемый веб-сервером nginx

Моя текущая проблема заключается в том, что Журналы appsearch показывают пользовательский агент python по умолчанию и IP в журналах appsearch (например, python-requests / 2.22.0 и IP-адрес LAN).

Я хотел бы переслать пользовательские заголовки nginx, которые содержат правильный IP-адрес и пользовательский агент удаленного клиента, в журналы поиска приложений, которые так хорошо доступны для запросов в кибане.

Я заметил, что есть output.elasticsearch.headers , которые можно установить для пользовательских заголовков в среде или filebeat .yml.

Ребята, у вас есть идеи по этому поводу?

Спасибо.

0
задан 13 January 2020 в 22:20
1 ответ

Наконец-то я это сделал.

Не было необходимости ни использовать yml, ни переменные окружения, так как реальный IP клиента и пользовательский агент не были статическими.

Сначала я поменял nginx. conf proxy к этому:

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;

Затем в каждый метод uvicorn FastAPI я добавил первый параметр request:

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

Точка search_endpoint вызывает мой класс поиска, который в свою очередь использует питоновый клиент 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-заголовков =)

.
0
ответ дан 14 January 2020 в 23:33

Теги

Похожие вопросы