本示例演示如何为 Dubbo 实例开启指标监控,结合 Grafana 和 Prometheus 的完整部署和使用示例请参考 官方文档。
Dubbo 支持通过两种方式对外暴露 Metrics 指标给 Prometheus,具体可参见 官方文档配置说明。
本示例中,我们使用 spring-boot-actuator 的方式透出 Dubbo 指标信息,请注意本示例使用的 Dubbo 版本必须为 3.2.0-beta.6 以上。
# ...... management.server.port=18081 management.endpoints.web.base-path=/management dubbo.metrics.protocol=prometheus # 如果不使用 spring-boot-actuator,可使用下面配置开启 qos 配置 # dubbo.metrics.enable-jvm-metrics=true # dubbo.application.qos-port=22222 # dubbo.application.qos-accept-foreign-ip=true
启动 MetricsApplication,测试访问监控指标:http://localhost:18081/management/prometheus
本示例通过 kube-prometheus 构建k8s的prometheus环境
为了方便访问验证可以将alertmanager-service.yaml
grafana-service.yaml
prometheus-service.yaml
设置为NodePort
dubboPodMoitor.yaml
到 kube-prometheus
的manifests
目录。配置如下apiVersion: monitoring.coreos.com/v1 kind: PodMonitor metadata: name: podmonitor labels: app: podmonitor namespace: monitoring spec: selector: matchLabels: app-type: dubbo namespaceSelector: matchNames: - monitoring podMetricsEndpoints: - port: metrics #这里需要通过端口名绑定 path: /management/prometheus
prometheus-prometheus.yaml
添加podMonitorSelectorpodMonitorSelector: matchLabels: app: podmonitor
./Deployment.yaml
部署dubbo 应用annotations: prometheus.io/scrape: "true" prometheus.io/path: /management/prometheus prometheus.io/port: "18081"
export POD_NAME=$(kubectl get pods --namespace default -l "app=prometheus,component=server" -o jsonpath="{.items[0].metadata.name}") kubectl --namespace default port-forward $POD_NAME 9090