1 项目配置与代码
yml 增加 prometheus 监控配置
management:
endpoints:
web:
exposure:
include: prometheus
endpoint:
prometheus:
enabled: true
下面用我的一个 Spring Cloud 项目来测试,直接在 网关模块 增加监控信息记录(注意,meterRegistry.counter 的第二个参数,即下面的 args ,由于这个 api 会将第二个参数当成键值对去处理,因此 args 的元素个数需要为偶数,不然会报错)
@Component
public class AuthGlobalFilter implements GlobalFilter, Ordered {
//...
@Autowired
private MeterRegistry meterRegistry;
@Override
public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
ServerHttpRequest request = exchange.getRequest();
if (request.getMethod() == HttpMethod.OPTIONS) {
return chain.filter(exchange);
}
String path = request.getURI().getPath();
System.out.println("网关收到请求:" + path); // 生产环境不能用这个,要用 logback
String[] args = new String[2];
args[0] = "path";
args[1] = path;
// 记录到 prometheus
meterRegistry.counter("ceevids_api", args).increment();
//...
}
//...
}
2 更新镜像,启动容器
查看容器监控
之后访问 服务网关ip:端口/actuator/prometheus
可以看到已经记录成功
3 部署 Prometheus
我已提前部署好 Node Exporter、Prometheus、Grafana,可参考我之前的博客
【K8s/Kubesphere 监控部署实战图文流程】部署 Node Exporter、Prometheus、Grafana
这里贴一下 prometheus.yml 中我的服务网关模块的配置,因为 metrics_path 默认是 /metrics,这里需要改成上文测试的后缀,
global:
scrape_interval: 30s
evaluation_interval: 30s
scrape_configs:
#...
- job_name: service_gateway
metrics_path: '/actuator/prometheus'
static_configs:
- targets: ['192.168.10.173:30000']
labels:
instance: service_gateway
下图的第四个就是我们的网关模块,已经配置成功
并且能够看到上文中的名称空间,因为我们 api 中用的 counter 方法,prometheus 会默认加个 _total 后缀
4 配置 Grafana 监控
如何配置和安装 Grafana,可参考我之前的博客
【K8s/Kubesphere 监控部署实战图文流程】部署 Node Exporter、Prometheus、Grafana
下面我们新建一个 Dashboard,或者在原有 Dashboar 上,新建一个 面板 panel,如下图,即可进行自定义监控配置
将我们的名称空间 ceevids_api_total 写上,点击 Run queries 即可查看监控,可以看到请求都被记录下来了