Skip to content

Commit 2eb4409

Browse files
authored
feat: add deploy manifests and fix metric and trace dashboard bugs (#1387)
* feat: add monitoring/dubbo-samples-shop/dubbo-system resources * fix: metric, trace dashboard bug
1 parent f61071e commit 2eb4409

108 files changed

Lines changed: 112913 additions & 87 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

app/dubbo-admin/dubbo-admin.yaml

Lines changed: 13 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -15,30 +15,24 @@
1515

1616
mode: zone
1717
console:
18-
grafana:
19-
prometheus:
20-
jaeger:
21-
dashboards:
22-
metric:
23-
application:
24-
instance:
25-
service:
26-
trace:
27-
application:
28-
instance:
29-
service:
30-
log:
31-
application:
32-
instance:
33-
service:
18+
grafana: http://101.34.253.152:30300/
19+
prometheus: http://101.34.253.152:30900/
20+
metricDashboards:
21+
application: http://101.34.253.152:30300/grafana/d/a0b114ca-edf7-4dfe-ac2c-34a4fc545fed
22+
instance: http://101.34.253.152:30300/grafana/d/dcf5defe-d198-4704-9edf-6520838880e9
23+
service: http://101.34.253.152:30300/grafana/d/ec689613-b4a1-45b1-b8bd-9d557059f970
24+
traceDashboards:
25+
application: http://101.34.253.152:30300/grafana/d/e968a89b-f03d-42e3-8ad3-930ae815cb0f
26+
instance: http://101.34.253.152:30300/grafana/d/f5f48f75-13ec-489b-88ae-635ae38d8618
27+
service: http://101.34.253.152:30300/grafana/d/b2e178fb-ada3-4d5e-9f54-de99e7f07662
3428
auth:
3529
user: admin
3630
password: dubbo@2025
3731
expirationTime: 3600
3832
store:
39-
# type: memory
40-
type: mysql
41-
address: root:123456@tcp(127.0.0.1:23306)/dubbo-admin?charset=utf8mb4&parseTime=True&loc=Asia%2FShanghai
33+
type: memory
34+
# type: mysql
35+
# address: root:123456@tcp(127.0.0.1:23306)/dubbo-admin?charset=utf8mb4&parseTime=True&loc=Asia%2FShanghai
4236
discovery:
4337
- type: nacos2
4438
name: localhost-nacos

pkg/common/bizerror/error.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@ const (
4545
JsonError ErrorCode = "JsonError"
4646
YamlError ErrorCode = "YamlError"
4747
NotFoundError ErrorCode = "NotFoundError"
48+
NetWorkError ErrorCode = "NetWorkError"
4849
)
4950

5051
type bizError struct {

pkg/config/console/config.go

Lines changed: 17 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -19,25 +19,36 @@ package console
1919

2020
import (
2121
"errors"
22+
"net/url"
2223

24+
"github.com/duke-git/lancet/v2/strutil"
2325
"go.uber.org/multierr"
2426

27+
"github.com/apache/dubbo-admin/pkg/common/bizerror"
2528
"github.com/apache/dubbo-admin/pkg/config"
2629
"github.com/apache/dubbo-admin/pkg/config/console/auth"
2730
. "github.com/apache/dubbo-admin/pkg/config/console/observability"
2831
)
2932

3033
type Config struct {
3134
config.BaseConfig
32-
Port int `json:"port" envconfig:"DUBBO_ADMIN_PORT"`
33-
MetricDashboards *MetricDashboardConfig `json:"metricDashboards"`
34-
TraceDashboards *TraceDashboardConfig `json:"traceDashboards"`
35-
Prometheus string `json:"prometheus"`
36-
Grafana string `json:"grafana"`
37-
Auth *auth.Config `json:"auth"`
35+
Port int `json:"port" envconfig:"DUBBO_ADMIN_PORT"`
36+
MetricDashboards *MetricDashboardConfig `json:"metricDashboards"`
37+
TraceDashboards *TraceDashboardConfig `json:"traceDashboards"`
38+
Prometheus string `json:"prometheus"`
39+
Grafana string `json:"grafana"`
40+
Auth *auth.Config `json:"auth"`
41+
PrometheusBaseURL *url.URL
3842
}
3943

4044
func (s *Config) PostProcess() error {
45+
if strutil.IsNotBlank(s.Prometheus) {
46+
prometheusBaseURL, err := url.Parse(s.Prometheus)
47+
if err != nil {
48+
return bizerror.Wrap(err, bizerror.ConfigError, "invalid prometheus url")
49+
}
50+
s.PrometheusBaseURL = prometheusBaseURL
51+
}
4152
return multierr.Combine(
4253
s.MetricDashboards.PostProcess(),
4354
s.TraceDashboards.PostProcess(),

pkg/config/console/observability/config.go

Lines changed: 6 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@ import (
2222
"strings"
2323

2424
"github.com/pkg/errors"
25-
"go.uber.org/multierr"
2625

2726
"github.com/apache/dubbo-admin/pkg/config"
2827
)
@@ -31,54 +30,22 @@ import (
3130
type MetricDashboardConfig struct {
3231
config.BaseConfig
3332
// application level metrics panel
34-
Application DashboardConfig `json:"application"`
33+
Application string `json:"application"`
3534
// instance level metrics panel
36-
Instance DashboardConfig `json:"instance"`
35+
Instance string `json:"instance"`
3736
// service level metrics panel
38-
Service DashboardConfig `json:"service"`
39-
}
40-
41-
func (c *MetricDashboardConfig) PostProcess() error {
42-
return multierr.Combine(
43-
c.Application.PostProcess(),
44-
c.Instance.PostProcess(),
45-
c.Service.PostProcess(),
46-
)
47-
}
48-
49-
func (c *MetricDashboardConfig) Validate() error {
50-
return multierr.Combine(
51-
c.Application.Validate(),
52-
c.Instance.Validate(),
53-
c.Service.Validate(),
54-
)
37+
Service string `json:"service"`
5538
}
5639

5740
// TraceDashboardConfig are grafana dashboards for traces display
5841
type TraceDashboardConfig struct {
5942
config.BaseConfig
6043
// application level traces panel
61-
Application DashboardConfig `json:"application"`
44+
Application string `json:"application"`
6245
// instance level traces panel
63-
Instance DashboardConfig `json:"instance"`
46+
Instance string `json:"instance"`
6447
// service level traces panel
65-
Service DashboardConfig `json:"service"`
66-
}
67-
68-
func (c *TraceDashboardConfig) PostProcess() error {
69-
return multierr.Combine(
70-
c.Application.PostProcess(),
71-
c.Instance.PostProcess(),
72-
c.Service.PostProcess(),
73-
)
74-
}
75-
76-
func (c *TraceDashboardConfig) Validate() error {
77-
return multierr.Combine(
78-
c.Application.Validate(),
79-
c.Instance.Validate(),
80-
c.Service.Validate(),
81-
)
48+
Service string `json:"service"`
8249
}
8350

8451
// DashboardConfig grafana dashboard config TODO add dynamic variables

pkg/console/handler/observability.go

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -44,13 +44,13 @@ func GetMetricDashBoard(ctx consolectx.Context, dim Dimension) gin.HandlerFunc {
4444
switch dim {
4545
case AppDimension:
4646
req = &model.AppDashboardReq{}
47-
url = ctx.Config().Console.MetricDashboards.Application.BaseURL
47+
url = ctx.Config().Console.MetricDashboards.Application
4848
case InstanceDimension:
4949
req = &model.InstanceDashboardReq{}
50-
url = ctx.Config().Console.MetricDashboards.Instance.BaseURL
50+
url = ctx.Config().Console.MetricDashboards.Instance
5151
case ServiceDimension:
5252
req = &model.ServiceDashboardReq{}
53-
url = ctx.Config().Console.MetricDashboards.Service.BaseURL
53+
url = ctx.Config().Console.MetricDashboards.Service
5454
}
5555
if err := c.ShouldBindQuery(req); err != nil {
5656
c.JSON(http.StatusBadRequest, model.NewErrorResp(err.Error()))
@@ -71,13 +71,13 @@ func GetTraceDashBoard(ctx consolectx.Context, dim Dimension) gin.HandlerFunc {
7171
switch dim {
7272
case AppDimension:
7373
req = &model.AppDashboardReq{}
74-
url = ctx.Config().Console.TraceDashboards.Application.BaseURL + "?var-application="
74+
url = ctx.Config().Console.TraceDashboards.Application
7575
case InstanceDimension:
7676
req = &model.InstanceDashboardReq{}
77-
url = ctx.Config().Console.TraceDashboards.Instance.BaseURL + "?var-instance="
77+
url = ctx.Config().Console.TraceDashboards.Instance
7878
case ServiceDimension:
7979
req = &model.ServiceDashboardReq{}
80-
url = ctx.Config().Console.TraceDashboards.Service.BaseURL + "?var-service="
80+
url = ctx.Config().Console.TraceDashboards.Service
8181
}
8282
if err := c.ShouldBindQuery(req); err != nil {
8383
c.JSON(http.StatusBadRequest, model.NewErrorResp(err.Error()))

pkg/console/handler/prometheus.go

Lines changed: 22 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -18,11 +18,9 @@
1818
package handler
1919

2020
import (
21+
"io"
2122
"net/http"
22-
"net/http/httputil"
23-
"net/url"
2423

25-
"github.com/duke-git/lancet/v2/strutil"
2624
"github.com/gin-gonic/gin"
2725

2826
"github.com/apache/dubbo-admin/pkg/common/bizerror"
@@ -32,24 +30,31 @@ import (
3230

3331
func PromQL(ctx consolectx.Context) gin.HandlerFunc {
3432
return func(c *gin.Context) {
35-
query := c.Request.URL.Query().Get("query")
36-
values := url.Values{}
37-
values.Add("query", query)
38-
promBaseUrl := ctx.Config().Console.Prometheus
39-
if strutil.IsBlank(promBaseUrl) {
33+
promBaseUrl := ctx.Config().Console.PrometheusBaseURL
34+
if promBaseUrl == nil {
4035
c.JSON(http.StatusOK, model.NewBizErrorResp(
4136
bizerror.New(bizerror.ConfigError, "Please configure prometheus url to retrieve metrics")))
4237
return
4338
}
44-
promUrl := promBaseUrl + "/api/v1/query?" + values.Encode()
45-
proxyUrl, _ := url.Parse(promUrl)
46-
director := func(req *http.Request) {
47-
req.URL.Scheme = proxyUrl.Scheme
48-
req.URL.Host = proxyUrl.Host
49-
req.Host = proxyUrl.Host
50-
req.URL.Path = proxyUrl.Path
39+
40+
u := *promBaseUrl
41+
u.RawQuery = c.Request.URL.RawQuery
42+
u.Path = "/api/v1/query"
43+
s := u.String()
44+
resp, err := http.Get(s)
45+
if err != nil {
46+
c.JSON(http.StatusOK, model.NewBizErrorResp(
47+
bizerror.New(bizerror.NetWorkError, err.Error())))
48+
return
49+
}
50+
defer resp.Body.Close()
51+
52+
body, err := io.ReadAll(resp.Body)
53+
if err != nil {
54+
c.JSON(http.StatusOK, model.NewBizErrorResp(
55+
bizerror.New(bizerror.NetWorkError, err.Error())))
56+
return
5157
}
52-
proxy := &httputil.ReverseProxy{Director: director}
53-
proxy.ServeHTTP(c.Writer, c.Request)
58+
c.Data(http.StatusOK, resp.Header.Get("Content-Type"), body)
5459
}
5560
}

0 commit comments

Comments
 (0)