大家好,我是Coder哥,上一篇咱们聊了 【DevOps-监控】 Docker可视化监控原理及收集计划,用的可视化计划是容器收集东西是 cAdvisor,但是 cAdvisor有个缺点是,数据并没有耐久化,虽然能显现历史数据,但是只能显现2分钟以内的事实图画,这在出产上用还不完善,那么咱们今日来聊个具体的全面的监控计划。咱们先看以下几个问题:(本文主要根据Docker环境)

  1. 出产环境监控究竟需什么样的功用?
  2. 监控收集软件及计划介绍
  3. (开搞)具体的装置计划

那么咱们先聊第一个问题

出产环境监控究竟需什么样的功用?

  咱们试想一下,假如布置一个监控体系到出产环境,需求满意哪些功用呢?既然是监控,必定需求监控咱们的主机资源信息包含cpu,内存,网络,磁盘等信息吧,其次还得监控容器的相关资源信息,然后咱们或许还需求历史数据 几周,几个月乃至几年的,那么监控到最终假如资源到达某个阈值或者OOM的时分,能够第一时刻告诉到正在结婚的,正在睡觉的,正在……的你。那么咱们总结一下上面的功用:

  1. 监控主机的CPU、内存、磁盘、网络等方面的目标
  2. 监控容器的CPU、内存、磁盘、网络等方面的目标
  3. 目标数据耐久化
  4. 目标数据可视化展现
  5. 资源到达某个阈值需求做预警告诉(这个这篇不具体翻开只预留功用进口)

那么根据上面的这些功用,咱们来看看怎么选型?

监控收集软件及计划介绍

  经过上面的介绍咱们知道了一个完善的监控大约都需求什么功用,那么接下来咱们就开端选合适的软件,这儿就直接给结果了,这些是咱们k8s里面线上用的一套,当然这些也能够适用于Docker。

  1. 主机监控: 能够选 node-exporter,node_exporter 就是抓取用于收集服务器节点的各种运转目标,现在 node_exporter 支撑简直所有常见的监控点,比方 conntrack,cpu,diskstats,filesystem,loadavg,meminfo,netstat 等。

  2. 容器监控: 提到容器监控咱们自然会想到 cAdvisor,上篇文章【DevOps-监控】 Docker可视化监控原理及收集计划,具体的介绍过 cAdvisor 能够供给对容器的实时监控和功用剖析,包含CPU、内存、磁盘、网络等方面的目标。

  3. 目标数据耐久化: Prometheus Server 用于抓取目标、存储时刻序列数据, 能够从满意 prometheus 格局要求的 /metrics 接口中获取所需数据并进行耐久化存储。现在大部分收集软件都支撑。

  4. 目标数据可视化展现: 这个必定选grafana, grafana是与prometheus 配套的可视化监控软件,支撑各种维度各种形状的可视化组件。

  5. 预警告诉:预警告诉,能够用premetheus的预警模块:alertmanager,它能够经过 Email、Wechat(Robot)、Dingtalk(webhook)等方法来接受警报告诉。

大厂的监控系统是怎么做的? (保姆级 4000字带你分析)
如图所示,咱们能够经过 node-exporter 能够获取主机数据,cAdvisor 获取主机上的镜像信息,prometheus 守时调用node-exportercAdvisor/metrics 接口获取数据并存储到磁盘,然后grafana展现的时分直接从 prometheus里面获取数据进行展现。咱们还能够在premetheus alertmanager 装备相应的规矩,当数据到达必定的阈值的时分触发预警战略。

经过上面的了解咱们大约知道监控的逻辑是什么样了,那么咱们假如根据Docker的话要如何落地实施呢?下面咱们来看一下具体的装置脚本及一键布置脚本。

具体的装置计划

一、环境信息

软件 版别 阐明
Ubuntu 22.04.1 IP: 192.168.111.37
Docker 20.10.21
Prometheus bitnami/prometheus:2.45.0 敞开端口: 8093
node-exporter bitnami/node-exporter:1.6.1 敞开端口: 8092
cAdvisor todocoder/cadvisor:v0.47.2 敞开端口: 8091
Grafana grafana/grafana:9.5.6 敞开端口: 8094

二、装置监控体系

1. cAdvisor 的装置与运用

cAdvisor的简介能够检查上一篇文章【【DevOps-监控】 Docker可视化监控原理及收集计划】

下面咱们以 cAdvisor 0.47.2 版别为例,演示一下 cAdvisor 的装置与运用。

cAdvisor 官方供给了 Docker 镜像,咱们只需求拉取镜像并且发动镜像即可。

