一键部署Prometheus,并预置仪表盘和数据源

本文涉及的产品
可观测监控 Prometheus 版,每月50GB免费额度
可观测可视化 Grafana 版,10个用户账号 1个月
简介: 一键部署Prometheus + Grafana + cAdvisor + node-exporter,搭建主机或容器监控。利用grafana的provisioning方式,通过配置的方式预置仪表盘和数据源。

零、前言


当中秋节遇上教师节,那就是双倍的祝福和快乐~~键客小盒子祝大家中秋节圆满!教师节快乐!

 

一、概述

Prometheus 是一个开源的系统监控和报警系统,现在已经加入到 CNCF 基金会,成为继 k8s 之后第二个在 CNCF 托管的项目,在 kubernetes 容器管理系统中,通常会搭配 prometheus 进行监控,同时也支持多种 exporter 采集数据,还支持 pushgateway 进行数据上报,Prometheus 性能足够支撑上万台规模的集群。Grafana 是一个跨平台的开源的度量分析和可视化工具,可以将采集的数据可视化的展示,并及时通知给告警接收方。它主要有以下六大特点:

  • 展示方式:快速灵活的客户端图表,面板插件有许多不同方式的可视化指标和日志,官方库中具有丰富的仪表盘插件,比如热图、折线图、图表等多种展示方式;
  • 数据源:Graphite,InfluxDB,OpenTSDB,Prometheus,Elasticsearch,CloudWatch 和KairosDB 等;
  • 通知提醒:以可视方式定义最重要指标的警报规则,Grafana 将不断计算并发送通知,在数据达到阈值时通过 Slack、PagerDuty 等获得通知;
  • 混合展示:在同一图表中混合使用不同的数据源,可以基于每个查询指定数据源,甚至自定义数据源;
  • 注释:使用来自不同数据源的丰富事件注释图表,将鼠标悬停在事件上会显示完整的事件元数据和标记。


node-exporter 可以采集机器(物理机、虚拟机、云主机等)的监控指标数据,能够采集到的指标包括 CPU, 内存,磁盘,网络,文件数等信息

cAdvisor对Node机器上的资源及容器进行实时监控和性能数据采集,包括CPU使用情况、内存使用情况、网络吞吐量及文件系统使用情况,cAdvisor集成在Kubelet中,当kubelet启动时会自动启动cAdvisor,即一个cAdvisor仅对一台Node机器进行监控。

二、监控逻辑图




三、部署说明

Prometheus的几种安装方式

  • 二进制安装
  • 容器安装(docker/k8s)
  • Helm安装
  • Prometheus Operator
  • kube-Prometheus Stack

镜像准备





监控主机基础信息的镜像:docker pull prom/node-exporter:v1.3.1监控主机容器信息的镜像:docker pull zcube/cadvisor:v0.39.3收集主机信息的镜像:docker pull prom/prometheus:v2.33.5展示主机信息的镜像:docker pull grafana/grafana:8.4.3

镜像打包





docker save -o /docker_images/node-exporter.tar   node-exporter:v1.3.1docker save -o /docker_images/cadvisor.tar   cadvisor:v0.39.3docker save -o /docker_images/prometheus.tar   prometheus:v2.33.5docker save -o /docker_images/grafana.tar   grafana:8.4.3

四、准备相关文件及脚本

4.1 制作docker-compose-monitoring.yml文件

