k8s-容器监控与报警

Posted 小怪獣55

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了k8s-容器监控与报警相关的知识,希望对你有一定的参考价值。

容器监控的实现方对比虚拟机或者物理机来说比大的区别,比如容器在k8s环境中可以
任意横向扩容与缩容,那么就需要监控服务能够自动对新创建的容器进行监控,当容器
删除后又能够及时的从监控服务中删除,而传统的zabbix的监控方式需要在每一个容器
中安装启动agent,并且在容器自动发现注册方面并没有比好的实现方式

1.Prometheus

官方文档:​​https://prometheus.io/docs/introduction/overview/​

github地址:​​https://github.com/prometheus​

下载地址:​​https://prometheus.io/download/​

k8s的早期版本基于组件heapster实现对pod和node节点的监控功能,
但是从k8s 1.8版本开始使用metrics API的方式监控,
并在1.11版本 正式将heapster替换,
后期的k8s监控主要是通过metrics Server提供核心监控指标,比如Node节点的CPU和
内存使用率,其他的监控交由另外一个组件Prometheus完成。
Prometheus是基于go语言开发的一套开源的监控、报警和时间序列数据库的组合,是由
SoundCloud公司开发的开源监控系统,Prometheus是CNCF
(Cloud Native Computing Foundation,云原生计算基金会)继kubernetes 之
后毕业的第二个项目,prometheus在容器和微服务领域中得到了广泛的应用

1.1.特点

使用key-value的多维度格式保存数据
数据不使用mysql这样的传统数据库,而是使用时序数据库,目前是使用的TSDB
支持第三方dashboard实现更高的图形界面,如grafana(Grafana 2.5.0版本及以上)
功能组件化
不需要依赖存储,数据可以本地保存也可以远程保存
服务自动化发现
强大的数据查询语句功(PromQL,Prometheus Query Language)

1.2.prometheus系统架构图

k8s-容器监控与报警_k8s-容器监控与报警

prometheus server:  #主服务,接受外部http请求,收集、存储与查询数据等
prometheus targets: #静态收集的目标服务数据
service discovery: #动态发现服务
prometheus alerting:#报警通知
pushgateway: #数据收集代理服务器(类似于zabbix proxy)
data visualization and export#数据可视化与数据导出(访问客户端)
1.Prometheus Server:
Prometheus Sever是Prometheus组件中的核心部分,负责实现对监控数据的获取,存储及查询。
Prometheus Server可以通过静态配置管理监控目标,
也可以配合使用Service Discovery的方式动态管理监控目标,并从这些监控目标中获取数据。
其次Prometheus Sever需要对采集到的数据进行存储,
Prometheus Server本身就是一个实时数据库,将采集到的监控数据按照时间序列的方式存储在
本地磁盘当中。Prometheus Server对外提供了自定义的PromQL,实现对数据的查询以及分析。
另外Prometheus Server的联邦集群能力可以使其从其他的Prometheus Server实例中获取数据。

2 Exporters:
Exporter将监控数据采集的端点通过HTTP服务的形式暴露给Prometheus Server,
Prometheus Server通过访问该Exporter提供的Endpoint端点,即可以获取到需要采
集的监控数据。可以将Exporter分为2类:
#直接采集
这一类Exporter直接内置了对Prometheus监控的支持,比如cAdvisor,Kubernetes,
Etcd,Gokit等,都直接内置了用于向Prometheus暴露监控数据的端点。
#间接采集
原有监控目标并不直接支持Prometheus,因此需要通过Prometheus提供的Client Library
编写该监控目标的监控采集程序。例如:Mysql Exporter,JMX Exporter,Consul Exporter等。

3 AlertManager:
在Prometheus Server中支持基于Prom QL创建告警规则,如果满足Prom QL定义的规则,则会产
生一条告警。在AlertManager从 Prometheus server 端接收到 alerts后,会进行去除重复
数据,分组,并路由到对收的接受方式,发出报警。常见的接收方式有:电子邮件,pagerduty,
webhook等。

4 PushGateway:
Prometheus数据采集基于Prometheus Server从Exporter pull数据,因此当网络环境不允许
Prometheus Server和Exporter进行通信时,可以使用PushGateway来进行中转。通过
PushGateway将内部网络的监控数据主动Push到Gateway中,Prometheus Server采用针
对Exporter同样的方式,将监控数据从PushGateway pull到Prometheus Server。

1.3.prometheus安装

监听端口9090

此次实验安装:​​​https://github.com/prometheus/prometheus/releases/download/v2.11.1/prometheus-2.11.1.linux-amd64.tar.gz​

1.3.1.二进制方式安装

tar xf prometheus-2.11.1.linux-amd64.tar.gz  -C /usr/local/
ln -s /usr/local/prometheus-2.11.1.linux-amd64 /usr/local/prometheus

k8s-容器监控与报警_k8s-容器监控与报警_02

