现在很多业务会通过云上的TMP来监控云上的业务,比如将云上的tke、etcd等服务监控数据写到TMP,然后方便监测服务是否正常运行。
很多人之前用过开源的prometheus,会经常通过prometheus提供的ui页面来查下监控数据,但是TMP没有提供这类可视化页面,因为云上的TMP是有鉴权的,只能在grafana里面来查询监控数据。
其实TMP有提供Remote read 接口,我们可以自己部署一个prometheus来通过Remote read 接口读取TMP的监控数据,然后这样就可以在自建的prometheus ui页面直接查询到TMP的监控数据。具体可以参考云监控的文档说明https://cloud.tencent.com/document/product/1416/84294
下面我们说说如何在集群内部署配置prometheus服务来远程读取tmp的监控数据,每个tmp实例都是部署在一个eks集群,我们就将prometheus部署到对应的eks集群即可。
1. 获取tmp实例api访问账号密码
通过Remote read 接口读取数据,鉴权方式推荐使用Basic Auth,username 为账号 AppID ,password可以控制台查看tmp实例,里面的token就是密码。
2. Remote read配置
这里是在k8s集群部署,所以我们通过configmap来配置Remote read,然后挂载到容器内,具体的yaml如下
apiVersion: v1
data:
prometheus.yml: |-
remote_read:
- url: "http://172.16.180.xxx:9090/api/v1/read"
read_recent: true
basic_auth:
username: "AppID"
password: "token"
filter_external_labels: false
kind: ConfigMap
metadata:
name: prom-cm
namespace: kube-system
usernameh和password就是第一步获取的appid和token,更多配置项参考官网文档https://prometheus.io/docs/prometheus/latest/configuration/configuration/#remote_read,注意url的路径是/api/v1/read。
3. 创建prometheus工作负载
部署一个prometheus的deploy,然后挂载上一步创建的configmap,yaml如下
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
k8s-app: prom
qcloud-app: prom
name: prom
namespace: kube-system
spec:
progressDeadlineSeconds: 600
replicas: 1
revisionHistoryLimit: 10
selector:
matchLabels:
k8s-app: prom
qcloud-app: prom
template:
metadata:
labels:
k8s-app: prom
qcloud-app: prom
spec:
containers:
- image: bitnami/prometheus:2.43.0
imagePullPolicy: IfNotPresent
name: prom
resources:
limits:
cpu: 500m
memory: 1Gi
requests:
cpu: 250m
memory: 256Mi
securityContext:
privileged: false
terminationMessagePath: /dev/termination-log
terminationMessagePolicy: File
volumeMounts:
- mountPath: /opt/bitnami/prometheus/conf/prometheus.yml
name: vol
readOnly: true
subPath: prometheus.yml
dnsPolicy: ClusterFirst
restartPolicy: Always
schedulerName: default-scheduler
securityContext: {}
terminationGracePeriodSeconds: 30
volumes:
- configMap:
defaultMode: 420
name: prom-cm
name: vol
4. 创建service或者ingress访问prometheus
prometheus的pod运行正常后,创建一个service或者ingress来访问prometheus,具体看个人需求,我这里是通过公网clb类型service来访问prometheus,service的yaml如下
apiVersion: v1
kind: Service
metadata:
labels:
k8s-app: prom
qcloud-app: prom
name: prom
namespace: kube-system
spec:
externalTrafficPolicy: Cluster
ports:
- name: 9090-9090-tcp-2wb1xy9wja4
nodePort: 32183
port: 9090
protocol: TCP
targetPort: 9090
selector:
k8s-app: prom
qcloud-app: prom
sessionAffinity: None
type: LoadBalancer
5. 测试通过prometheus ui访问tmp数据
浏览器输入公网clb的vip和9090端口,就可以访问promethues的前端ui页面
然后可以通过promsql来查询对应的指标,但是这里有个缺点,因为是从远程读的数据,页面输入指标没有智能提示,需要输入具体的指标名称才行。这里我们输入up是可以正常查询tmp的数据。