概要
最近在实施一个项目,将客户从原有的数人云 mesos+marathon 迁移至 Openshift,迁移的主要原因有两个,一是现有mesos+marathon平台出现故障时能够解决问题的人不多(数人云已被收购),能够查找的相关资料也少,运维成本很高,用openshift,是企业级产品,并且社区也活跃,有问题解决问题的成功率也大大提升了,如果再买红帽的订阅服务或人天服务,还能够有红帽原厂或红帽合作伙伴的大力支持;二是现在很多开源的软件部署方式都大力支持K8S和openshift,当客户想要快速搭建环境时,mesos+marathon平台就捉襟见肘了。
需求
客户原有的 mesos+marathon 监控用的是prometheus,应用本身暴露了一个数据采集接口给prometheus进行采集,现在上了openshift,自然使用openshift的prometheus,openshift的prometheus使用的是operator进行部署,和原来的部署配置方式有些差异,接下来就进行对接配置。
Prometheus(Operator)简介
摘抄自一个大牛博客的介绍(文后会附上链接):
要了解Prometheus Operator能做什么,其实就是要了解Prometheus Operator为我们提供了哪些自定义的Kubernetes资源,列出了Prometheus Operator目前提供的️4类资源:
Prometheus:声明式创建和管理Prometheus Server实例;
ServiceMonitor:负责声明式的管理监控配置;
PrometheusRule:负责声明式的管理告警配置;
Alertmanager:声明式的创建和管理Alertmanager实例。
简言之,Prometheus Operator能够帮助用户自动化的创建以及管理Prometheus Server以及其相应的配置。
配置ServiceMonitor
当我们需要添加一个监控项,就添加ServiceMonitor就可以了,operator就会自动的去reload我们新添加的监控项了。不过首先我们得创建一个应用对应的service。
- 创建service
注意spec.ports.name这个值。
apiVersion: v1
kind: Service
metadata:
creationTimestamp: 2019-08-29T05:14:53Z
labels:
app: xxx-product-service
prometheus: k8s
name: xxx-product-service
namespace: xxx-poc
resourceVersion: "13541805"
selfLink: /api/v1/namespaces/xxx-poc/services/xxx-product-service
uid: ef06651a-ca1b-11e9-9a49-005056af6df7
spec:
clusterIP: 172.30.80.126
ports:
- name: xxx-product
port: 10002
protocol: TCP
targetPort: 10002
selector:
deploymentconfig: xxx-product-service
sessionAffinity: None
type: ClusterIP
status:
loadBalancer: {}
- 创建ServiceMonitor
配置项简介
metadata.name:这个ServiceMonitor的名称
spec.endpoints.interval: 采集数据的间隔
spec.endpoints.port:采集数据的端口,对应service里面对应的port-name
spec.endpoints.scheme:采集数据的协议
spec.endpoints.path:采集数据的路径
spec.namespaceSelector:指定需要监控的应用的所在项目
spec.selector:指定应用对应的service标签
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
labels:
k8s-app: prometheus
name: xxx-product-service
spec:
endpoints:
- interval: 10s
port: xxx-product
scheme: http
path: /prometheus
namespaceSelector:
matchNames:
- xxx-poc
selector:
matchLabels:
prometheus: k8s
- 查看servicemonitor
$ oc get crd
NAME CREATED AT
alertmanagers.monitoring.coreos.com 2019-07-29T07:47:35Z
prometheuses.monitoring.coreos.com 2019-07-29T07:47:35Z
prometheusrules.monitoring.coreos.com 2019-07-29T07:47:35Z
servicemonitors.monitoring.coreos.com 2019-07-29T07:47:35Z
$ oc get servicemonitors.monitoring.coreos.com
NAME AGE
alertmanager 42d
cluster-monitoring-operator 42d
kube-apiserver 42d
kube-controllers 42d
kube-state-metrics 42d
kubelet 42d
node-exporter 42d
prometheus 42d
prometheus-operator 42d
sephora-product-service 11d
$ oc get servicemonitors sephora-product-service -o yaml
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
creationTimestamp: 2019-08-29T06:52:52Z
generation: 1
labels:
k8s-app: prometheus
name: sephora-product-service
namespace: openshift-monitoring
resourceVersion: "13566487"
selfLink: /apis/monitoring.coreos.com/v1/namespaces/openshift-monitoring/servicemonitors/sephora-product-service
uid: 9f2c4bcf-ca29-11e9-9a49-005056af6df7
spec:
endpoints:
- interval: 10s
path: /prometheus
port: sephora-product
scheme: http
namespaceSelector:
matchNames:
- sephora-poc
selector:
matchLabels:
prometheus: k8s
查看 Prometheus 新添加的配置项
可以看到现在的prometheus配置文件里面新增了我们配置的ServiceMonitor内容,不过添加了一些新内容,具体可以查prometheus文档关于operator的部分。


去 Prometheus 那里查看数据





网友评论