apiVersion: apps/v1
kind: Deployment
metadata:
name: expose-prometheus-demo
labels:
app: expose-prometheus-demo
spec:
replicas: 1
selector:
matchLabels:
app: expose-prometheus-demo
template:
metadata:
labels:
app: expose-prometheus-demo
spec:
containers:
- name: expose-prometheus-demo
image: hengyunabc/expose-prometheus-demo:0.0.1-SNAPSHOT
imagePullPolicy: Always
ports:
- containerPort: 8080
- containerPort: 8090
Service
apiVersion: v1
kind: Service
metadata:
name: expose-prometheus-demo-service
labels:
app: expose-prometheus-demo
release: prometheus
spec:
selector:
app: expose-prometheus-demo
ports:
- protocol: TCP
name: http-traffic
port: 8080
targetPort: 8080
- protocol: TCP
name: metric-traffic
port: 8090
targetPort: 8090
ServiceMonitor
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
name: expose-prometheus-demo-service-monitor
labels:
app: expose-prometheus-demo
release: prometheus
spec:
selector:
matchLabels:
app: expose-prometheus-demo
endpoints:
- port: metric-traffic
path: “/actuator/prometheus”
应用发布到k8s里之后,访问Prometheus UI,可以查看到是否发现了demo的Service Discovery
- http://localhost:9090/service-discovery
工作原理
下面分两部分详细解析下整个流程是怎么工作的。
第一部分:
-
spring boot应用通过引入
prometheus
endpoint,数据暴露在 http://localhost:8090/actuator/prometheus -
prometheus已在k8s里部署好,它是一个无情的抓取机器,现在要想办法让它去拉spring boot应用的数据
-
prometheus的运行里的实际配置,可以访问 http://localhost:9090/config 查看。这里也是校验
ServiceMonitor
是否生效的一个地方。
第二部分:
-
部署kind
Service
,label带有release: prometheus
-
部署kind
ServiceMonitor
,label带有release: prometheus
-
Prometheus operator会发现新部署的
ServiceMonitor
,然后生成新的prometheus配置,保存到k8s的Secrets里,实际保存文件是压缩过的:prometheus.yaml.gz
-
prometheus-config-reloader会把这个
prometheus.yaml.gz
解压到/etc/prometheus/config_out/prometheus.env.yaml
-
prometheus
启动时正是以--config.file
参数指定了上面的prometheus.env.yaml
可以参考官方的图片:
配置grafana
- http://localhost:3000/
grafana 默认的用户名密码是:
admin/prom-operator
首先导入下面的开源JVM (Micrometer)
dashboard:
- https://grafana.com/grafana/dashboards/4701
在Grafana UI里,在Dashboards
,Manage
,Import
,填入4701
。导入成功之后,就可以在Dashboards里找到JVM (Micrometer)
。
打开之后可以看到 expose-prometheus-demo的监控信息。
排查问题方法
现在是重点了,为什么按网上的一些资料去配置却不能工作呢?因为Prometheus Operator本身也是在不断更新,所以一些配置过时了。
- 熟练查看k8s里的各种资源
比如查看k8s里Prometheus相关的pod信息:
kubectl get pod prometheus-prometheus-kube-prometheus-prometheus-0 -o yaml
从结果我们可以知道prometheus-config-reloader
的配置是怎样的:
- args:
- --listen-address=:8080
- --reload-url=http://127.0.0.1:9090/-/reload
- --config-file=/etc/prometheus/config/prometheus.yaml.gz
- --config-envsubst-file=/etc/prometheus/config_out/prometheus.env.yaml
- --watched-dir=/etc/prometheus/rules/prometheus-prometheus-kube-prometheus-prometheus-rulefiles-0
command:
- /bin/prometheus-config-reloader
- 理解
ServiceMonitor
是怎么工作的
在工作原理
一节里,官方的原理图里有kind
为Prometheus
的资源。因此我们安装好prometheus operator之后,可以查看具体的yaml配置。
$ kubectl get Prometheus
小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数初中级Java工程师,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年最新Java开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频
如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注Java)
最后
一次偶然,从朋友那里得到一份“java高分面试指南”,里面涵盖了25个分类的面试题以及详细的解析:JavaOOP、Java集合/泛型、Java中的IO与NIO、Java反射、Java序列化、Java注解、多线程&并发、JVM、Mysql、Redis、Memcached、MongoDB、Spring、Spring Boot、Spring Cloud、RabbitMQ、Dubbo 、MyBatis 、ZooKeeper 、数据结构、算法、Elasticsearch 、Kafka 、微服务、Linux。
这不,马上就要到招聘季了,很多朋友又开始准备“金三银四”的春招啦,那我想这份“java高分面试指南”应该起到不小的作用,所以今天想给大家分享一下。
请注意:关于这份“java高分面试指南”,每一个方向专题(25个)的题目这里几乎都会列举,在不看答案的情况下,大家可以自行测试一下水平 且由于篇幅原因,这边无法展示所有完整的答案解析
多线程&并发、JVM、Mysql、Redis、Memcached、MongoDB、Spring、Spring Boot、Spring Cloud、RabbitMQ、Dubbo 、MyBatis 、ZooKeeper 、数据结构、算法、Elasticsearch 、Kafka 、微服务、Linux。
这不,马上就要到招聘季了,很多朋友又开始准备“金三银四”的春招啦,那我想这份“java高分面试指南”应该起到不小的作用,所以今天想给大家分享一下。
[外链图片转存中…(img-ZJ9KKFj1-1710748476870)]
请注意:关于这份“java高分面试指南”,每一个方向专题(25个)的题目这里几乎都会列举,在不看答案的情况下,大家可以自行测试一下水平 且由于篇幅原因,这边无法展示所有完整的答案解析