Prometheus 是 CNCF 的项目,云原生监控平台,与 Kubernetes 高度集成。本文介绍如何在 Kubernetes 环境中安装、部署、使用 Prometheus。
监控架构
安装
部署 Prometheus
git clone https://github.com/kbcx/k8s-prom
cd k8s-prom
kubectl create namespace prom
kubectl apply ./prometheus/
# 是否部署成功,通过查看日志判断:kubectl -n prom logs -f prometheus-server-xxx-xxx出现如下提示表示安装成功:
caller=main.go:491 msg="Server is ready to receive web requests."
# 域名验证
dig prometheus.prom.svc.kb.cx @10.96.0.10 +short
10.98.29.32
# 查看 svc
$ kubectl -n prom get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
prometheus NodePort 10.98.29.32 <none> 9090:31338/TCP 9h
- 访问
https://172.20.0.81:31338
就可以打开 Prometheus web 页面
- prometheus 需配置时 mountPropagation(挂载传播)
- kubernetes 的 mountPropagation 挂载传播提供了共享卷挂载的能力,它允许在同一个 Pod,甚至同一个节点内,在多个容器之间共享卷的挂载
spec:
containers:
- name: xx
volumeMounts:
- name: xx
mountPath: /xx
mountPropagation: HostToContainer
...
部署 prometheus-adapter
kubectl apply -f ./prometheus-adapter/
$ kubectl -n prom get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
custom-metrics-apiserver ClusterIP 10.110.217.166 <none> 443/TCP 1m22s
$ kubectl api-versions | grep custom.metrics.k8s.io
custom.metrics.k8s.io/v1beta1
custom.metrics.k8s.io/v1beta2
调用 custom.metrics.k8s.io
调用 API 示例,API 使用参考:Kubernetes API 介绍
kubectl get --raw /apis/custom.metrics.k8s.io/v1beta2/ | jq .
# 或
# 第一个窗口启动代理
$ kubectl proxy --port=8080
# 第二个窗口调用 API,有对应的返回值
$ curl http://localhost:8080/apis/custom.metrics.k8s.io/v1beta2
采集 label
apiVersion: v1
kind: Service
metadata:
name: xxx
namespace: xxx
annotations:
prometheus.io/scrape: 'true'
prometheus.io/path: '/metrics'
prometheus.io/port: '9098'
部署 Grafana
kubectl apply -f grafana.yaml
$ kubectl -n prom get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
custom-metrics-apiserver ClusterIP 10.110.217.166 <none> 443/TCP 8m42s
grafana NodePort 10.110.42.140 <none> 3000:31270/TCP 99s
Configuration
-> Data sources
-> Add data source
-> Prometheus
-> HTTP:URL
输入 http://prometheus.prom.svc:9090
-> 点击 Save & test
在上述页面,切换到 Dashboards
标签页,在 Prometheus 2.0 Stats
后点击 Import
到 granfan 界面,点击 +
-> Import
选择模板和数据源后,导入模板。
高级用法
依赖于监控,可以使用 HPA 自动水平扩展
扩展
- PrometheusAlert 是开源的运维告警中心消息转发系统,支持主流的监控系统 Prometheus,Zabbix,日志系统 Graylog 和数据可视化系统 Grafana 发出的预警消息,支持钉钉,微信,华为云短信,腾讯云短信,腾讯云电话,阿里云短信,阿里云电话等
- 配置文件
/data/monitor/prometheusalert/config/app.conf
- docker 示例
docker run -d \
-p 18080:8080 \
-e PA_LOGIN_USER=root \
-e PA_LOGIN_PASSWORD=root \
-e PA_TITLE=Prometheus告警 \
-e PA_OPEN_FEISHU=1 \
-e PA_OPEN_DINGDING=1 \
--name prometheusalert \
feiyu563/prometheus-alert:latest