由于 cAdvisor 镜像存放在谷歌的 gcr.io 镜像仓库中,国内无法拜访到。我把最新版的打好的镜像放在了 Docker Hub。你能够直接运用 docker pull todocoder/cadvisor:v0.47.2 指令从 Docker Hub 拉取。

首要运用以下指令发动 cAdvisor:

$ docker run \
-v=/:/rootfs:ro \
-v=/var/run:/var/run:ro \
-v=/sys:/sys:ro \
-v=/var/lib/docker/:/var/lib/docker:ro \
-v=/dev/disk/:/dev/disk:ro \
-p=8091:8080 \
-d=true \
--privileged=true \
--name=todocoder-cadvisor \
todocoder/cadvisor:v0.47.2

指令阐明:

-v,–volume: 挂载本地目录到镜像内目录: 宿主机目录:容器目录

-p,–publish: 指定端口映射,格局为:主机(宿主)端口:容器端口

-d, –detach: 指定容器在后台运转,默以为 false

–privileged=true: 铺开容器的权限

–name: todocoder-cadvisor 为容器指定一个称号,名字叫 todocoder-cadvisor ;

能够看到,cAdvisor 现已成功发动,咱们能够经过 http://192.168.111.37:8091 拜访到 cAdvisor 的 Web 界面。

大厂的监控系统是怎么做的? (保姆级 4000字带你分析)

cAdvisor 检查容器监控

检查Docker容器的运用情况,能够拜访 http://192.168.111.37:8091/docker/,在这个页面会显现Docker的基本信息和容器的运转情况,如图:

大厂的监控系统是怎么做的? (保姆级 4000字带你分析)

上图中的 Subcontainers 下会列出当前主机上Docker运转的所有容器,点击其间一个容器即可检查该容器的具体运转状况,如下图:

大厂的监控系统是怎么做的? (保姆级 4000字带你分析)

cAdvisor的Web界面供给了容器的实时监控信息,包含CPU运用率、内存运用量、网络流量、磁盘IO等目标。你也能够经过界面上的图表和表格来检查这些目标的历史数据和趋势。

整体来说,运用 cAdvisor 监控容器具有以下特点:

  • 能够同时收集物理机和容器的状况;
  • 能够展现监控历史数据;

cAdvisor还供给了RESTful API http://192.168.111.37:8091/metrics,能够经过API获取容器的监控数据,Prometheus 能够经过这个接口来拉取数据。这儿就不贴图了

2. 装置node-exporter

node-exporter 主要是用来收集主机的目标信息,比cAdvisor 的数据要全面,node_exporter 支撑简直所有常见的监控点,比方 conntrack,cpu,diskstats,filesystem,loadavg,meminfo,netstat 等。

node-exporter的装置和运用
docker run -d -p 8092:9100 --name todocoder-node \
  -v "/proc:/host/proc:ro" \
  -v "/sys:/host/sys:ro" \
  -v "/:/rootfs:ro" \
  --privileged=true \
  -v /etc/localtime:/etc/localtime \
  bitnami/node-exporter:1.6.1
  # -v /etc/localtime:/etc/localtime 解决时区问题

指令阐明:

-v,–volume: 挂载本地目录到镜像内目录: 宿主机目录:容器目录

-p,–publish: 指定端口映射,格局为:主机(宿主)端口:容器端口

-d, –detach: 指定容器在后台运转,默以为 false

–privileged=true: 铺开容器的权限

–name:todocoder-node 为容器指定一个称号,名字叫 todocoder-node ;

等候几秒钟,检查端口8092是否起来了

netstat -anpt  | grep 8092

翻开页面 http://192.168.111.37:8092/metrics能够看到一些目标数据

3. 装置prometheus

Prometheus 主要是用于抓取目标、存储时刻序列数据,关于一般运用只需求能够供给一个满意 prometheus 格局要求的 /metrics 接口就能够让 Prometheus 来接收监控,比方上面的 node-exporter 的 /metrics 接口,prometheus就能够直接运用。

prometheus的装置和运用

1、创立prometheus存储数据目录:

mkdir -p /data/prometheus/data
chmod 777 /data/prometheus/data

2、prometheus 装备文件挂载出来,方便修正,vi /data/prometheus/conf/prometheus.yml

