如何在 java 程序中收集 Prometheus 指标?
Posted
技术标签:
【中文标题】如何在 java 程序中收集 Prometheus 指标?【英文标题】:How to collect the Prometheus metrics in a java program? 【发布时间】:2020-10-31 01:27:49 【问题描述】:我搜索了大部分文章,但没有找到我预期的解决方案。我是普罗米修斯的新手。我需要让我的 java 程序收集 Prometheus 指标。因此,需要帮助才能通过我的 java 程序读取或获取 Prometheus 指标。
任何帮助或建议都会有所帮助。
谢谢
【问题讨论】:
你在使用框架吗? Java EE、Spring、...?没有任何细节,我只能建议看一些示例项目,或者使用 JHipster 设置一个带有指标的项目并在那里查看。 我正在使用 spring-boot 应用程序,在 pod 中运行。 【参考方案1】:如果您使用的是 Spring boot 2.1.5.RELEASE,那么
-
添加依赖执行器和 micrometer-prometheus
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> <dependency> <groupId>io.micrometer</groupId> <artifactId>micrometer-registry-prometheus</artifactId> </dependency>
-
添加配置以启用对端点 /actuator/prometheus 的访问
management: endpoints: web: exposure: include: '*'
-
尝试请求
http://domain:port/actuator/prometheus
编辑 对于使用 kind 部署的 kubernetes:
apiVersion: apps/v1
kind: Deployment
metadata:
name: myAppName
spec:
replicas: 1
selector:
matchLabels:
app: myAppName
template:
metadata:
labels:
app: myAppName
annotations:
prometheus.io/scrape: "true"
prometheus.io/port: "8091"
prometheus.io/path: "/actuator/prometheus"
spec:
containers:
- name: myAppName
image: images.com/app-service:master
imagePullPolicy: Always
ports:
- containerPort: 8091
env:
- name: INSTANCE_IP
valueFrom:
fieldRef:
fieldPath: status.podIP
- name: SPRING_PROFILES_ACTIVE
value: "prod"
- name: CONFIG_SERVER_ADDRESS
value: "http://config-server:8888"
livenessProbe:
failureThreshold: 3
httpGet:
path: /actuator/health
port: 8091
scheme: HTTP
initialDelaySeconds: 45
periodSeconds: 10
successThreshold: 1
timeoutSeconds: 5
readinessProbe:
failureThreshold: 5
httpGet:
path: /actuator/health
port: 8091
scheme: HTTP
initialDelaySeconds: 30
periodSeconds: 10
successThreshold: 1
timeoutSeconds: 5
nodeSelector:
servicetype: mvp-cluster
【讨论】:
出现错误错误:验证“src/main/resources/xxx-autoscaler-deployment.yaml”时出错:验证数据时出错:[ValidationError(Deployment.spec.template):未知字段“livenessProbe” io.k8s.api.core.v1.PodTemplateSpec,ValidationError(Deployment.spec.template):io.k8s.api.core.v1.PodTemplateSpec 中的未知字段“nodeSelector”,ValidationError(Deployment.spec.template):未知字段io.k8s.api.core.v1.PodTemplateSpec 中的“readinessProbe”];如果您选择忽略这些错误,请使用 --validate=false 关闭验证 @JDGuide 使用什么 apiVersion 和 kind(Pod ?)? livenessProbe 和 readinessProbe 它们是可选的,您可以删除它们以测试您的应用程序 我已经删除并测试了。将更新正在发生的事情。 如果 class 是 pojo 而不是 spring bean 怎么办?【参考方案2】:有很多方法可以做到这一点请参考https://github.com/prometheus/client_java
【讨论】:
是的。但是,我找不到合适的使用。以上是关于如何在 java 程序中收集 Prometheus 指标?的主要内容,如果未能解决你的问题,请参考以下文章
如何编写一个在文件中收集值的 Prometheus 导出器?
如何使用联合从多个 Prometheus 实例(每个使用 instance="localhost:9090")中收集 Prometheus 的指标
Springboot 网关 Prometheus 收集海量数据