大数据之eureka 服务发现系统与微服务监控工具 Grafana/Prometheus

大数据阿木 发布于 2025-07-12 12 次阅读


摘要:随着微服务架构的普及,服务发现和监控成为保证系统稳定性和可扩展性的关键。本文将围绕Eureka服务发现系统与微服务监控工具(Grafana/Prometheus)展开,通过代码实现和集成,探讨如何构建一个高效、稳定的微服务监控系统。

一、Eureka服务发现系统

1. Eureka简介

Eureka是一个开源的服务发现和注册中心,由Netflix开源。它允许服务注册到Eureka服务器,并可以通过服务名来查找服务实例。Eureka由两个组件组成:Eureka Server和Eureka Client。

2. Eureka Server实现

java

import com.netflix.appinfo.InstanceInfo;


import com.netflix.discovery.EurekaServerConfig;


import com.netflix.discovery.ServerCodecs;


import com.netflix.discovery.shared.transport.EurekaTransport;


import com.netflix.discovery.shared.transport.EurekaTransportClient;


import com.netflix.discovery.shared.transport.jersey.JerseyEurekaClient;

public class EurekaServer {


public static void main(String[] args) {


EurekaServerConfig config = new EurekaServerConfig() {


@Override


public String getEurekaServerPort() {


return "8761";


}


};

ServerCodecs codecs = new ServerCodecs();

EurekaTransportClient transportClient = new JerseyEurekaClient(


new EurekaTransportClientImpl(config, codecs)


);

transportClient.start();


}


}


3. Eureka Client实现

java

import com.netflix.appinfo.InstanceInfo;


import com.netflix.discovery.EurekaClient;


import com.netflix.discovery.EurekaClientConfig;


import com.netflix.discovery.EurekaClientFactory;


import com.netflix.discovery.shared.transport.jersey.JerseyEurekaClient;

public class EurekaClient {


public static void main(String[] args) {


EurekaClientConfig config = new EurekaClientConfig() {


@Override


public String getEurekaServerServiceUrl() {


return "http://localhost:8761/eureka/";


}


};

EurekaClient client = EurekaClientFactory.create(config);


client.registerInstance(new InstanceInfo.Builder()


.setAppName("my-service")


.setInstanceId("my-service-1")


.setIpAddr("127.0.0.1")


.setDataCenterInfo(new DataCenterInfo("MyOwn", "MyOwn"))


.build());


}


}


二、微服务监控工具(Grafana/Prometheus)

1. Prometheus简介

Prometheus是一个开源监控和告警工具,可以收集和存储时间序列数据,并支持多种数据源。Grafana是一个开源的可视化平台,可以与Prometheus集成,提供丰富的可视化图表。

2. Prometheus实现

go

package main

import (


"fmt"


"net/http"


"time"

"github.com/prometheus/client_golang/prometheus"


"github.com/prometheus/client_golang/prometheus/promhttp"


)

var (


// 创建一个计数器


visits = prometheus.NewCounter(prometheus.CounterOpts{


Name: "visits_total",


Help: "Total number of visits.",


})

// 创建一个度量


visitsDuration = prometheus.NewHistogram(prometheus.HistogramOpts{


Name: "visits_duration_seconds",


Help: "Duration of a visit in seconds.",


Buckets: []float64{0.1, 0.5, 1, 2, 5, 10},


})


)

func main() {


// 注册度量


prometheus.MustRegister(visits)


prometheus.MustRegister(visitsDuration)

http.HandleFunc("/", func(w http.ResponseWriter, r http.Request) {


start := time.Now()


visits.Inc()


visitsDuration.Observe(time.Since(start).Seconds())


fmt.Fprintf(w, "Hello, world!")


})

http.Handle("/metrics", promhttp.Handler())


http.ListenAndServe(":9115", nil)


}


3. Grafana实现

(1)创建Grafana数据源

- 在Grafana中,选择“Data Sources”选项卡。

- 点击“Add data source”按钮,选择“Prometheus”。

- 输入Prometheus服务地址,如`http://localhost:9115`。

(2)创建Grafana仪表板

- 在Grafana中,选择“Dashboards”选项卡。

- 点击“Create”按钮,选择“Import”。

- 输入仪表板JSON文件内容,如下所示:

json

{


"title": "Prometheus Dashboard",


"time": {


"from": "now-1h",


"to": "now"


},


"timezone": "browser",


"panels": [


{


"type": "graph",


"title": "Visits",


"datasource": "prometheus",


"yaxis": {


"label": "Visits",


"min": 0,


"max": null,


"format": "short"


},


"xaxis": {


"label": "Time",


"show": true


},


"legend": {


"show": true,


"placement": "auto"


},


"links": [],


"targets": [


{


"expr": "visits_total",


"format": "time_series"


}


]


}


]


}


三、总结

本文通过代码实现和集成,介绍了Eureka服务发现系统与微服务监控工具(Grafana/Prometheus)的构建方法。在实际项目中,可以根据需求调整和优化相关配置,以确保系统稳定性和可扩展性。