在 GKE 中部署 Prometheus
普罗米修斯
借鉴Google Borgmon的影响,Google工程师开发了一款基于Pull模型和度量为基础的白盒监控系统,该系统是Go语言的典型代表。
-
- Borgmon rule -> PromQL
- Borgmon AlertManager -> AlertManager
该系统是为了帮助运营计算机系统(支持频繁访问的网站的应用程序、工具、数据库、网络等)而创建的生产环境。
它作为服务器启动,并自动检测监控对象,对监控对象发出HTTP请求来获取度量数据。
由于是基于指标的,所以要考虑指标数量而不是事件数量。
架构 (jià

仪器安装
度量
在《普罗米修斯》中的命名规则
<库名>_<名称>_<单位>_<后缀>
客户端库
用代码生成度量方法。
帮助我
指标的解释
类型
-
- counter
-
- gauge
-
- summary
-
- histogram
- untyped
服务发现
数据抓取
定期获取指标
储存空间
数据库 (databases)
仪表板
Grafana是一款功能强大的数据可视化工具。
出口商
Prometheus Server会接收HTTP请求,并从应用程序(Node、Server)收集所需监控项目的数据,并将其转换为正确的格式,以代理(在GKE中为DaemonSet)的形式将度量信息作为响应返回给Prometheus Server。
节点导出器
为每个GCE实例提供的导出器公开Linux标准内核和机器级别的指标,包括CPU使用率、内存使用率、磁盘空间、磁盘IO、网络带宽等。

cAdvisor 是一个用于容器监控和分析的工具。
为了获取容器的度量指标而进行数据导出
API服务器
提供kube-apiserver的度量指标的输出器。
Kubernetes内的kubelet
提供kubelet指标的输出器
度量路径
http://kubelet:10255/metrics 可提供指标的链接。
容器监控器
提供用于cgroups指标的导出器。
容器中的 CPU 指标
-
- container_cpu_usage_seconds_total
-
- container_cpu_system_ seconds_total
- container_cpu_user_seconds_total
性能指标路径
http://kubelet:10255/metrics/cadvisor 可以简化为 “kubelet 的 Metrics Cadvisor”。
出口商格式
text/plain
# HELP
# TYPE
~
~
角色
终点
服务
豌豆
搜索 Kubernetes 的 Pod
告警管理器
根据Prometheus聚合的指标,进行警报通知的报警发报系统,可发送通知至Slack、PagerDuty或类似通知的去重。
寂静
如果您已经知道存在问题,或者因为维护而关闭服务,在这种情况下,如果召唤呼叫人员也无意义,您可以使用静音功能来暂时忽略特定警报。
路由
路由警报的目的地。
分组
将警报按照机架进行分组
告知
通过接收器向外部发送警报。通知已经模板化,并且可以自定义内容或者强调重要细节。
设定文件
基本上,alertmanager.yml 是用于命名的文件。
PromQL
PromQL 是Prometheus查询语言的缩写。
使用查询进行指标汇总
rate(http_status_5xx_total[5m]) / rate(http_status_2xx_total[5m])
sum(node_memory_MemFree)
avg(node_memory_MemFree)
容器网络输入输出
请将以下内容用中文进行同义转述,只需要一种选项:
输入
按照pod_name对container_network_receive_bytes_total{image!=””,namespace=”default”}[1m]的速率求和,按降序排序。
输出
按照pod名称汇总(容器网络传输字节总数{image!=“”,命名空间=“默认”} [1m])进行降序排序。
容器数量
计算出在最近5分钟内,所有容器最后出现的速率。
默认命名空间的HTTP请求
二百
增加(istio_requests_total{destination_service_namespace=”默认”, request_protocol=”http”, response_code=”200″}[1m])
404
增加(istio_requests_total{destination_service_namespace=”default”,request_protocol=”http”,response_code=”404″}[1m])
内存使用
按(命名空间,Pod名称)进行汇总:sum(container_memory_usage_bytes {namespace=”default”,image!=””})
Pods的CPU使用率 [1分钟]
按pod_name分组计算(容器_cpu使用总时间{命名空间=”默认”,映像!=””}[1分钟]的速率总和)* 100。
在GKE上部署(应用程序)
名称空间:默认
服务:prometheus-grafana
-
- 从GCP控制台/Kubernetes Engine/Applications/Marketplace部署应用程序
-
- 选择prometheus和grafana
-
- 在所需的设置中填写并部署
- 将prometheus-grafana公开到外部
$ kubectl patch svc prometheus-grafana -n default -p '{"spec": {"type": "LoadBalancer"}}'
- 注册登录用户
$ kubectl get secret prometheus-grafana --namespace default --output=jsonpath='{.data.admin-user}' | base64 --decode
- 注册登录密码
$ kubectl get secret prometheus-grafana --namespace default --output=jsonpath='{.data.admin-password}' | base64 --decode
- 使用在外部公开的IP地址上的5. 6.中注册的用户名和密码登录Grafana。
在中国本土引入GKE。
登录设置
$ PASSWORD=$(head -c 12 /dev/urandom | shasum| cut -d' ' -f1)
$ kubectl -n istio-system create secret generic grafana --from-literal=username=admin --from-literal=passphrase="$PASSWORD"