Prometheus 监控 Kubernetes

发布时间: 更新时间: 总字数:886 阅读时间:2m 作者: IP上海 分享 网址

Prometheus 是 CNCF 的项目,云原生监控平台,与 Kubernetes 高度集成。本文介绍如何在 Kubernetes 环境中安装、部署、使用 Prometheus。

监控架构

prometheus monitor kubernetes

安装

部署 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
  • 访问 http://172.20.0.81:31270 就可以打开 Grafana web 页面,默认账号:admin/admin

  • 配置数据源

Configuration -> Data sources -> Add data source -> Prometheus -> HTTP:URL 输入 http://prometheus.prom.svc:9090 -> 点击 Save & test

  • 配置 Dashboards

在上述页面,切换到 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
Home Archives Categories Tags Statistics
本文总阅读量 次 本站总访问量 次 本站总访客数