Nginx

整合 nginx 日誌和 elasticsearch app-search

  • January 13, 2020

我正在嘗試設置一個自我管理的 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 =)

引用自:https://serverfault.com/questions/998764