1.3.2.prometheus启动脚本

vim /lib/systemd/system/prometheus.service
-------------------------------------------------------------
[Unit]
Description=Prometheus Server
Documentation=https://prometheus.io/docs/introduction/overview/
After=network.target
[Service]
Restart=on-failure
WorkingDirectory=/usr/local/prometheus/
ExecStart=/usr/local/prometheus/prometheus --config.file=/usr/local/prometheus/prometheus.yml
[Install]
WantedBy=multi-user.target

1.3.3.启动prometheus服务

systemctl daemon-reload
systemctl restart prometheus
systemctl enable prometheus

k8s-容器监控与报警_k8s-容器监控与报警_03

1.3.4.访问prometheus web界面

http://192.168.47.47:9090

k8s-容器监控与报警_k8s-容器监控与报警_04

k8s-容器监控与报警_k8s-容器监控与报警_05

1.4.node exporter

监听端口为9100

收集各k8s node节点上的监控指标数据

下载地址:​​https://github.com/prometheus/node_exporter/releases/download/v0.18.1/node_exporter-0.18.1.linux-amd64.tar.gz​

1.4.1.二进制方式安装node exporter

tar xf node_exporter-0.18.1.linux-amd64.tar.gz  -C /usr/local/
ln -s /usr/local/node_exporter-0.18.1.linux-amd64 /usr/local/node_exporter

k8s-容器监控与报警_k8s-容器监控与报警_06

1.4.2.创建node exporter启动脚本

vim /lib/systemd/system/node-exporter.service
[Unit]
Description=Prometheus Node Exporter
After=network.target
[Service]
ExecStart=/usr/local/node_exporter/node_exporter
[Install]
WantedBy=multi-user.target

1.4.3.启动node exporter服务

systemctl daemon-reload
systemctl restart node-exporter
systemctl enable node-exporter

k8s-容器监控与报警_k8s-容器监控与报警_07

1.4.4.访问node exporter web界面

http://192.168.47.53:9100/metrics

k8s-容器监控与报警_k8s-容器监控与报警_08

1.5.prometheus采集node 指标数据

配置prometheus通过node exporter采集 监控指标数据

1.5.1.prometheus配置文件

vim /usr/local/prometheus/prometheus.yml
- job_name: promethues-node
static_configs:
- targets: [192.168.47.53:9100,192.168.47.54:9100]

k8s-容器监控与报警_k8s-容器监控与报警_09

1.5.2.重启prometheus服务

systemctl  restart prometheus

1.5.3.prometheus验证node节点状态

k8s-容器监控与报警_k8s-容器监控与报警_10

1.5.4.prometheus验证node节点监控数据

k8s-容器监控与报警_k8s-容器监控与报警_11

k8s-容器监控与报警_k8s-容器监控与报警_12

2.grafana

监听3000端口

调用prometheus的数据,进行更专业的可视化

下载:​​https://grafana.com/get/?plcmt=top-nav&cta=downloads&tab=self-managed​

k8s-容器监控与报警_k8s-容器监控与报警_13

​https://grafana.com/grafana/download?pg=get&plcmt=selfmanaged-box1-cta1​

2.1.安装

sudo apt-get install -y adduser libfontconfig1
wget https://dl.grafana.com/enterprise/release/grafana-enterprise_8.5.0_amd64.deb
sudo dpkg -i grafana-enterprise_8.5.0_amd64.deb

k8s-容器监控与报警_k8s-容器监控与报警_14

2.2.配置文件

vim /etc/grafana/grafana.ini
--------------------------------------------------------
[server]
# Protocol (http, https, socket)
protocol = http
# The ip address to bind to, empty will bind to all interfaces
http_addr = 0.0.0.0
# The http port to use
http_port = 3000

2.3.启动grafana

systemctl start grafana-server.service
systemctl enable grafana-server.service

2.4.grafana web界面

默认账号和密码都是admin;登录进去要求强制修改密码

k8s-容器监控与报警_k8s-容器监控与报警_15

k8s-容器监控与报警_k8s-容器监控与报警_16

k8s-容器监控与报警_k8s-容器监控与报警_17

2.5.添加prometheus数据源

k8s-容器监控与报警_k8s-容器监控与报警_18

k8s-容器监控与报警_k8s-容器监控与报警_19

k8s-容器监控与报警_k8s-容器监控与报警_20

k8s-容器监控与报警_k8s-容器监控与报警_21

2.6.import模板

模板下载地址:​​https://grafana.com/grafana/dashboards/​

模板:Node Exporter Full:​​https://grafana.com/grafana/dashboards/1860​

k8s-容器监控与报警_k8s-容器监控与报警_22

- job_name: node
static_configs:
- targets: [localhost:9100]

2.6.1.通过模板ID导入

k8s-容器监控与报警_k8s-容器监控与报警_23