version: "3.7"
services:
  node-exporter:
    image: prom/node-exporter:v1.3.1
    container_name: bdyh-node-exporter
    restart: on-failure
    privileged: true
    deploy:
      resources:
        limits:
          memory: 1024M
        reservations:
          memory: 300M
    environment:
      TZ: Asia/Shanghai
    volumes:
      - /proc:/host/proc:ro
      - /sys:/host/sys:ro
      - /:/rootfs:ro
    ports:
      - "9100:9100"
    networks:
      - pk_net
  cadvisor:
    image: zcube/cadvisor:v0.39.3
    container_name: bdyh-cadvisor
    restart: on-failure
    privileged: true
    deploy:
      resources:
        limits:
          memory: 1024M
        reservations:
          memory: 300M
    environment:
      TZ: Asia/Shanghai
    volumes:
      - /:/rootfs:ro
      - /var/run:/var/run:ro
      - /sys:/sys:ro
      - /var/lib/docker/:/var/lib/docker:ro
      - /dev/disk/:/dev/disk:ro
      - /cgroup:/cgroup:ro      
    ports:
      - "9080:8080"
    networks:
      - pk_net
  prometheus:
    image: prom/prometheus:v2.33.5
    container_name: bdyh-prometheus
    restart: on-failure
    privileged: true
    deploy:
      resources:
        limits:
          memory: 1024M
        reservations:
          memory: 300M
    environment:
      TZ: Asia/Shanghai
    volumes:
      - /data/monitoring/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml
    ports:
      - "9090:9090"
    depends_on:
      - node-exporter
      - cadvisor
    networks:
      - pk_net
  grafana:
    image: grafana/grafana:8.4.3
    container_name: bdyh-grafana
    restart: on-failure
    privileged: true
    deploy:
      resources:
        limits:
          memory: 1024M
        reservations:
          memory: 300M
    environment:
      TZ: Asia/Shanghai
    volumes:
      - /data/monitoring/grafana/grafana-storage:/var/lib/grafana
      #利用grafana的provisioning方式,通过配置方式添加datasource和dashboard,预置仪表盘和数据源
      - /data/monitoring/grafana/provisioning:/etc/grafana/provisioning
      - /data/monitoring/grafana/json:/tmp/dashboards
    ports:
      - "3000:3000"
    depends_on:
      - prometheus
    networks:
      - pk_net
networks:
  pk_net:
    external: true

注:利用grafana的provisioning方式,通过配置方式添加datasource和dashboard,预置仪表盘和数据源。

4.2 配置文件及json文件

prometheus.yml配置文件内容如下:

global:
  scrape_interval:     60s
  evaluation_interval: 60s
scrape_configs:
  - job_name: prometheus
    static_configs:
      - targets: ['bdyh-prometheus:9090']
        labels:
          instance: prometheus
  - job_name: linux
    static_configs:
      - targets: ['bdyh-node-exporter:9100']
  - job_name: docker
    static_configs:
      - targets: ['bdyh-cadvisor:8080']

Docker主机监控.json 、Liunx主机监控.json从官网下载即可,需要调整里面的uid,自定义一个名称,此名称要和datasources.yaml文件中保持一样。如下示例:

...
      "datasource": {
        "type": "prometheus",
        "uid": "bdyh-prometheus-9090"
      }
    ...

datasources下用于存放数据源的配置文件(可以配置多个),如下datasources.yaml所示:

# # config file version
apiVersion: 1
# # list of datasources that should be deleted from the database
deleteDatasources:
   - name: Prometheus
     orgId: 1
 # list of datasources to insert/update depending
 # on what's available in the database
datasources:
   # <string, required> name of the datasource. Required
 - name: Prometheus
   # <string, required> datasource type. Required
   type: prometheus
   # <string, required> access mode. direct or proxy. Required
   access: proxy
   # <int> org id. will default to orgId 1 if not specified
   orgId: 1
   # <string> 自定义UID,可以用于在配置的其他部分引用此数据源,如果没有指定,将自动生成
   uid: bdyh-prometheus-9090
   # <string> url
   url: http://bdyh-prometheus:9090
   # <string> database password, if used
   password:
   # <string> database user, if used
   user:
   # <string> database name, if used
   database:
   # <bool> enable/disable basic auth
   basicAuth: false
   # <string> basic auth username
   basicAuthUser: ''
   # <string> basic auth password
   basicAuthPassword: ''
   # <bool> enable/disable with credentials headers
   withCredentials: false
   # <bool> mark as default datasource. Max one per org
   isDefault: false
   # <map> fields that will be converted to json and stored in json_data
   jsonData:
      graphiteVersion: "1.1"
      tlsAuth: false
      tlsAuthWithCACert: false
      httpHeaderName1: "Authorization"
   # <string> json object of data that will be encrypted.
   secureJsonData:
     tlsCACert: "..."
     tlsClientCert: "..."
     tlsClientKey: "..."
     # <openshift\kubernetes token example>
     httpHeaderValue1: "Bearer xf5yhfkpsnmgo"
   version: 1
   # <bool> allow users to edit datasources from the UI.
   editable: true

