容器监控

docker容器监控分为两部分:
	-宿主机的资源:剩余内存,磁盘空间,cpu负载
    -容器资源:每个容器使用的cpu,内存,磁盘
zabbix监控(基于命令行取值,命令行能够得到数据,zabbix也能获取到)
zabbix和prometheus区别:zabbix更适用于linux系统,pr更适合容器

在了解prometheus(普罗米修斯)之前,我们先了解下zabbix。

1.zabbix简介

参考: https://baijiahao.baidu.com/s?id=1689945188583938997&wfr=spider&for=pc

zabbix是开源的分布式监控系统,支持多种采集方式和采集客户端, 同时支持 SNMP、IPMI、JMX、Telnet、SSH 等多种协议,它将采集到的数据存放到数据库中,然后对其进行分析整理,如果符合告警规则,则触发相应的告警。

核心组件:Agent和Server。Agent主要负责采集数据并将数据发送到server/proxy,除此之外,为扩展监控项,agent还支持执行自定义脚本,Server主要负责接受agent发送的监控信息,并进行汇总、触发告警等。

zabbix使用关系型数据存储时序数据,因此在大规模集群监控时常常在数据存储方面方面捉襟见肘。

2.prometheus

2.1 优缺点
1.提供多维度数据模型和灵活的查询方式,通过将监控指标关联多个 tag,来将监控数据进行任意维度的组合,并且提供简单的 PromQL 查询方式,还提供 HTTP 查询接口,可以很方便地结合 Grafana 等 GUI 组件展示数据。
2.在不依赖外部存储的情况下,支持服务器节点的本地存储,通过 Prometheus 自带的时序数据库,可以完成每秒千万级的数据存储;不仅如此,在保存大量历史数据的场景中,Prometheus 可以对接第三方时序数据库和 OpenTSDB 等。
3.定义了开放指标数据标准,以基于 HTTP 的 Pull 方式采集时序数据,只有实现了 Prometheus 监控数据才可以被 Prometheus 采集、汇总、并支持 Push 方式向中间网关推送时序列数据,能更加灵活地应对多种监控场景。
4.支持通过静态文件配置和动态发现机制发现监控对象,自动完成数据采集。Prometheus 目前已经支持 Kubernetes、etcd、Consul 等多种服务发现机制。
5.易于维护,可以通过二进制文件直接启动,并且提供了容器化部署镜像。
6.支持数据的分区采样和联邦部署,支持大规模集群监控。
2.2 主要组件
  1. prometheus Server(核心部分)

    prometheus server本身就是一个时序数据库,负责对监控数据的获取、存储和查询。
    提供了自定义的promql语言,实现对数据的查询以及分析
    
  2. 推送网关(push gateway)

    主要是实现接收由 Client push 过来的指标数据,在指定的时间间隔,由主程序来抓取。其实就是将exporter采集到的数据推送给prometheus server
    
  3. Exporter

    主要用来采集数据,并通过HTTP服务的形式暴露给prometheus Server,prometheus Server通过访问该Exporter提供的接口,来获取到需要采集的监控数据
    

  4. 告警管理(Alertmananager)

    主要负责实现报警功能,在prometheus Server 中支持基于promQL创建告警规则,如果满足定义的规则,则产生一条告警信息
    
2.3 架构

我们需要在每一台要监控的服务器上安装采集软件(node_exporter、mysql_exporter等),每安装一台监控服务器都需要在Prometheus主服务上yaml文件中配置对应的ip和监控节点安装的服务,然后Prometheus主服务会从监控节点上取数据,做分析,然后根据自身rule来判断是否报警。因为Prometheus自身图形界面很烂,因此常搭配grafana(专业出图软件)来出图。
它针对大规模的集群环境设计了拉取式的数据采集方式,只需要在应用里面实现一个metrics接口,然后把这个接口告诉Prometheus就可以完成数据采集了
2.4 和influxdb区别
influxdb仅仅是一个数据库,它被动的接受客户的数据插入和查询请求。而后者是完整的监控系统,能抓取数据、查询数据、报警等功能

2.5 安装

