blob: 54975ffdb19e273a2c24a87a55c414a6b77733d3 [file] [log] [blame] [view]
# metrics for dubbo-go
This example demonstrates the metrics usage of dubbo-go as an RPC framework. Check [Quick Start][] on our official website for detailed explanation.
## Contents
- server/main.go - is the main definition of the service, handler and rpc server
- client/main.go - is the rpc client
- proto - contains the protobuf definition of the API
## How to run
### Run server
```shell
go run ./go-server/cmd/main.go
```
test server work as expected:
```shell
curl \
--header "Content-Type: application/json" \
--data '{"name": "Dubbo"}' \
http://localhost:20000/greet.GreetService/Greet
```
### Run client
```shell
go run ./go-client/cmd/main.go
```
## deploy to local
install prometheus and open prometheus config file `prometheus.yml`, write the config like this
```yaml
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
![datasource.png](./assert/datasource.png)
open Home / Dashboards click New】【importand enter 19294 click Load
![import](./assert/import.png)
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
![json.png](./assert/import-json.png)
![datasource.png](./assert/import-datasource.png)
click 【Import】button and you will see the Dubbo Observability dashboard,enjoy it
![databoard](./assert/dashboard.png)
## Deploy to Kubernetes
#### kube-prometheus
install prometheus in k8s [kube-prometheus](https://github.com/prometheus-operator/kube-prometheus)
Set `prometheus-service.yaml` type to NodePort
1. add `dubboPodMoitor.yaml` to `kube-prometheus` `manifests` dir, The content is as follows
```yaml
apiVersion: 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
```
2. `kubectl apply -f Deployment.yaml`
3. open prometheus web page such as http://localhost:9090/targets
![podmonitor.png](./assert/podmonitor.png)