dashboards.yaml文件如下所示:

apiVersion: 1
providers:
 - name: 'default'
   orgId: 1
   folder: ''
   type: file
   updateIntervalSeconds: 10
   options:
     path: /tmp/dashboards

注:/tmp/dashboards下放的是仪表盘的json文件。如:Docker主机监控.json和Liunx主机监控.json


4.3 一键部署脚本

过滤Docker是否存在此自定义网络脚本:install-network.sh

#!/bin/bash
###############################################################
# 作者:键客小盒子
# 脚本名:install-network.sh
# 时间:2022-09-10
# 功能描述:过滤Docker是否存在此自定义网络
###############################################################
echo -e '\n\n-----------------------执行install-network start-----------------------'
echo ""
#自定义一个网络名称变量
network_name="pk_net"
filterName=`docker network ls | grep $network_name | awk '{ print $2 }'`
if [ "$filterName" == "" ]; then
    echo "不存在pk_net,将创建一个自定义的网络pk_net,如下所示:"
 echo ""
    #不存在就创建一个自定义的网络pk_net,此处的10.139可以自定义,不冲突即可
    sudo docker network create --driver bridge --subnet 10.139.0.0/16 --gateway 10.139.0.1 pk_net
else
    echo "已存在网络pk_net"
fi
echo -e '\n\n-----------------------执行install-network end-----------------------'

一键部署主机及容器监控:install-monitoring.sh

