在 GKE 中部署 Prometheus

普罗米修斯

借鉴Google Borgmon的影响,Google工程师开发了一款基于Pull模型和度量为基础的白盒监控系统,该系统是Go语言的典型代表。

    • Borgmon rule -> PromQL

 

    Borgmon AlertManager -> AlertManager

该系统是为了帮助运营计算机系统(支持频繁访问的网站的应用程序、工具、数据库、网络等)而创建的生产环境。
它作为服务器启动,并自动检测监控对象,对监控对象发出HTTP请求来获取度量数据。

由于是基于指标的,所以要考虑指标数量而不是事件数量。

架构 (jià

スクリーンショット 2019-10-16 16.17.17.jpg

仪器安装

度量

在《普罗米修斯》中的命名规则

<库名>_<名称>_<单位>_<后缀>

客户端库

用代码生成度量方法。

帮助我

指标的解释

类型

    • counter

 

    • gauge

 

    • summary

 

    • histogram

 

    untyped

服务发现

数据抓取

定期获取指标

储存空间

数据库 (databases)

仪表板

Grafana是一款功能强大的数据可视化工具。

出口商

Prometheus Server会接收HTTP请求,并从应用程序(Node、Server)收集所需监控项目的数据,并将其转换为正确的格式,以代理(在GKE中为DaemonSet)的形式将度量信息作为响应返回给Prometheus Server。

节点导出器

为每个GCE实例提供的导出器公开Linux标准内核和机器级别的指标,包括CPU使用率、内存使用率、磁盘空间、磁盘IO、网络带宽等。

スクリーンショット 2019-09-23 18.27.11.jpg

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

    1. 从GCP控制台/Kubernetes Engine/Applications/Marketplace部署应用程序

 

    1. 选择prometheus和grafana

 

    1. 在所需的设置中填写并部署

 

    将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"
广告
将在 10 秒后关闭
bannerAds