prometheus安装: https://www.jianshu.com/p/8c898785c8ca,安装完或修改完yml文件可使用命令./promtool check config ./prometheus.yml检查配置文件是否正确

granafa国内元: https://mirrors.huaweicloud.com/grafana/

2.6 nginx监控nginx-vts-exporter

两种监控方案: nginx-lua-prometheus和nginx-vts-exporter

这里使用第二种,部署参考:https://blog.csdn.net/qq_32502263/article/details/109766259

1.nginx-module-vts

在nginx.conf用来实时出json数据,文件配置如下:

http {
    vhost_traffic_status_zone; #http下开启vhost过滤
    server {
        listen 8088;
        location /status {
            vhost_traffic_status_display; #添加此两句
            vhost_traffic_status_display_format html;
        }
    }

2.nginx-vts-exporter

默认端口9913,用来获取nginx-module-vts的json格式数据,可使用http://xx:9913/metrics来访问

2.7 blackbox_exporter
2.7.1 配置

blackbox_exporter是Prometheus 官方提供的 exporter ,可以提供 http、dns、tcp、icmp 的监控数据采集。

配置参考:https://www.cnblogs.com/xiao987334176/p/12022482.html

配置完加入systemcl管理

[Unit]
Description=blackbox_exporter
After=network.target

[Service]
Type=simple
User=root
Group=root
# 启动命令
ExecStart=/usr/local/blackbox_exporter/blackbox_exporter \
    --config.file=/usr/local/blackbox_exporter/blackbox.yml \
    --web.listen-address=:9115
Restart=on-failure

[Install]
WantedBy=multi-user.target

执行命令systemctl daemon-reload 使新服务配置文件生效,然后systemctl start blackxx

prometheus.yml中加入配置如下(监听服务端口)配置完重启prometheus,再次访问会出现如下图

2.7.2 访问prometheus查看

访问http://192.168.181.141:9090/,发现3个端口都是up状态,

2.7.3 访问blackbox_exporter服务

访问http://192.168.181.141:9115/,blackbox_exporter默认9115端口,出现如下图日志:


注意:当停掉3000、3001、3002服务,访问9090端口是不会发生变化的,因为监听的是9115端口,9115的blackbox_exporter监听的才是3000服务

2.7.4grafana配置

1.启动grafana:docker run -d -p3000:30000 grafana/grafana

2.进入grafana引入模板9965

3.下载grafana-piechart-panel:docker exec -it grafana容器id grafana-cli plugins install grafana-piechart-panel并重启dockerdocker restart grafana容器id

4.再次访问grafana,得到如下图结果,如果要告警,需配置rules

2.8 prometheus告警:

部署参考:https://blog.csdn.net/u012599988/article/details/102898282

参数注意: https://blog.csdn.net/weixin_38645718/article/details/103040647

#alert的三种状态
1. pending:警报被激活,但是低于配置的持续时间。这里的持续时间即rule里的FOR字段设置的时间。改状态下不发送报警。
2. firing:警报已被激活,而且超出设置的持续时间。该状态下发送报警。
3. inactive:既不是pending也不是firing的时候状态变为inactive
prometheus触发一条告警的过程:
prometheus--->触发阈值--->超出持续时间--->alertmanager--->分组|抑制|静默--->媒体类型--->邮件|钉钉|微信等。

如果单单只是配置监控,只需要在prometheus.yml文件scrape_configs下配置即可,如果要加上告警,需要在rule_files下面配置(所有的监控节点都会按照rule_files来进行告警),配置完之后重启prometheus,在rules和Alerts中会看到相应的信息,在配置告警之前这两部分是空的

#当前路径下alerting/black.yml
groups:
- name: blackbox_network_stats   #组名
  rules:
  - alert: blackbox_network_stats  #同一组的名称不能重复
    expr: probe_success == 0
    for: 10s  #如1分钟内持续为0  报警
    labels:
      severity: critical
    annotations:
      description: 'Job {{ $labels.job }} 中的 网站/接口 {{ $labels.instance }} 已经down掉超过一分钟.'
      summary: '网站/接口 {{ $labels.instance }} down ! ! !'

如果要发送邮件、钉钉、webhook,就需要用到Alertmanager插件,这是一个独立的告警模块,接受promethues等客户端(上述rules文件夹下面的配置文件)发来的告警信息,然后通过分组、删除重复等处理,最后发送警告信息

https://www.cnblogs.com/gschain/p/11697200.html

alertmanager.yml 配置如下

global:
  resolve_timeout: 1m
  smtp_smarthost: 'smtp.163.com:25'
  smtp_from: 'a17320180454@163.com'
  smtp_auth_username: 'a17320180454@163.com'
  smtp_auth_password: 'QMABWVAUUQXCLYGT'
  smtp_hello: 'office365.com'
  smtp_require_tls: false
  
route:
  group_by: ['alertname']
  group_wait: 30s
  group_interval: 1m
  repeat_interval: 1m
  receiver: default

  routes:
  - receiver: email
    group_wait: 10s
receivers:
- name: 'default'
  email_configs:
  - to: '1151048226@qq.com'
    send_resolved: true

- name: 'email'
  email_configs:
  - to: '1151048226@qq.com'
    send_resolved: true

2.9 配置文件简介
# my global config
global:
  scrape_interval:     15s #proemtheus抓取信息时间间隔
  evaluation_interval: 15s #每隔多长时间计算一次rules,并发送给alertmanagers
alerting:               #此处用到单独Alertmanager插件,默认启动端口9093,告警的信息会发送给这个插件
  alertmanagers:
  - static_configs:
    - targets:
      #- 192.168.1.12:9093 
rule_files:             #配置rules之后,在rules和Alerts中会看到对应的状态
  - "alerting/*.yml"
scrape_configs:         #监控节点配置(会在http://192.168.1.12:9090/targets中显示)
  - job_name: 'prometheus'
    static_configs:
    - targets: ['localhost:9090']

3.k8s监控

cadvisor是集成于k8s的agent之中的,负责监控容器资源,和prometheus官网提供的exporter是同一作用,k8s要实现kubectl top node命令需要先安装metrics服务,负责收集cadvisor中的数据,而prometheus自身集成的有metrics服务,会自动拉取exporter的数据,然后存入本身自带库

  • cadvisor+heapster/metrics+influxdb+dashboard

    缺点:只能支持监控容器资源,无法支持业务监控,扩展性较差

  • cadvisor/exporter+prometheus+grafana

    总体流程: 数据采集–>汇总–>处理–>存储–>展示

    容器监控:

    1.prometheus使用cadvisor采集容器监控指标,cadvisor集成在k8s的kubelet中-通过prometheus进程存储-使用grafana进行展现
    2.node的监控-通过node_pxporter采集当前主机的资源-通过prometheus进程存储-使用grafana进行展现
    3.master的监控-通过kube-state-metrics插件从k8s中获取到apiserver的相关数据-通过prometheus进程存储-使用grafana进行展现
    
    

    2.2 Prometheus+Grafana的监控部署

    部署之前工作:

    1. 安装好metrics-sever服务

    2. 同步windows和linux时间(每台机器)

      yum install -y ntpdate
      sudo ntpdate time.windows.com
      sudo hwclock --localtime --systohc
      
      

      1944728-20210314192656087-443536714

    2.2.1 master/node节点环境部署

    • 在master可以进行安装部署
      安装git,并下载相关yaml文件
    git clone https://github.com/redhatxl/k8s-prometheus-grafana.git
    
    
    • 在node节点下载监控所需镜像
    docker pull prom/node-exporter
    docker pull prom/prometheus:v2.0.0
    docker pull grafana/grafana:4.2.0
    
    

    2.2.2 采用daemonset方式部署node-exporter组件

    kubectl create -f  node-exporter.yaml 
    
    

    添加标注如下:

    annotations:
            prometheus.io/scrape: 'true'
            prometheus.io/port: '9100'
            prometheus.io/path: '/metrics'
    
    
    

    2.2.3 部署prometheus组件

    2.2.3.1 rbac文件
    kubectl create -f  k8s-prometheus-grafana/prometheus/rbac-setup.yaml
    
    
    2.2.3.2 以configmap的形式管理prometheus组件的配置文件
    kubectl create -f  k8s-prometheus-grafana/prometheus/configmap.yaml 
    
    
    2.2.3.3 Prometheus deployment 文件
    kubectl create -f  k8s-prometheus-grafana/prometheus/prometheus.deploy.yml 
    
    
    2.2.3.4 Prometheus service文件
    kubectl create -f  k8s-prometheus-grafana/prometheus/prometheus.svc.yml 
    
    

    2.2.4 部署grafana组件

    2.2.4.1 grafana deployment配置文件
    kubectl create -f   k8s-prometheus-grafana/grafana/grafana-deploy.yaml
    
    
    2.2.4.2 grafana service配置文件
    kubectl create -f   k8s-prometheus-grafana/grafana/grafana-svc.yaml
    
    
    2.2.4.3 grafana ingress配置文件

    登录后复制

    kubectl create -f   k8s-prometheus-grafana/grafana/grafana-ing.yaml
    
    

    安装完成之后操作:

    配置grafana:

    1.data sources添加(url和access可替换)

    2.添加dashboard(默认的可能无法显示数据),输入315编号即可。

    1. 查看node-exporter,192.168.1.10:31672端口
    2. 查看prometheus,192.168.1.10:30003端口
    3. 查看granfa,192.168.1.10:32501端口

4.promethues数据持久化

数据持久化分为本地存储和远端存储。

本地存储非常简单,只用命令行启动参数即可( —storage.tsdb.path )

远端存储的外部服务可以是influxdb、mysql、消息队列等,通常是在prometheus.yml中配置remote_write,remote_read参数来进行http通信

在配置本机服务时,会在配置文件中添加对应的存储路径,默认存储15天

ExecStart=/root/prometheus/prometheus --config.file=/root/prometheus/prometheus.yml --storage.tsdb.path=/root/prometheus/data

4.1rpm安装influxdb
wget https://repos.influxdata.com/rhel/6Server/x86_64/stable/influxdb-1.2.0.x86_64.rpm
rpm -ivh influxdb-1.2.0.x86_64.rpm

安装完启动服务:systemctl start influxdb.service

创建数据库curl -XPOST http://localhost:8086/query --data-urlencode "q=CREATE DATABASE prometheus1"

influxdb对应prometheus的接口如下

/api/v1/prom/read
/api/v1/prom/write
/api/v1/prom/metrics

因此在prometeus.yml中配置如下

remote_write:
   - url: "http://localhost:8086/api/v1/prom/write?db=prometheus1"
remote_read:
   - url: "http://localhost:8086/api/v1/prom/read?db=prometheus1"

https://blog.csdn.net/Happy_Sunshine_Boy/article/details/107806342

4.2 influxdb集群

集群采用influx-proxy方式

https://www.cnblogs.com/enobear/p/13595712.html

5.prometheus高可用

总体三种方式: https://zhuanlan.zhihu.com/p/86763004

  • 部署多个相同的server。server1和server2配置完全一样,都要监控所有的数据

  • 基于上面方法加上第三方持久化存储

  • 基于联邦机制

    为什么有联邦机制:单一的prometheus无法处理大量的采集任务,将不同的采集任务分配到不同的prom节点中,从而实现功能分区,这就叫联邦机制
    什么是联邦机制,Server1和server2分别抓取一部分数据,然后由server中心从1和2中抓取需要的数据存入第三方存储
    联邦机制适用于两种场景:
    1.单数据中心(一般公司用)
    2.多数据中心
    
    

    联邦部署参考: https://blog.51cto.com/u_11954248/2537706

6.promql

https://www.cnblogs.com/linuxk/p/12054401.html

查询方式:metrics_name{查询条件}[范围] offset 位移(天数)

监控指标名称查询
范围查询
时间位移查询
聚合查询

4种metrics(指标)

https://blog.csdn.net/weixin_37512224/article/details/105248696

posted @ 2023-02-26 11:56  MISF  阅读(42)  评论(0编辑  收藏  举报
     JS过度和变形效果演示   
  
    html5.png