#!/bin/bash
###############################################################
# 作者:键客小盒子
# 脚本名:install-monitoring.sh
# 时间:2022-09-10
# 功能描述:一键部署主机及容器监控(Prometheus+Grafana+cAdvisor+node-exporter)
###############################################################
echo -e '\n\n-----------------------Docker install monitoring start-----------------------'
cd `dirname $0`
SH_PATH=`pwd`
BASE_PATH=${SH_PATH%/*}
echo ""
echo ""
echo "#########################################################"
echo "# 导入监控镜像  -- 开始                                 #"
echo "#########################################################"    
sudo docker load -i ./docker_images/node-exporter.tar
sudo docker load -i ./docker_images/cadvisor.tar
sudo docker load -i ./docker_images/prometheus.tar
sudo docker load -i ./docker_images/grafana.tar
echo "#########################################################"
echo "# 导入监控镜像  --  结束                                #"
echo "#########################################################"
echo ""
echo ""
echo "#########################################################"
echo "# 创建docker自定义网络 -- 开始                          #"
echo "#########################################################"
#预先创建一个自定义的网络pk_net,此处的10.139可以自定义,不冲突即可
sudo chmod u+x *.sh
sudo bash ./install-network.sh
sleep 2s
echo "#########################################################"
echo "##创建docker自定义网络 -- 结束                          #"
echo "#########################################################"
echo ""
echo ""
echo "#########################################################"
echo "# 创建 monitoring目录 -- 开始                                #"
echo "#########################################################"
sudo mkdir -p $BASE_PATH/monitoring/prometheus
sudo mkdir -p $BASE_PATH/monitoring/grafana/grafana-storage
sudo mkdir -p $BASE_PATH/monitoring/grafana/provisioning
sudo mkdir -p $BASE_PATH/monitoring/grafana/json
sudo mkdir -p $BASE_PATH/docker-compose-file
sudo cp ./monitoring/prometheus/prometheus.yml $BASE_PATH/monitoring/prometheus/prometheus.yml
sudo cp -r ./monitoring/grafana/provisioning/* $BASE_PATH/monitoring/grafana/provisioning/
sudo cp -r ./monitoring/grafana/json/* $BASE_PATH/monitoring/grafana/json/
sudo cp -r $BASE_PATH/pkulaw/docker/docker-compose-monitoring.yml $BASE_PATH/docker-compose-file
sudo chmod -R 777 $BASE_PATH/monitoring
sudo chmod -R 777 $BASE_PATH/monitoring/grafana/grafana-storage
echo "#########################################################"
echo "# 创建 monitoring目录 -- 结束                                #"
echo "#########################################################"
echo ""
echo ""
echo "#########################################################"
echo "# 根据实际路径调整docker-compose中的映射路径 -- 开始    #"
echo "#########################################################"
BASE_COMPOSE_URL1=$BASE_PATH/monitoring/prometheus
BASE_COMPOSE_URL2=$BASE_PATH/monitoring/grafana
sudo sed -i "s#/data/monitoring/prometheus#$BASE_COMPOSE_URL1#" $BASE_PATH/docker-compose-file/docker-compose-monitoring.yml
sudo sed -i "s#/data/monitoring/grafana#$BASE_COMPOSE_URL2#" $BASE_PATH/docker-compose-file/docker-compose-monitoring.yml
echo "#########################################################"
echo "# 根据实际路径调整docker-compose中的映射路径-- 结束     #"
echo ""
echo ""
echo "#########################################################"
echo "# 安装 monitoring -- 开始                                    #"
echo "#########################################################"
docker-compose -p monitoring --compatibility -f $BASE_PATH/docker-compose-file/docker-compose-monitoring.yml up -d
echo "#########################################################"
echo "# 安装 monitoring -- 结束                                    #"
echo "#########################################################"
echo ""
echo ""
echo "#########################################################"
echo "# monitoring开放端口 -- 开始                                 #"
echo "#########################################################"
sudo firewall-cmd --permanent --add-port=9100/tcp
sudo firewall-cmd --permanent --add-port=9080/tcp
sudo firewall-cmd --permanent --add-port=9090/tcp
sudo firewall-cmd --permanent --add-port=3000/tcp
sudo firewall-cmd --reload
echo "#########################################################"
echo "# monitoring开放端口 -- 结束                                 #"
echo "#########################################################"
echo -e '\n\n-----------------------Docker install monitoring end-----------------------'


完整目录结构如下:

注:上面grafana-storage文件是grafana的原有配置,保持不动挂载进去即可。

4.4 一键部署

$ chmod +x install-monitoring.sh
$ ./install-monitoring.sh
相关实践学习
容器服务Serverless版ACK Serverless 快速入门:在线魔方应用部署和监控
通过本实验,您将了解到容器服务Serverless版ACK Serverless 的基本产品能力,即可以实现快速部署一个在线魔方应用,并借助阿里云容器服务成熟的产品生态,实现在线应用的企业级监控,提升应用稳定性。
相关文章
|
4月前
|
存储 Prometheus 监控
Prometheus 的可视化与仪表盘
【8月更文第29天】Prometheus 是一个开源的监控系统和时间序列数据库,它能够高效地收集和存储各种指标数据。然而,原始的数据如果没有恰当的可视化工具来呈现,很难从中快速获得有用的信息。Grafana 是一款广泛使用的开源可视化工具,它与 Prometheus 结合得非常好,能够帮助我们创建交互式监控仪表盘。本文将介绍如何使用 Grafana 与 Prometheus 结合,构建美观且实用的监控仪表盘。
89 0
|
2月前
|
Prometheus Kubernetes 监控
k8s部署针对外部服务器的prometheus服务
通过上述步骤,您不仅成功地在Kubernetes集群内部署了Prometheus,还实现了对集群外服务器的有效监控。理解并实施网络配置是关键,确保监控数据的准确无误传输。随着监控需求的增长,您还可以进一步探索Prometheus生态中的其他组件,如Alertmanager、Grafana等,以构建完整的监控与报警体系。
132 60
|
2月前
|
Prometheus Kubernetes 监控
k8s部署针对外部服务器的prometheus服务
通过上述步骤,您不仅成功地在Kubernetes集群内部署了Prometheus,还实现了对集群外服务器的有效监控。理解并实施网络配置是关键,确保监控数据的准确无误传输。随着监控需求的增长,您还可以进一步探索Prometheus生态中的其他组件,如Alertmanager、Grafana等,以构建完整的监控与报警体系。
263 62
|
2月前
|
自然语言处理 PyTorch 算法框架/工具
掌握从零到一的进阶攻略:让你轻松成为BERT微调高手——详解模型微调全流程,含实战代码与最佳实践秘籍,助你应对各类NLP挑战!
【10月更文挑战第1天】随着深度学习技术的进步,预训练模型已成为自然语言处理(NLP)领域的常见实践。这些模型通过大规模数据集训练获得通用语言表示,但需进一步微调以适应特定任务。本文通过简化流程和示例代码,介绍了如何选择预训练模型(如BERT),并利用Python库(如Transformers和PyTorch)进行微调。文章详细说明了数据准备、模型初始化、损失函数定义及训练循环等关键步骤,并提供了评估模型性能的方法。希望本文能帮助读者更好地理解和实现模型微调。
85 2
掌握从零到一的进阶攻略:让你轻松成为BERT微调高手——详解模型微调全流程,含实战代码与最佳实践秘籍,助你应对各类NLP挑战!
|
4月前
|
Prometheus 监控 Cloud Native
自定义grafana_table(数据源Prometheus)
综上所述,自定义 Grafana 表格并将 Prometheus 作为数据源的关键是理解 PromQL 的查询机制、熟悉 Grafana 面板的配置选项,并利用 Grafana 强大的转换和自定义功能使数据展示更为直观和有洞见性。随着对这些工具更深入的了解,您将可以创建出更高级的监控仪表盘,以支持复杂的业务监控需求。
340 1
|
4月前
|
Prometheus Kubernetes 监控
快速部署 Prometheus 社区版
Prometheus 是一个开源的系统监控和报警系统,最初由 SoundCloud 开发,并在 2012 年作为开源项目发布。它现在是 Cloud Native Computing Foundation(CNCF)的一部分,与 Kubernetes 等其他知名项目一起,成为云原生生态系统的重要组成部分。本文介绍通过计算巢快速部署 Prometheus 社区版。
快速部署 Prometheus 社区版
|
4月前
|
Prometheus 监控 Cloud Native
|
5月前
|
JSON Prometheus 监控
Prometheus+Grafana 部署
Prometheus 和 Grafana 组成监控解决方案。Prometheus 是开源系统监控工具,Grafana 则用于数据可视化。要连接 Prometheus 数据源,登录 Grafana,点击设置,选择“连接”,添加新数据源,选择 Prometheus 类型,并填入 Prometheus 服务器的 HTTP 地址,如 `http://192.168.1.1:9090`,验证连接。之后,从 Grafana 官方仪表板库导入监控面板,如主机监控模板,以可视化系统状态。完成这些步骤后,便建立了有效的监控系统。
157 1
|
7月前
|
Prometheus Kubernetes 监控
|
7月前
|
存储 Prometheus Cloud Native
Grafana 系列 - 统一展示 -2-Prometheus 数据源
Grafana 系列 - 统一展示 -2-Prometheus 数据源