指南: 设置 Azure 监视器以搜索日志并收集指标

使用Azure Monitor为Azure Kubernetes Service(AKS) 启用Dapr度量和日志

先决条件

使用config map启用 Prometheus 度量抓取

  1. 请确保正在运行 omsagents
  1. $ kubectl get pods -n kube-system
  2. NAME READY STATUS RESTARTS AGE
  3. ...
  4. $ kubectl get pods -n kube-system
  5. NAME READY STATUS RESTARTS AGE
  6. ...
  7. omsagent-75qjs 1/1 Running 1 44h
  8. omsagent-c7c4t 1/1 Running 0 44h
  9. omsagent-rs-74f488997c-dshpx 1/1 Running 1 44h
  10. omsagent-smtk7 1/1 Running 1 44h
  11. ...
  1. 应用config map来启用Prometheus metrics endpoint抓取。

您可以使用 azm-config-map.yaml 来启用 Prometheus 度量端点抓取。

如果你安装 Dapr 到不同的命名空间, 你需要更改 monitor_kubernetes_pod_namespaces 数组值。 例如:

  1. ...
  2. ...
  3. prometheus-data-collection-settings: |-
  4. [prometheus_data_collection_settings.cluster]
  5. interval = "1m"
  6. monitor_kubernetes_pods = true
  7. monitor_kubernetes_pods_namespaces = ["dapr-system", "default"]
  8. [prometheus_data_collection_settings.node]
  9. interval = "1m"
  10. ...

应用config map:

  1. kubectl apply -f ./azm-config.map.yaml

使用 JSON 格式化日志安装 Dapr

  1. 使用 JSON 格式化日志启用 Dapr
  1. helm install dapr dapr/dapr --namespace dapr-system --set global.logAsJson=true
  1. 启用 JSON 格式化日志到 Dapr sidecar 并添加 Prometheus 注释。

注意: OMS Agent仅在replicaset具有Prometheus注释时才抓取指标。

添加 dapr.io/log-as-json: "true" annotation 到你的部署yaml.

示例:

  1. apiVersion: apps/v1
  2. kind: Deployment
  3. metadata:
  4. name: pythonapp
  5. namespace: default
  6. labels:
  7. app: python
  8. spec:
  9. replicas: 1
  10. selector:
  11. matchLabels:
  12. app: python
  13. template:
  14. metadata:
  15. labels:
  16. app: python
  17. annotations:
  18. dapr.io/enabled: "true"
  19. dapr.io/app-id: "pythonapp"
  20. dapr.io/log-as-json: "true"
  21. prometheus.io/scrape: "true"
  22. prometheus.io/port: "9090"
  23. prometheus.io/path: "/"
  24. ...

用 Azure Monitor 搜索度量和日志

  1. 前往Azure Monitor

  2. 搜索 Dapr 日志

下面是一个示例查询,用于解析JSON格式的日志和来自Dapr系统进程的查询日志。

  1. ContainerLog
  2. | extend parsed=parse_json(LogEntry)
  3. | project Time=todatetime(parsed['time']), app_id=parsed['app_id'], scope=parsed['scope'],level=parsed['level'], msg=parsed['msg'], type=parsed['type'], ver=parsed['ver'], instance=parsed['instance']
  4. | where level != ""
  5. | sort by Time
  1. 搜索度量

这个语句查询process_resident_memory_bytes Prometheus度量的Dapr系统进程,并呈现时间图

  1. InsightsMetrics
  2. | where Namespace == "prometheus" and Name == "process_resident_memory_bytes"
  3. | extend tags=parse_json(Tags)
  4. | project TimeGenerated, Name, Val, app=tostring(tags['app'])
  5. | summarize memInBytes=percentile(Val, 99) by bin(TimeGenerated, 1m), app
  6. | where app startswith "dapr-"
  7. | render timechart

参考资料