rule_files:
  - rule/record/*.yml
scrape_configs:
  - job_name: "todocoder-prometheus"
    static_configs:
      - targets: ["192.168.111.37:8093"]
  - job_name: "todocoder-cadvisor"
    static_configs:
      - targets: ["192.168.111.37:8091"]
  - job_name: "todocoder-node37" # 这个是监控node
    static_configs:
      - targets: ['192.168.111.37:8092']

job_name: “todocoder-prometheus”装备抓取Prometheus自身相关目标;

job_name: “todocoder-cadvisor” 装备抓取之前装备的cAdvisor组件目标。

job_name: “todocoder-node37″装备抓取Node相关目标;

3、Docker布置Prometheus: docker pull bitnami/prometheus:2.45.0

docker run \
-d=true \
-p=8093:9090 \
--name=todocoder-prometheus \
-v=/data/prometheus/conf:/opt/bitnami/prometheus/conf \
-v=/data/prometheus/data:/opt/bitnami/prometheus/data \
bitnami/prometheus:2.45.0 \
--web.enable-lifecycle --web.enable-admin-api \
--config.file=/opt/bitnami/prometheus/conf/prometheus.yml \
--storage.tsdb.path=/opt/bitnami/prometheus/data

–web.enable-lifecycle –web.enable-admin-api供给rest api接口方法办理prometheus,比方装备热加载:curl -XPOST http://192.168.111.37:8093/-/reload。

留意:这儿将prometheus装备文件和存储目录外挂出来,避免容器重启后数据丢掉。

咱们能够翻开web页面:http://192.168.111.37:8093/graph 并输入 container_spec_memory_limit_bytes 检查数据:

大厂的监控系统是怎么做的? (保姆级 4000字带你分析)

咱们在上面装备了三个 metrics目标,咱们看一下效果 http://192.168.111.37:8093/targets

大厂的监控系统是怎么做的? (保姆级 4000字带你分析)

4. 装置Grafana

Grafana 是一跨平台的开源的可视化剖析东西。现在网络架构和运用剖析中最流行的时序数据展现东西,主要用于大规模目标数据的可视化展现。

它能够大大帮助你简化监控的复杂度,你只需求供给你需求监控的数据,它就能够帮你生成各种可视化外表。同时它还有报警功用,能够在体系出现问题时告诉你。

Grafana的装置和运用
docker run \
-d=true \
-p=3001:3000 \
-v=/data/grafana:/var/lib/grafana \
--name todocoder-grafana \
grafana/grafana:9.5.6

# 默许账号/密码:admin/admin
http://192.168.111.37:3001

假如有如下报错

You may have issues with file permissions, more information here: docs.grafana.org/installatio… mkdir: can’t create directory ‘/var/lib/grafana/plugins’: Permission denied

# 查询镜像用户ID
docker run --entrypoint "id" grafana/grafana:9.5.6
uid=472(grafana) gid=0(root) groups=0(root)

# 指定uid目录权限
chown -R 472:472 /data/grafana/
# 发动
docker restart todocoder-grafana

大厂的监控系统是怎么做的? (保姆级 4000字带你分析)

以上是Docker装置的流程,别的还有,一键装置脚本

增加数据集

如图的流程

大厂的监控系统是怎么做的? (保姆级 4000字带你分析)

大厂的监控系统是怎么做的? (保姆级 4000字带你分析)

输入对应的prometheus 服务的地址

大厂的监控系统是怎么做的? (保姆级 4000字带你分析)

增加可视化页面

grafana.com/grafana/das…

1. 翻开grafana dashboards页面 -> New -> import

大厂的监控系统是怎么做的? (保姆级 4000字带你分析)

2. 在import页面输入 官方的模版连接

grafana.com/grafana/das…

大厂的监控系统是怎么做的? (保姆级 4000字带你分析)

3. 翻开页面看一下效果图

大厂的监控系统是怎么做的? (保姆级 4000字带你分析)

大厂的监控系统是怎么做的? (保姆级 4000字带你分析)

这个是修正后的显现页面,官方的是根据云服务商集群显现,最新修正后的模板和docker-compose一键布置脚本 地址

结语

本文具体介绍如何在出产环境中实施全套的监控计划,包含运用Docker进行容器化办理,利用Grafana进行可视化监控,运用Prometheus进行数据收集和剖析,以及运用cAdvisor和Node-exporter监控容器资源。您将逐步了解每个东西的运用方法,并学会将它们整合到一同,以实现全面的出产环境监控。

感谢各位能看到这儿,觉得文章有用的话记住关注一下,别忘了点赞保藏哦,最终打个小广告

微信工号搜: TodoCoder

会不守时分享 Java,Go,Docker,k8s等 技术文章,公号无广告,无引荐,纯分享