BenjaminYang In solitude, where we are least alone

prometheus监控k8s

1.Prometheus 是什么

Prometheus(普罗米修斯)是一个最初在SoundCloud上构建的监控系统。自2012年成为社区开源项目,拥 有非常活跃的开发人员和用户社区。为强调开源及独立维护,Prometheus于2016年加入云原生云计算基金会 (CNCF),成为继Kubernetes之后的第二个托管项目。

 

官方链接:https://prometheus.io/                 托管git地址:  https://github.com/prometheus

 

2.Prometheus组成及架构

image.png

 

  • Prometheus Server:收集指标和存储时间序列数据,并提供查询接口
  • ClientLibrary:客户端库
  • Push Gateway:短期存储指标数据。主要用于临时性的任务
  • Exporters:采集已有的第三方服务监控指标并暴露metrics
  • Alertmanager:告警
  • Web UI:简单的Web控制台,展示功能较弱一般用来调试监控函数PromSQL,一般用grafana替代展示
  • TSDB:时序数据库,用来存储监控数据。

3.数据模型

Prometheus将所有数据存储为时间序列;具有相同度量名称以及标签属于同一个指标。

每个时间序列都由度量标准名称和一组键值对(也成为标签)唯一标识。

时间序列格式:

<metric_name>{<lable_name>=<lable_value>, ...}

示例:api_http_requests_total{method="POST", handler="/messages"}

 

4.作业和示例

实例:可以抓取的目标称为实例(Instances)

作业:具有相同目标的实例集合称为作业(Job)

 

scrape_configs:
  - job_name: 'prometheus'
    static_configs:
    - targets: ['localhost:9090']
  - job_name: 'node'
    static_configs:
    - targets: ['192.168.1.10:9090']

5.K8S监控指标

Kubernetes本身监控

  • Node资源利用率 
  • Node数量 • Pods数量(Node)
  • 资源对象状态

Pod监控

  • Pod数量(项目)
  • Pod状态
  • 容器资源利用率
  • 应用程序

image.png

 

监控指标

具体实现 举例
Pod性能 cAdvisor 容器CPU,内存利用率
Node性能 node-exporter 节点CPU,内存利用率
K8S资源对象 kube-state-metrics

Pod/Deployment/Service

服务发现: https://prometheus.io/docs/prometheus/latest/configuration/configuration/#kubernetes_sd_config

 

6.在K8S中部署Prometheus+Grafana

https://github.com/kubernetes/kubernetes/tree/master/cluster/addons/prometheus

https://grafana.com/grafana/download

mkdir prometheus  && cd prometheus

部署Prometheus

📎prometheus-service.yaml📎prometheus-statefulset.yaml📎prometheus-configmap.yaml📎prometheus-rbac.yaml

📎prometheus-rules.yaml

部署node-exporter

📎node-exporter-service.yaml📎node-exporter-ds.yml

 

image.png

浏览器 访问 nodeIp:30090

image.png

image.png

部署grafana

注意:为了数据的正常采集 务必保证集群间的时间同步

📎grafana.yaml

image.png

 

使用 node1-ip:30007 访问grafana

默认登录账号密码:admin/admin

登录后要求更新密码

 

展示监控数据 以下步骤,install grafana--》add data source---》new dashboard --》add users---》exporter plugin repository

image.png

step1:install grafana 已经完成。

step2:add data source

image.png

url 设置为 http://service_name:service_port,其他都默认然后保存

image.png

image.png

step 3:

推荐模板:

  • 集群资源监控:3119 
  • 资源对象状态监控 :6417
  • 工作节点监控 :8919

部署 kube-mertric-state

📎kube-state-metrics-rbac.yaml📎kube-state-metrics-service.yaml📎kube-state-metrics-deployment.yaml

 

image.png

image.png

image.png

集群资源监控:3119 

image.png

image.png

image.png

资源对象状态监控 :6417

image.png

image.png

image.png

image.png

 

工作节点监控

使用自定义json   :📎K8S工作节点监控-20191219.json

image.png

上传完json之后import

image.png

image.png

 

7.在K8S中部署Alertmanager

image.png

1. 部署Alertmanager

2. 配置Prometheus与Alertmanager通信

3. 配置告警

  • prometheus指定rules目录
  • configmap存储告警规则
  • configmap挂载到容器rules目录
  • 增加alertmanager告警配置

📎alertmanager-pvc.yaml📎alertmanager-service.yaml📎alertmanager-configmap.yaml📎alertmanager-deployment.yaml

其中alertmanager-configmap.yaml 中定义了 发件箱和 收件箱的信息,需要自定义设置一下

image.png

测试告警

修改 prometheus-rules.yaml 定义的磁盘使用率告警规则

image.png

将node节点根分区 使用默认大于80%告警 改为 大于40%

手动check 下 node1 和node 2 的 根分区使用率

node1  47%

image.png

node2  36%

image.png

重新应用配置

kubectl apply -f prometheus-rules.yaml

重建应用prometheus

kubectl delete pod prometheus-0 -n kube-system

 

image.png

打开 俺的 qq邮箱于是乎 收到了 磁盘告警的邮件。

image.png

 

8.Prometheus告警状态

  • Inactive:这里什么都没有发生。
  • Pending:已触发阈值,但未满足告警持续时间
  • Firing:已触发阈值且满足告警持续时间。警报发送给接受者。

image.png

 

9.Prometheus告警收敛

分组(group):将类似性质的警报分类为单个通知

抑制(Inhibition):当警报发出后,停止重复发送由此警报引发的其他警报

静默(Silences):是一种简单的特定时间静音提醒的机制

 

10.Prometheus一条告警怎么触发的?

 

posted @ 2020-03-09 09:12  benjamin杨  阅读(9955)  评论(2编辑  收藏  举报