k8s-容器监控与报警

网友投稿 372 2022-09-11

k8s-容器监控与报警

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

1.Prometheus

官方文档:​​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系统架构图

prometheus server: #主服务,接受外部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

此次实验安装:​​​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

1.3.2.prometheus启动脚本

vim /lib/systemd/system/prometheus.service-------------------------------------------------------------[Unit]Description=Prometheus ServerDocumentation=--config.file=/usr/local/prometheus/prometheus.yml[Install]WantedBy=multi-user.target

1.3.3.启动prometheus服务

systemctl daemon-reloadsystemctl restart prometheussystemctl enable prometheus

1.3.4.访问prometheus web界面

exporter

监听端口为9100

收集各k8s 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

1.4.2.创建node exporter启动脚本

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

1.4.3.启动node exporter服务

systemctl daemon-reloadsystemctl restart node-exportersystemctl enable node-exporter

1.4.4.访问node exporter web界面

指标数据

配置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']

1.5.2.重启prometheus服务

systemctl restart prometheus

1.5.3.prometheus验证node节点状态

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

2.grafana

监听3000端口

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

下载:​​apt-get install -y adduser libfontconfig1wget dpkg -i grafana-enterprise_8.5.0_amd64.deb

2.2.配置文件

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

2.3.启动grafana

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

2.4.grafana web界面

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

2.5.添加prometheus数据源

2.6.import模板

模板下载地址:​​Exporter Full:​​job_name: node static_configs: - targets: ['localhost:9100']

2.6.1.通过模板ID导入

模板ID:1860

模板ID:8919

3.监控pod资源

下载地址:​​pull google/cadvisor:v0.33.0docker tag 752d61707eac harbor.gesila.com/k8s/cadvisor:v0.33.0docker 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监听端口:/usr/local/prometheus/prometheus.yml

systemctl restart prometheus

grafana添加pod监控模板

395

893

4.prometheus报警设置

prometheus触发一条告警的过程

分组(group): #将类似性质的警报合并为单个通知。静默(silences): #是一种简单的特定时间静音的机制,例如:服务器要升级维护可以先设置这个时间段告警静默。抑制(inhibition):#当警报发出后,停止重复发送由此警报引发的其他警报,可以消除冗余告警

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/alertmanagercd /usr/local/alertmanager

4.1.配置alertmanager

官方配置文档:​​ 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: falseroute: group_by: ['alertname'] group_wait: 10s group_interval: 10s repeat_interval: 2m receiver: 'web.hook'receivers:- name: 'web.hook' #webhook_configs: #- url: ' 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

4.3.配置prometheus报警规则

vim /usr/local/prometheus/prometheus.yml

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_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

systemctl restart prometheus

4.7.prometheus首页状态

4.8.prometheus web界面验证报警规则

4.9.验证收到的报警邮件

5.prometheus监控haproxy

默认端口:9101

下载地址:​​xf haproxy_exporter-0.9.0.linux-amd64.tar.gz -C /usr/local/cd /usr/local/ln -s /usr/local/haproxy_exporter-0.9.0.linux-amd64 /usr/local/haproxy_exporter

#通过socket访问./haproxy_exporter --haproxy.scrape-uri=unix:/run/haproxy/admin.sock#通过状态页访问./haproxy_exporter --haproxy.scrapeuri="&

5.1.prometheus server端添加haproxy数据采集

vim /usr/local/prometheus/prometheus.yml

systemctl restart prometheus

5.2.grafana添加模板

367

2428

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:go每日新闻(2021-03-11)——k8s调度器启动流程分析
下一篇:想从纳达尔手中抢冠军?西西帕斯的功力还不够!
相关文章

 发表评论

暂时没有评论,来抢沙发吧~