k8s-容器监控与报警
source link: https://blog.51cto.com/taowenwu/5244326
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
k8s-容器监控与报警
推荐 原创小怪獣55 2022-04-22 14:46:51 博主文章分类:k8s ©著作权
文章标签 k8s-容器监控与报警 文章分类 Linux 系统/运维 阅读数308
任意横向扩容与缩容,那么就需要监控服务能够自动对新创建的容器进行监控,当容器
删除后又能够及时的从监控服务中删除,而传统的zabbix的监控方式需要在每一个容器
中安装启动agent,并且在容器自动发现注册方面并没有比好的实现方式
1.Prometheus
官方文档: https://prometheus.io/docs/introduction/overview/
github地址: https://github.com/prometheus
下载地址: https://prometheus.io/download/
但是从k8s 1.8版本开始使用metrics API的方式监控,
并在1.11版本 正式将heapster替换,
后期的k8s监控主要是通过metrics Server提供核心监控指标,比如Node节点的CPU和
内存使用率,其他的监控交由另外一个组件Prometheus完成。
SoundCloud公司开发的开源监控系统,Prometheus是CNCF
(Cloud Native Computing Foundation,云原生计算基金会)继kubernetes 之
后毕业的第二个项目,prometheus在容器和微服务领域中得到了广泛的应用
1.1.特点
数据不使用MySQL这样的传统数据库,而是使用时序数据库,目前是使用的TSDB
支持第三方dashboard实现更高的图形界面,如grafana(Grafana 2.5.0版本及以上)
功能组件化
不需要依赖存储,数据可以本地保存也可以远程保存
服务自动化发现
强大的数据查询语句功(PromQL,Prometheus Query Language)
1.2.prometheus系统架构图
prometheus targets: #静态收集的目标服务数据
service discovery: #动态发现服务
prometheus alerting:#报警通知
pushgateway: #数据收集代理服务器(类似于zabbix proxy)
data visualization and export: #数据可视化与数据导出(访问客户端)
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
1.3.1.二进制方式安装
ln -s /usr/local/prometheus-2.11.1.linux-amd64 /usr/local/prometheus
1.3.2.prometheus启动脚本
-------------------------------------------------------------
[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 restart prometheus
systemctl enable prometheus
1.3.4.访问prometheus web界面
1.4.node exporter
监听端口为9100
1.4.1.二进制方式安装node exporter
ln -s /usr/local/node_exporter-0.18.1.linux-amd64 /usr/local/node_exporter
1.4.2.创建node exporter启动脚本
[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 restart node-exporter
systemctl enable node-exporter
1.4.4.访问node exporter web界面
1.5.prometheus采集node 指标数据
配置prometheus通过node exporter采集 监控指标数据
1.5.1.prometheus配置文件
- job_name: 'promethues-node'
static_configs:
- targets: ['192.168.47.53:9100','192.168.47.54:9100']
1.5.2.重启prometheus服务
1.5.3.prometheus验证node节点状态
1.5.4.prometheus验证node节点监控数据
2.grafana
监听3000端口
调用prometheus的数据,进行更专业的可视化
下载: https://grafana.com/get/?plcmt=top-nav&cta=downloads&tab=self-managed
https://grafana.com/grafana/download?pg=get&plcmt=selfmanaged-box1-cta1
2.1.安装
wget https://dl.grafana.com/enterprise/release/grafana-enterprise_8.5.0_amd64.deb
sudo dpkg -i grafana-enterprise_8.5.0_amd64.deb
2.2.配置文件
--------------------------------------------------------
[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 enable grafana-server.service
2.4.grafana web界面
默认账号和密码都是admin;登录进去要求强制修改密码
2.5.添加prometheus数据源
2.6.import模板
模板下载地址: https://grafana.com/grafana/dashboards/
模板:Node Exporter Full: https://grafana.com/grafana/dashboards/1860
static_configs:
- targets: ['localhost:9100']
2.6.1.通过模板ID导入
模板ID:1860
模板ID:8919
3.监控pod资源
下载地址: https://github.com/google/cadvisor/releases
基础查询界面和http接口,方便其他组件如Prometheus进行数据抓取,cAdvisor可以
对节点机器上的资源及容器进行实时监控和性能数据采
集,包括CPU使用情况、内存使用情况、网络吞吐量及文件系统使用情况
下载: https://github.com/google/cadvisor/releases?page=3
cadvisor镜像准备
docker tag 752d61707eac harbor.gesila.com/k8s/cadvisor:v0.33.0
docker push harbor.gesila.com/k8s/cadvisor:v0.33.0
启动cadvisor容器
--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界面
prometheus采集cadvisor数据
grafana添加pod监控模板
395
893
4.prometheus报警设置
prometheus触发一条告警的过程
分组|抑制|静默--->媒体类型--->邮件|钉钉|微信等
静默(silences): #是一种简单的特定时间静音的机制,例如:服务器要升级维护
可以先设置这个时间段告警静默。
抑制(inhibition):#当警报发出后,停止重复发送由此警报引发的其他警报,可以消除冗余告警
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/
resolve_timeout: 5m
smtp_smarthost: 'smtp.qq.com:465'
smtp_from: '[email protected]'
smtp_auth_username: '[email protected]'
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: '[email protected]'
inhibit_rules:
- source_match:
severity: 'critical'
target_match:
severity: 'warning'
equal: ['alertname', 'dev', 'instance']
4.2.启动alertmanager服务
#验证alertmanager的9093端口已经监听
lsof -i:9093
4.3.配置prometheus报警规则
4.4.创建报警规则文件
vim /usr/local/prometheus/rule-linux36.yml
- name: linux36_pod.rules
rules:
- alert: Pod_all_cpu_usage
expr: (sum by(name)(rate(container_cpu_usage_seconds_total{image!=""}[5m]))*100) > 10
for: 5m
labels:
severity: critical
service: pods
annotations:
description: 容器 {{ $labels.name }} CPU 资源利用率大于 75% , (current value is {{ $value }})
summary: Dev CPU 负载告警
- alert: Pod_all_memory_usage
expr: sort_desc(avg by(name)(irate(container_memory_usage_bytes{name!=""}[5m]))*100) > 1024*10^3*2
for: 10m
labels:
severity: critical
annotations:
description: 容器 {{ $labels.name }} Memory 资源利用率大于 2G , (current value is {{ $value }})
summary: Dev Memory 负载告警
- alert: Pod_all_network_receive_usage
expr: sum by (name)(irate(container_network_receive_bytes_total{container_name="POD"}[1m])) > 1024*1024*50
for: 10m
labels:
severity: critical
annotations:
description: 容器 {{ $labels.name }} network_receive 资源利用率大于 50M ,(current value is {{ $value }})
4.5.报警规则验证
cd /usr/local/prometheus/
./promtool check rules rule-linux36.yml #监测rule规则文件是否正确
Checking rule-linux36.yml
SUCCESS: 3 rules found
4.6.重启prometheus
4.7.prometheus首页状态
4.8.prometheus web界面验证报警规则
4.9.验证收到的报警邮件
5.prometheus监控haproxy
默认端口:9101
下载地址: https://prometheus.io/download/
cd /usr/local/
ln -s /usr/local/haproxy_exporter-0.9.0.linux-amd64 /usr/local/haproxy_exporter
./haproxy_exporter --haproxy.scrape-uri=unix:/run/haproxy/admin.sock
#通过状态页访问
./haproxy_exporter --haproxy.scrapeuri="http://haadmin:[email protected]:9999/haproxy-status;csv" &
5.1.prometheus server端添加haproxy数据采集
5.2.grafana添加模板
- 赞
- 1收藏
- 1评论
- 分享
- 举报
上一篇:k8s-基于NFS实现动静分离
Recommend
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK