前言

容器集群管理系统 Kubernetes(简称K8s),为容器化的应用提供部署运行、容器编排、负载均衡、服务发现和动态伸缩等一系列完整功能,Prometheus 对 K8s 支持非常棒,能够自动发现 K8s 的监控目标!Prometheus 产生的告警,可以通过 Alertmanager 转发到 Cloud Alert,实现告警的降噪、分派和通知。

Kubernetes+Promethues+Cloud Alert实践分享_第1张图片


Kubernetes

K8s 是 Google 开源的容器集群管理系统。用于管理云平台中多个主机上的容器化的应用,K8s的目标是让部署容器化的应用简单并且高效(powerful),K8s 提供了应用部署,规划,更新,维护的一种机制。(选取自为K8s中文文档)

Master:k8s 集群的管理节点,负责管理集群,提供集群的资源数据访问入口。包含四个模块:kube-apiserver、kube-controller-manager 和 kube-scheduler。

Node:k8s 集群架构中运行 Pod 的服务节点,每个 Node 至少运行 container runtime(比如 docker 或者 rkt)、kubelet 和 kube-proxy 服务。

更多K8s的安装及使用,详见K8s中文文档。K8s 解决了传统IT系统中服务扩容和升级的两大难题,提高了大规模容器集群管理的便捷性。K8s 通常会搭配 promethues 进行监控。


Prometheus

Prometheus 是一个开源和社区驱动的监控&报警&时序数据库的项目。由于其从推出就提供了完整的基于容器的部署方式,开发者可以快速的基于容器搭建自己的监控平台。

Prometheus 监控 K8s 兼容很好,主要可监控 K8s:

Node: 如主机 CPU,内存,网络吞吐和带宽占用,磁盘 I/O 和磁盘使用等指标。node-exporter 采集。

容器关键指标:集群中容器的 CPU 详细状况,内存详细状况,Network,FileSystem和Subcontainer 等。通过 cadvisor 采集。

K8s 集群上部署的应用:监控部署在 K8s 集群上的应用。主要是 pod,service,ingress 和 endpoint。通过 black-box 和 kube-apiserver 的接口采集。

产生的告警,promethues 支持 Email 推送和 webhook 推送,如果要实现电话、短信、微信的推送,如果不想再造轮子,可以配合 Cloud Alert(原OneAlert)或 pagerduty 使用。本文以Cloud Alert 为例详细描述集成步骤,pagerduty的集成方式类似。


Cloud Alert

Cloud Alert(原OneAlert)是免费 SaaS 云告警监控项目,可以实现告警的降噪、分派、通知。通知方式支持电话、短信、微信、邮件、APP、钉钉、Slack通知等等。

  1. 注册 Cloud Alert 账号,注册地址。

  2. 创建 Prometheus 应用集成,集成 -> 监控工具,选择 Prometheus,保存后,即可获取 webhook 回调 url。
    Kubernetes+Promethues+Cloud Alert实践分享_第2张图片

  3. 进入 Prometheus 界面,修改 Alertmanager 模块的配置文件。

receivers:
-name: 'team-X-pager'
webhook_configs:
-url: 'http://api.onealert.com/alert/api/event/prometheus/--'
send_resolved: true

  1. 重启下 Alertmanager 模块,加载该配置文件。结束。

Cloud Alert 默认所有告警均电话、邮件、短信通知用户,如果想设置不同的告警分派给不同的人/团队,可以在 配置 -> 分派策略 中设置。如果公司成员比较多,建议搭配排班功能使用,没必要所有告警全员响应,将人力解放出来。微信通知,需要先绑定 Cloud Alert 的微信公众号:云告警,绑定后,就能接收微信通知了。更多使用参考官方文档吧。