普罗米修斯监控服务之-监控携带metric接口的服务
第一部分:课前小菜:例子:分布式:将多台Linux主机组合在一起,做成像一台主机一样来使用微服务:将一台Linux主机拆分成多台Linux使用淘宝:搜索页、商品详情页、订单页、支付页、物流、评论淘宝:服装、手机数码、家纺、手表、房产微服务:按照不同的功能、按照不同的业务拆分成多个模块,以至于某一个模块出问题不至于导致整站的不可用第二部分:普罗米修斯监控服务之-监控携带metric接口的服务1.普罗
·
第一部分:课前小菜:
例子:
分布式:将多台Linux主机组合在一起,做成像一台主机一样来使用
微服务:将一台Linux主机拆分成多台Linux使用
淘宝:搜索页、商品详情页、订单页、支付页、物流、评论
淘宝:服装、手机数码、家纺、手表、房产
微服务:按照不同的功能、按照不同的业务拆分成多个模块,以至于某一个模块出问题不至于导致整站的不可用
第二部分:普罗米修斯监控服务之-监控携带metric接口的服务
1.普罗米修斯监控分为两种:
1、携带metric接口的服务
2、不携带metric接口的服务
普罗米修斯监控携带metric接口的服务的流程
1、通过EndPrints获取需要监控的ETCD的地址
2、创建Service,给予集群内部的ServiceMoniter使用
3、创建ServiceMoniter部署需要访问证书
4、重启普罗米修斯监控Pod,载入监控项
2.携带metric接口的意义
携带metric接口的服务就表示可以通过metric接口获取服务的监控项和监控信息。本次课以ETCD作为载体。
3.测试ETCD服务的metrics接口
##如果出现一大堆东西代表metric接口正常携带
(curl -k允许连接到SSL站点而不需要证书(H))
curl -k --cert /etc/kubernetes/pki/apiserver-etcd-client.crt --key /etc/kubernetes/pki/apiserver-etcd-client.key https://127.0.0.1:2379/metrics
(简略的写一点)
# HELP promhttp_metric_handler_requests_total Total number of scrapes by HTTP status code.
# TYPE promhttp_metric_handler_requests_total counter
promhttp_metric_handler_requests_total{code="200"} 0
promhttp_metric_handler_requests_total{code="500"} 0
promhttp_metric_handler_requests_total{code="503"} 0
4.关于端口的说明
[root@k8s-master-01 ~]# netstat -lntp | grep etcd
tcp 0 0 192.168.15.31:2379 0.0.0.0:* LISTEN 2456/etcd
tcp 0 0 127.0.0.1:2379 0.0.0.0:* LISTEN 2456/etcd
tcp 0 0 192.168.15.31:2380 0.0.0.0:* LISTEN 2456/etcd
tcp 0 0 127.0.0.1:2381 0.0.0.0:* LISTEN 2456/etcd
[root@k8s-master-01 ~]#
5.关于ServiceMonitor的简介(非常重要)
Prometheus Operator默认的监控指标并不能完全满足实际的监控需求,这时候就需要我们自己根据业务添加自定义监控。添加一个自定义监控的步骤如下:
1、创建一个ServiceMonitor对象,用于Prometheus添加监控项
2、为ServiceMonitor对象关联metrics数据接口的Service对象
3、确保Services对象可以正确获取到metrics数据
ServiceMonitor通过标签筛选需要被监控的对象(k8s service),并且指定从它的哪个端口和url路径来拉取指标,并定义拉取操作的间隔时间。
ServiceMonitor本质是对 prometheus 配置中指标数据来源(endpoint)的抽象,每新建一个 service monitor 资源,prometheus operator 就会在自定义资源 promethues 的配置文件中添加相应的配置,以达到和使用原生 prometheus 相同的效果,这就把原来需要需要手动和统一配置的任务通过 crd 来自动化实现了。
第三部分:通过普罗米修斯监控ETCD(携带metric的一种类型)
1.流程梳理:普罗米修斯监控携带metric接口的服务的流程:
1、通过EndPrints获取需要监控的ETCD的地址
2、创建Service,给予集群内部的ServiceMoniter使用
3、创建ServiceMoniter部署需要访问证书,给予prometheus-k8s-0来使用
4、重启普罗米修斯监控Pod(prometheus-k8s-0),载入监控项
因为ETCD是携带metric接口的服务,所以会用上述流程。
2.通过EndPoints获取需要监控的ETCD的地址
[root@k8s-master-01 ~]# kubectl get pods -n kube-system
##可以看出etcd在kube-system这个空间内部
etcd-k8s-master-01 1/1 Running 11 31d
vim etcd_endpoints.yaml
kind: Endpoints
apiVersion: v1
metadata:
namespace: kube-system
name: etcd-moniter
labels:
k8s: etcd
subsets:
- addresses:
- ip: "192.168.12.31"
ports:
- port: 2379
protocol: TCP
name: etcd
##部署etcd_endpoints.yaml
[root@k8s-master-01 ~]# mkdir etcd
[root@k8s-master-01 ~]# cd etcd/
[root@k8s-master-01 etcd]# ls
[root@k8s-master-01 etcd]# vim etcd_endpoints.yaml
[root@k8s-master-01 etcd]# kubectl apply -f etcd_endpoints.yaml
endpoints/etcd-moniter created
##得到etcd的ip和端口
[root@k8s-master-01 etcd]# kubectl get endpoints -n kube-system
NAME ENDPOINTS AGE
etcd-moniter 192.168.12.31:2379 109s
3.创建Service,给予集群内部的ServiceMoniter使用
kind: Service
apiVersion: v1
metadata:
namespace: kube-system
name: etcd-moniter ###重要:必须和上面的name名称保持一致因为endpoints的名称来源于service
labels:
k8s: etcd
spec:
ports:
- port: 2379
targetPort: 2379
name: etcd
protocol: TCP
4.创建Service,给予集群内部的ServiceMoniter使用
kind: Service
apiVersion: v1
metadata:
namespace: kube-system
name: etcd-moniter ###重要:必须和上面的name名称保持一致因为endpoints的名称来源于service
labels:
k8s: etcd
spec:
ports:
- port: 2379
targetPort: 2379
name: etcd
protocol: TCP
##部署Service
root@k8s-master-01 etcd]# vim etcd_service.yaml
[root@k8s-master-01 etcd]# kubectl apply -f etcd_service.yaml
service/etcd-moniter created
[root@k8s-master-01 etcd]# kubectl get svc -n kube-system
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
etcd-moniter ClusterIP 10.110.31.122 <none> 2379/TCP 18s
##测试service创建成功与否(报错待解决)
[root@k8s-master-01 etcd]# kubectl get svc -n kube-system
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
etcd-moniter ClusterIP 10.96.144.71 <none> 2379/TCP 4s
kube-dns ClusterIP 10.96.0.10 <none> 53/UDP,53/TCP,9153/TCP 31d
kubelet ClusterIP None <none> 10250/TCP,10255/TCP,4194/TCP 39h
[root@k8s-master-01 etcd]# curl -k --cert /etc/kubernetes/pki/apiserver-etcd-client.crt --key /etc/kubernetes/pki/apiserver-etcd-client.key https://10.96.144.71:2379/metrics
curl: (7) Failed connect to 10.96.144.71:2379; 拒绝连接
找到问题的原因了:
1.endpoints 后来发现没有部署(这个很奇怪,我明明部署了了)
2.在创建Endpoints时候,我把etcd的ip地址写成老师的机子上的了。错了。
5.创建ServiceMoniter部署需要访问证书
##就是这个Endpoints的ports的name
###重要点:ServiceMonitor是给prometheus-k8s-0来使用的。而后者就在namespace: monitoring中,所以写namespace: monitoring
[root@k8s-master-01 etcd]# vi etcd_servicemonitor.yaml
kind: ServiceMonitor
apiVersion: monitoring.coreos.com/v1
metadata:
labels:
k8s: etcd
name: etcd-monitor
namespace: monitoring
spec:
endpoints:
- interval: 3s
port: etcd
scheme: https
tlsConfig:
caFile: /etc/prometheus/secrets/etcd-certs/ca.crt
certFile: /etc/prometheus/secrets/etcd-certs/peer.crt
keyFile: /etc/prometheus/secrets/etcd-certs/peer.key
insecureSkipVerify: true ##相当于curl -k 选项,关闭禁用目标证书 打开
selector:
matchLabels:
k8s: etcd ###这个只能选用Endpoints的标签
namespaceSelector: ###空间选择器。这些endpoints里的东西都是kube-system里的,所以这样选用
matchNames:
- "kube-system"
###检测结果查找servicemonitor
[root@k8s-master-01 etcd]# kubectl get servicemonitor -n monitoring
NAME AGE
etcd-monitor 38s
6.重启普罗米修斯监控Pod(prometheus-k8s-0),载入监控项
##主要是创建这一步来的:
secrets:
- etcd-certs
kind: Prometheus
apiVersion: monitoring.coreos.com/v1
metadata:
labels:
prometheus: k8s
name: k8s
namespace: monitoring
spec:
alerting:
alertmanagers:
- name: alertmanager-main
namespace: monitoring
port: web
- name: alertmanager-main-etcd
namespace: kube-system
port: etcd
image: quay.io/prometheus/prometheus:v2.15.2
nodeSelector:
kubernetes.io/os: linux
podMonitorNamespaceSelector: {}
podMonitorSelector: {}
replicas: 2
resources:
requests:
memory: 400Mi
ruleSelector:
matchLabels:
prometheus: k8s
role: alert-rules
securityContext:
fsGroup: 2000
runAsNonRoot: true
runAsUser: 1000
serviceAccountName: prometheus-k8s
serviceMonitorNamespaceSelector: {}
serviceMonitorSelector: {}
version: v2.15.2
secrets:
- etcd-certs
7.创建一个secrets:用来保存prometheus监控的etcd的证书
##用命令行的格式创建secret,因为这个secrets是用给prometheus的,它在monitoring空间,所以指定在这个空间里
kubectl create secret generic etcd-certs -n monitoring --from-file=/etc/kubernetes/pki/etcd/ca.crt --from-file=/etc/kubernetes/pki/etcd/peer.crt --from-file=/etc/kubernetes/pki/etcd/peer.key
secret/etcd-certs created
8.再创建好证书的基础上开始部署prometheus并测试
[root@k8s-master-01 etcd]# kubectl apply -f prometheus.yaml
prometheus.monitoring.coreos.com/k8s configured
[root@k8s-master-01 etcd]# kubectl get pods -n monitoring
##测试成功
NAME READY STATUS RESTARTS AGE
prometheus-k8s-0 3/3 Running 1 2m4s
prometheus-k8s-1 3/3 Running 1 2m14s
9.测试是否监控成功
10.加入Grafana
更多推荐
已为社区贡献1条内容
所有评论(0)