「」小白也能轻松上手的Prometheus教程( 二 )


「」小白也能轻松上手的Prometheus教程
本文插图
在右侧垂直省略号的下拉菜单里你能找到IP并点击View/Edit YAML 。 在yaml文件的底部 , 你将会看到类似的部分:
status: loadBalancer: ingress: - ip: 34.76.22.14访问IP将为我们展示Prometheus Server和Alertmanager的GUI 。 你会发现这时没有什么内容可以查看的 , 因为尚未定义规则以及配置告警 。
添加规则
规则可以让我们触发告警 。 这些规则都是基于Prometheus的表达式语言 。 无论何时 , 只要符合条件 , 告警就会被触发并发送给Alertmanager 。
现在来看看我们如何添加规则 。
在资源->工作负载标签下 , 我们可以看到Deployment在运行chart时创建了什么 。 我们来详细看看prometheus-server和prometheus-alertmanager 。
我们从第一个开始并理解其配置 , 我们如何编辑它并了解服务在哪个端口上运行 。 点击垂直省略号菜单按钮并点击View/Edit YAML 。
首先 , 我们看到的是两个与Deplolyment关联的容器:prometheus-server-configmap-reload和prometheus-server 。 容器prometheus-server的专属部分有一些相关信息:
「」小白也能轻松上手的Prometheus教程
本文插图
正如我们所了解的 , Prometheus通过prometheus.yml(https://prometheus.io/docs/alerting/configuration/)进行配置 。 该文件(以及其他在serverFiles中列出的文件)将挂载到server pod 。 为了添加/编辑规则 , 我们需要修改这个文件 。 实际上 , 这就是一个Config Map , 可以在Resources Config的标签页下找到 。 点击垂直的省略菜单按钮并Edit 。 在规则部分 , 让我们添加新的规则并点击保存 。
groups: - name: memory demo alert rules: - alert: High Pod Memory expr: container_memory_usage_bytes{pod_name=~''nginx-.*'', image!='''', container!=''POD''} > 5000000 for: 1m labels: severity: critical annotations: summary: High Memory Usage - name: cpu demo alert rules: - alert: High Pod CPU expr: rate (container_cpu_usage_seconds_total{pod_name=~''nginx-.*'', image!='''', container!=''POD''}[5m]) > 0.04 for: 1m labels: severity: critical annotations: summary: High CPU Usage
「」小白也能轻松上手的Prometheus教程
本文插图
「」小白也能轻松上手的Prometheus教程
本文插图
规则将会由Prometheus Server自动加载 , 然后我们在Prometheus Server GUI中能看到它们:
「」小白也能轻松上手的Prometheus教程
本文插图
这是关于以上两条规则的解释:

  • container_memory_usage_bytes:当前内存使用情况(以字节为单位) , 包括所有内存 , 无论任何时候访问 。
  • container_cpu_usage_seconds_total:累积的CPU时间(以秒为单位)

所有的指标都能够在以下页面中找到:
https://github.com/google/cadvisor/blob/master/metrics/prometheus.go
在Prometheus中所有正则表达式都使用RE2 syntax(https://github.com/google/re2/wiki/Syntax) 。 使用正则表达式 , 我们只能为名称与特定模式匹配的Pod选择时间序列 。 在我们的示例中 , 我们需要寻找以nginx-开头的pod , 并且排除“POD” , 因为这是容器的父cgroup , 而且会显示pod内所有容器的统计信息 。
对于container_cpu_usage_seconds_total来说 , 我们使用所谓的子查询(Subquery) 。 它会每5分钟返回我们的指标 。