Dubbo supports the collection of runtime Metrics indicators and their integration with Prometheus and Grafana systems to achieve visual monitoring of microservice clusters. Below is a specific usage example. You can view the complete source code of the example.
go run ./go-server/cmd/main.go
test server work as expected:
curl \
--header "Content-Type: application/json" \
--data '{"name": "Dubbo"}' \
http://localhost:20000/greet.GreetService/Greet
go run ./go-client/cmd/main.go
install prometheus and open prometheus config file prometheus.yml
, write the config like this
global:
evaluation_interval: 15s
scrape_interval: 15s
scrape_configs:
- job_name: dubbo-provider
scrape_interval: 15s
scrape_timeout: 5s
metrics_path: /prometheus
static_configs:
- targets: ['localhost:9099']
- job_name: dubbo-consumer
scrape_interval: 15s
scrape_timeout: 5s
metrics_path: /prometheus
static_configs:
- targets: ['localhost:9097']
install grafana and open grafana web page like localhost:3000
open: 【Home / Connections / Data sources】
click 【Add new data source】
select Prometheus
enter 【Prometheus server URL】 like http://localhost:9090
and click 【Save & test】
open 【Home / Dashboards 】click 【New】【import】and enter 19294 click Load
if your grafana can’t access internet you can open https://grafana.com/grafana/dashboards/19294-dubbo-observability/
and click 【Download JSON】
paste the JSON
click 【Import】button and you will see the Dubbo Observability dashboard, enjoy it
install prometheus in k8s kube-prometheus
Set prometheus-service.yaml
type to NodePort
dubboPodMoitor.yaml
to kube-prometheus
manifests
dir, The content is as followsapiVersion: monitoring.coreos.com/v1
kind: PodMonitor
metadata:
name: podmonitor
labels:
app: podmonitor
namespace: monitoring
spec:
namespaceSelector:
matchNames:
- dubbo-system
selector:
matchLabels:
app-type: dubbo
podMetricsEndpoints:
- port: metrics # ref to dubbo-app port name metrics
path: /prometheus
---
# rbac
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
namespace: dubbo-system
name: pod-reader
rules:
- apiGroups: [""]
resources: ["pods"]
verbs: ["get", "list", "watch"]
---
# rbac
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
name: pod-reader-binding
namespace: dubbo-system
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: Role
name: pod-reader
subjects:
- kind: ServiceAccount
name: prometheus-k8s
namespace: monitoring
kubectl apply -f Deployment.yaml