k8s-容器监控与报警_k8s-容器监控与报警_24

模板ID:1860

k8s-容器监控与报警_k8s-容器监控与报警_25

模板ID:8919

k8s-容器监控与报警_k8s-容器监控与报警_26

3.监控pod资源

下载地址:​​https://github.com/google/cadvisor/releases​

cadvisor由谷歌开源,cadvisor不仅可以搜集一台机器上所有运行的容器信息,还提供
基础查询界面和http接口,方便其他组件如Prometheus进行数据抓取,cAdvisor可以
对节点机器上的资源及容器进行实时监控和性能数据采
集,包括CPU使用情况、内存使用情况、网络吞吐量及文件系统使用情况

下载:​​https://github.com/google/cadvisor/releases?page=3​

cadvisor镜像准备

docker pull google/cadvisor:v0.33.0
docker tag 752d61707eac harbor.gesila.com/k8s/cadvisor:v0.33.0
docker push harbor.gesila.com/k8s/cadvisor:v0.33.0

启动cadvisor容器

docker run \\
--volume=/:/rootfs:ro \\
--volume=/var/run:/var/run:rw \\
--volume=/sys:/sys:ro \\
--volume=/var/lib/docker/:/var/lib/docker:ro \\
--volume=/dev/disk/:/dev/disk:ro \\
--publish=8080:8080 \\
--detach=true \\
--name=cadvisor \\
harbor.gesila.com/k8s/cadvisor:v0.33.0

验证cadvisor web界面

访问node节点的cadvisor监听端口:http://192.168.47.53:8080

k8s-容器监控与报警_k8s-容器监控与报警_27

k8s-容器监控与报警_k8s-容器监控与报警_28

prometheus采集cadvisor数据

vim /usr/local/prometheus/prometheus.yml


k8s-容器监控与报警_k8s-容器监控与报警_29

systemctl restart prometheus

k8s-容器监控与报警_k8s-容器监控与报警_30

k8s-容器监控与报警_k8s-容器监控与报警_31

grafana添加pod监控模板

395

k8s-容器监控与报警_k8s-容器监控与报警_32

893

k8s-容器监控与报警_k8s-容器监控与报警_33

4.prometheus报警设置

prometheus触发一条告警的过程

prometheus--->触发阈值--->超出持续时间--->alertmanager--->
分组|抑制|静默--->媒体类型--->邮件|钉钉|微信等
分组(group):     #将类似性质的警报合并为单个通知。
静默(silences): #是一种简单的特定时间静音的机制,例如:服务器要升级维护
可以先设置这个时间段告警静默。
抑制(inhibition):#当警报发出后,停止重复发送由此警报引发的其他警报,可以消除冗余告警

k8s-容器监控与报警_k8s-容器监控与报警_34

tar xf alertmanager-0.18.0.linux-amd64.tar.gz  -C /usr/local/
ln -s /usr/local/alertmanager-0.18.0.linux-amd64 /usr/local/alertmanager
cd /usr/local/alertmanager

4.1.配置alertmanager

官方配置文档:​​https://prometheus.io/docs/alerting/latest/configuration/​

global:
resolve_timeout: 5m
smtp_smarthost: smtp.qq.com:465
smtp_from: 794411268@qq.com
smtp_auth_username: 794411268@qq.com
smtp_auth_password: koazmkwvoblwbebb
smtp_hello: @qq.com
smtp_require_tls: false

route:
group_by: [alertname]
group_wait: 10s
group_interval: 10s
repeat_interval: 2m
receiver: web.hook
receivers:
- name: web.hook
#webhook_configs:
#- url: http://127.0.0.1:5001/
email_configs:
- to: 794411268@qq.com
inhibit_rules:
- source_match:
severity: critical
target_match:
severity: warning
equal: [alertname, dev, instance]

4.2.启动alertmanager服务

./alertmanager --config.file=./alertmanager.yml &
#验证alertmanager的9093端口已经监听
lsof -i:9093

k8s-容器监控与报警_k8s-容器监控与报警_35

4.3.配置prometheus报警规则

vim /usr/local/prometheus/prometheus.yml

k8s-容器监控与报警_k8s-容器监控与报警_36

4.4.创建报警规则文件

vim /usr/local/prometheus/rule-linux36.yml

groups:
- name: linux36_pod.rules
rules:
- alert: Pod_all_cpu_usage
expr: (sum by(name)(rate(container_cpu_usage_seconds_totalimage!=""[5m]))*100) > 10
for: 5m
labels:
severity: critical
service: pods
annotations:
description: 容器 $labels.name CPU 资源利用率大于 06-k8s服务层event监控及报警

k8s容器资源限制,资源监控

k8s容器资源限制,资源监控

记一次k8s集群节点镜像存储容量报警问题

k8s 容器的资源需求,资源限制-监控-资源指标API及自定义指标API

K8S监控指标萌贝树母婴公司無坑骗