問題描述
Azure API Management Self-Host Gateway是否可以把請求的日誌傳送到Application Insights呢?讓它和使用Azure上託管的 Gateway一樣呢?
這是在APIM門戶上配置API,設定的Diagnostics Logs,當選擇Application Insights時,就可以把對介面請求時候所攜帶的Header/Body等資訊傳送到Applciation Insights中進行儲存並分析。
但是,在自建閘道器在K8S中,確無法傳送日誌到Applicaiton Insights,有什麼辦法呢?
問題解答
因為APIM Self-Host Gateway預設使用Application Insights的Endpoint ( https://dc.services.visualstudio.com/ ) 是Global Application Insights。而且在預設生產的YAML檔案中,初始化並沒有包含對Application Insights的設定項:
# NOTE: Before deploying to a production environment, please review the documentation -> https://aka.ms/self-hosted-gateway-production
---
apiVersion: v1
kind: ConfigMap
metadata:
name: testselfhost-env
labels:
app: testselfhost
data:
config.service.endpoint: "xxxxxxxxxx.configuration.azure-api.cn"
neighborhood.host: "testselfhost-instance-discovery"
runtime.deployment.artifact.source: "Azure Portal"
runtime.deployment.mechanism: "YAML"
runtime.deployment.orchestrator.type: "Kubernetes"
---
所以如果需要傳送請求日誌到中國區指定的Application Insights中,需要修改YAML檔案,在configMap中新增 logs.applicationinsights.endpoint: "https://dc.applicationinsights.azure.cn/v2/track" , 效果如下圖所示:
如上修改後,就能實現本地閘道器也傳送資料到Appliation Insights中。
參考資料
如何將 Azure API 管理與 Azure Application Insights 整合:https://docs.azure.cn/zh-cn/api-management/api-management-howto-app-insights?tabs=rest#enable-application-insights-logging-for-your-api
使用 YAML 將自承載閘道器部署到 Kubernetes:https://docs.azure.cn/zh-cn/api-management/how-to-deploy-self-hosted-gateway-kubernetes