parent
7912ac0623
commit
1e68f99d11
@ -1,6 +1,8 @@
|
|||||||
prometheus:
|
prometheus:
|
||||||
# Enable or disable Prometheus monitoring
|
# Enable or disable Prometheus monitoring
|
||||||
enable: true
|
enable: true
|
||||||
|
# autoSetPorts indicates whether to automatically set the ports
|
||||||
|
autoSetPorts: true
|
||||||
# List of ports that Prometheus listens on; each port corresponds to an instance of monitoring. Ensure these are managed accordingly
|
# List of ports that Prometheus listens on; each port corresponds to an instance of monitoring. Ensure these are managed accordingly
|
||||||
# Because four instances have been launched, four ports need to be specified
|
# It will only take effect when autoSetPorts is set to false.
|
||||||
ports: [ 12020, 12021, 12022, 12023, 12024, 12025, 12026, 12027, 12028, 12029, 12030, 12031, 12032, 12033, 12034, 12035 ]
|
ports: [ 12020, 12021, 12022, 12023, 12024, 12025, 12026, 12027, 12028, 12029, 12030, 12031, 12032, 12033, 12034, 12035 ]
|
||||||
|
@ -0,0 +1,114 @@
|
|||||||
|
package api
|
||||||
|
|
||||||
|
import (
|
||||||
|
"encoding/json"
|
||||||
|
"net/http"
|
||||||
|
|
||||||
|
"github.com/gin-gonic/gin"
|
||||||
|
"github.com/openimsdk/open-im-server/v3/pkg/common/config"
|
||||||
|
"github.com/openimsdk/open-im-server/v3/pkg/common/prommetrics"
|
||||||
|
"github.com/openimsdk/tools/apiresp"
|
||||||
|
"github.com/openimsdk/tools/discovery"
|
||||||
|
"github.com/openimsdk/tools/discovery/etcd"
|
||||||
|
"github.com/openimsdk/tools/errs"
|
||||||
|
"github.com/openimsdk/tools/log"
|
||||||
|
clientv3 "go.etcd.io/etcd/client/v3"
|
||||||
|
)
|
||||||
|
|
||||||
|
type PrometheusDiscoveryApi struct {
|
||||||
|
config *Config
|
||||||
|
client *clientv3.Client
|
||||||
|
}
|
||||||
|
|
||||||
|
func NewPrometheusDiscoveryApi(cfg *Config, client discovery.SvcDiscoveryRegistry) *PrometheusDiscoveryApi {
|
||||||
|
api := &PrometheusDiscoveryApi{
|
||||||
|
config: cfg,
|
||||||
|
}
|
||||||
|
if cfg.Discovery.Enable == config.ETCD {
|
||||||
|
api.client = client.(*etcd.SvcDiscoveryRegistryImpl).GetClient()
|
||||||
|
}
|
||||||
|
return api
|
||||||
|
}
|
||||||
|
|
||||||
|
func (p *PrometheusDiscoveryApi) Enable(c *gin.Context) {
|
||||||
|
if p.config.Discovery.Enable != config.ETCD {
|
||||||
|
c.JSON(http.StatusOK, []struct{}{})
|
||||||
|
c.Abort()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (p *PrometheusDiscoveryApi) discovery(c *gin.Context, key string) {
|
||||||
|
eResp, err := p.client.Get(c, prommetrics.BuildDiscoveryKey(key))
|
||||||
|
if err != nil {
|
||||||
|
// Log and respond with an error if preparation fails.
|
||||||
|
apiresp.GinError(c, errs.WrapMsg(err, "etcd get err"))
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if len(eResp.Kvs) == 0 {
|
||||||
|
c.JSON(http.StatusOK, []*prommetrics.Target{})
|
||||||
|
}
|
||||||
|
|
||||||
|
var (
|
||||||
|
resp = &prommetrics.RespTarget{
|
||||||
|
Targets: make([]string, 0, len(eResp.Kvs)),
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
for i := range eResp.Kvs {
|
||||||
|
var target prommetrics.Target
|
||||||
|
err = json.Unmarshal(eResp.Kvs[i].Value, &target)
|
||||||
|
if err != nil {
|
||||||
|
log.ZError(c, "prometheus unmarshal err", errs.Wrap(err))
|
||||||
|
}
|
||||||
|
resp.Targets = append(resp.Targets, target.Target)
|
||||||
|
if resp.Labels == nil {
|
||||||
|
resp.Labels = target.Labels
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
c.JSON(200, []*prommetrics.RespTarget{resp})
|
||||||
|
}
|
||||||
|
|
||||||
|
func (p *PrometheusDiscoveryApi) Api(c *gin.Context) {
|
||||||
|
p.discovery(c, prommetrics.APIKeyName)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (p *PrometheusDiscoveryApi) User(c *gin.Context) {
|
||||||
|
p.discovery(c, p.config.Share.RpcRegisterName.User)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (p *PrometheusDiscoveryApi) Group(c *gin.Context) {
|
||||||
|
p.discovery(c, p.config.Share.RpcRegisterName.Group)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (p *PrometheusDiscoveryApi) Msg(c *gin.Context) {
|
||||||
|
p.discovery(c, p.config.Share.RpcRegisterName.Msg)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (p *PrometheusDiscoveryApi) Friend(c *gin.Context) {
|
||||||
|
p.discovery(c, p.config.Share.RpcRegisterName.Friend)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (p *PrometheusDiscoveryApi) Conversation(c *gin.Context) {
|
||||||
|
p.discovery(c, p.config.Share.RpcRegisterName.Conversation)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (p *PrometheusDiscoveryApi) Third(c *gin.Context) {
|
||||||
|
p.discovery(c, p.config.Share.RpcRegisterName.Third)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (p *PrometheusDiscoveryApi) Auth(c *gin.Context) {
|
||||||
|
p.discovery(c, p.config.Share.RpcRegisterName.Auth)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (p *PrometheusDiscoveryApi) Push(c *gin.Context) {
|
||||||
|
p.discovery(c, p.config.Share.RpcRegisterName.Push)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (p *PrometheusDiscoveryApi) MessageGateway(c *gin.Context) {
|
||||||
|
p.discovery(c, p.config.Share.RpcRegisterName.MessageGateway)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (p *PrometheusDiscoveryApi) MessageTransfer(c *gin.Context) {
|
||||||
|
p.discovery(c, prommetrics.MessageTransferKeyName)
|
||||||
|
}
|
@ -0,0 +1,31 @@
|
|||||||
|
package prommetrics
|
||||||
|
|
||||||
|
import "fmt"
|
||||||
|
|
||||||
|
const (
|
||||||
|
APIKeyName = "api"
|
||||||
|
MessageTransferKeyName = "message-transfer"
|
||||||
|
)
|
||||||
|
|
||||||
|
type Target struct {
|
||||||
|
Target string `json:"target"`
|
||||||
|
Labels map[string]string `json:"labels"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type RespTarget struct {
|
||||||
|
Targets []string `json:"targets"`
|
||||||
|
Labels map[string]string `json:"labels"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func BuildDiscoveryKey(name string) string {
|
||||||
|
return fmt.Sprintf("%s/%s/%s", "openim", "prometheus_discovery", name)
|
||||||
|
}
|
||||||
|
|
||||||
|
func BuildDefaultTarget(host string, ip int) Target {
|
||||||
|
return Target{
|
||||||
|
Target: fmt.Sprintf("%s:%d", host, ip),
|
||||||
|
Labels: map[string]string{
|
||||||
|
"namespace": "default",
|
||||||
|
},
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in new issue