Comment fonctionne le système de surveillance de la grande usine ? (Nounou niveau 4000 mots pour votre analyse)

  Bonjour à tous, je suis Coder. Dans le dernier article, nous avons parlé du principe de surveillance visuelle et du schéma de collecte de [DevOps-Monitoring] Docker . Le schéma de visualisation utilisé est cAdvisor, qui est un outil de collecte de conteneurs. Cependant, cAdvisor a un inconvénient qui les données ne sont pas persistantes. , bien qu'il puisse afficher des données historiques, il ne peut afficher des images réelles qu'en 2 minutes, ce qui n'est pas parfait pour une utilisation en production, parlons donc aujourd'hui d'une solution de surveillance détaillée et complète. Examinons d'abord les questions suivantes : (Cet article est principalement basé sur l'environnement Docker)

  1. Quels types de fonctions sont nécessaires pour la surveillance de l'environnement de production ?
  2. Présentation du logiciel et du programme de surveillance et d'acquisition
  3. (ouvert) plan d'installation détaillé

Parlons donc de la première question

Quels types de fonctions sont nécessaires pour la surveillance de l'environnement de production ?

  Imaginons, si un système de surveillance est déployé dans un environnement de production, quelles fonctions doivent être remplies ? Puisqu'il surveille, nous devons surveiller les informations sur les ressources de notre hôte, y compris le processeur, la mémoire, le réseau, le disque et d'autres informations.Deuxièmement, nous devons surveiller les informations sur les ressources pertinentes du conteneur, puis nous pouvons avoir besoin de données historiques pendant des semaines, des mois ou même des années Oui, alors à la fin du suivi, si la ressource atteint un certain seuil ou OOM, vous pouvez être notifié au plus vite à vous qui vous mariez, couchez, ou.... Résumons donc les fonctions ci-dessus :

  1. Surveiller le processeur hôte, la mémoire, le disque, le réseau et d'autres indicateurs
  2. Surveiller le processeur, la mémoire, le disque, le réseau et d'autres indicateurs du conteneur
  3. Persistance des données métriques
  4. Affichage de visualisation des données de l'indicateur
  5. Lorsque la ressource atteint un certain seuil, une notification d'alerte précoce est requise (cet article ne se développera pas en détail, seule l'entrée de la fonction est réservée)

Donc sur la base des fonctions ci-dessus, regardons comment choisir un modèle ?

Présentation du logiciel et du programme de surveillance et d'acquisition

  Grâce à l'introduction ci-dessus, nous savons de quelles fonctions un système de surveillance parfait a besoin, puis nous commencerons à choisir le logiciel approprié, et ici nous donnerons directement les résultats.Ce sont les ensembles utilisés en ligne dans nos k8, bien sûr, ce sont aussi Peut être adapté pour 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)等方式来接受警报通知。

Système de surveillance Docker 如图所示,我们可以通过 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 界面。

cadvisor1.png

cAdvisor 查看容器监控

查看Docker容器的使用情况,可以访问 http://192.168.111.37:8091/docker/,在这个页面会显示Docker的基本信息和容器的运行情况,如图:

Utilisation des ressources d'image

上图中的 Subcontainers 下会列出当前主机上Docker运行的所有容器,点击其中一个容器即可查看该容器的详细运行状态,如下图:

cadvisor5.png

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 查看数据:

prometheus1.png

我们在上面配置了三个 metrics指标,我们看一下效果 http://192.168.111.37:8093/targets

prometheus2.png

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

如果有如下报错

Vous pouvez avoir des problèmes avec les autorisations de fichiers, plus d'informations ici : docs.grafana.org/installatio… mkdir : impossible de créer le répertoire '/var/lib/grafana/plugins' : autorisation refusée

# 查询镜像用户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

grafana7.png

Ce qui précède est le processus d'installation de Docker.De plus, il existe un script d'installation en un clic

ajouter un ensemble de données

Le processus illustré sur la figure

grafanaaddsource1.png

grafanaaddsource2.png

Entrez l'adresse du service prometheus correspondant

grafanaaddsource3.png

Ajouter une page de visualisation

grafana.com/grafana/das…

1. Ouvrez la page des tableaux de bord grafana -> Nouveau -> importer

grafanaimport1.png

2. Entrez le lien du modèle officiel sur la page d'importation

grafana.com/grafana/das…

grafanaimport6.png

3. Ouvrez la page pour voir le rendu

grafanaimport3.png

grafanaimport4.png

Ceci est la page d'affichage modifiée, la page officielle est basée sur l'affichage du cluster du fournisseur de services cloud, le dernier modèle modifié et l'adresse du script de déploiement en un clic docker-compose

épilogue

Cet article explique en détail comment mettre en œuvre un ensemble complet de solutions de surveillance dans l'environnement de production, y compris l'utilisation de Docker pour la gestion des conteneurs, l'utilisation de Grafana pour la surveillance visuelle, l'utilisation de Prometheus pour la collecte et l'analyse des données, et l'utilisation de cAdvisor et Node-exporter pour surveiller le conteneur. ressources. Vous apprendrez à utiliser chaque outil étape par étape et à les intégrer ensemble pour une surveillance complète de l'environnement de production.

Merci d'avoir lu ceci, si vous pensez que l'article est utile, n'oubliez pas de faire attention, n'oubliez pas d'aimer et de collecter, et enfin de mettre une petite publicité

Recherche de compte d'emploi WeChat : TodoCoder

Partagera de temps en temps Java, Go, Docker, k8s et d'autres articles techniques, le compte public n'a pas de publicités, pas de recommandations, partage pur

Guess you like

Origin juejin.im/post/7259945408762806332