Nginx
整合 nginx 日誌和 elasticsearch app-search
我正在嘗試設置一個自我管理的 docker appsearch 實例,連同 kibana 和 elasticsearch,由 uvicorn python 應用程序查詢,由 nginx 網路伺服器代理
我目前的問題是appsearch 日誌在appsearch 日誌中顯示python 預設使用者代理和IP(即python-requests/2.22.0 和LAN IP)。
我想將包含正確 IP 和遠端客戶端使用者代理的 nginx 自定義標頭轉發到在 kibana 中可以很好地查詢的 appsearch 日誌。
我注意到
output.elasticsearch.headers
可以在環境或 filebeat.yml 中設置自定義標頭。你們對此有什麼想法嗎?
謝謝你。
嗯,我終於做到了。
由於真實的客戶端 IP 和使用者代理不是靜態的,因此使用 yml 或環境變數也不是必需的。
我首先將 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;
然後在每個 uvicorn FastAPI 方法中,我添加了第一個
request
參數:from fastapi import FastAPI app = FastAPI() # ... @app.get("/search") async def search_endpoint(request: Request): # ... method implementation
search_endpoint 呼叫我的搜尋類,該類又使用 appsearch 的 python 客戶端:
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-headers =)