一键部署Prometheus,并预置仪表盘和数据源
作者:heimao | 来源:互联网 | 2023-09-14 21:01
【摘要】一键部署Prometheus+Grafana+cAdvisor+node-exporter,搭建主机或容器监控。利用grafana的provisioning方式,通过配置的
【摘要】一键部署Prometheus + Grafana + cAdvisor + node-exporter,搭建主机或容器监控。利用grafana的provisioning方式,通过配置的方式预置仪表盘和数据源。
零、前言
当中秋节遇上教师节,那就是双倍的祝福和快乐~~键客小盒子祝大家中秋节圆满!教师节快乐!
一、概述
Prometheus 是一个开源的系统监控和报警系统,现在已经加入到 CNCF 基金会,成为继 k8s 之后第二个在 CNCF 托管的项目,在 kuber netes 容器管理系统中,通常会搭配 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 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.1
docker save -o docker_images/cadvisor.tar cadvisor:v0.39.3
docker save -o docker_images/prometheus.tar prometheus:v2.33.5
docker 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: # name of the datasource. Required - name: Prometheus # datasource type. Required type: prometheus # access mode. direct or proxy. Required access: proxy # org id. will default to orgId 1 if not specified orgId: 1 # 自定义UID,可以用于在配置的其他部分引用此数据源,如果没有指定,将自动生成 uid: bdyh-prometheus-9090 # url url: http://bdyh-prometheus:9090 # database password, if used password: # database user, if used user: # database name, if used database: # enable/disable basic auth basicAuth: false # basic auth username basicAuthUser: '' # basic auth password basicAuthPassword: '' # enable/disable with credentials headers withCredentials: false # mark as default datasource. Max one per org isDefault: false # fields that will be converted to json and stored in json_data jsonData: graphiteVersion: "1.1" tlsAuth: false tlsAuthWithCACert: false httpHeaderName1: "Authorization" # json object of data that will be encrypted. secureJsonData: tlsCACert: "..." tlsClientCert: "..." tlsClientKey: "..." # httpHeaderValue1: "Bearer xf5yhfkpsnmgo" version: 1 # 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_netelse 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.tarecho "#########################################################" echo "# 导入监控镜像 -- 结束 #" echo "#########################################################" echo "" echo "" echo "#########################################################" echo "# 创建docker自定义网络 -- 开始 #" echo "#########################################################" #预先创建一个自定义的网络pk_net,此处的10.139可以自定义,不冲突即可 sudo chmod u+x *.sh sudo bash ./install-network.sh sleep 2secho "#########################################################" 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-storageecho "#########################################################" 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.ymlecho "#########################################################" 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 -decho "#########################################################" 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 --reloadecho "#########################################################" echo "# monitoring开放端口 -- 结束 #" echo "#########################################################" echo -e '\n\n-----------------------Docker install monitoring end-----------------------'
完整目录结构如下:
注:上面grafana-storage文件是grafana的原有配置,保持不动挂载进去即可。 4.4 一键部署 $ chmod +x install-monitoring.sh $ ./install-monitoring.sh
推荐阅读
1.脚本功能1)自动替换jar包中的配置文件。2)自动备份老版本的Jar包3)自动判断是初次启动还是更新服务2.脚本准备进入ho ...
[详细]
蜡笔小新 2023-10-17 19:08:29
1prometheus基础知识1.1prometheus简介Prometheus是一套开源的系统监控报警框架。和Kubernetes类似,它也发源于Google的Borg体系,其原 ...
[详细]
蜡笔小新 2024-09-25 11:17:50
Redis作为缓存系统,在整个后端体系中是较为重要的一环,需要实时监控运行状态。现在有各种各样的工具都可以对Redis进行监控,例如 ...
[详细]
蜡笔小新 2023-10-12 19:49:58
什么是DockerDocker是一个开源项目,诞生于2013年初,最初是dotCloud公司内部的一个业余项目。它基于Google公司推出的Go语言实现。项目后来加入了Linux基 ...
[详细]
蜡笔小新 2024-09-25 11:12:02
把Bean注入到IOC容器里面的方式有7种方式:使用xml的方式来声明Bean的定义,Spring容器在启动的时候会加载并解析这个xml, ...
[详细]
蜡笔小新 2024-09-28 18:29:54
我正在研究线程,并决定在运行我的重点代码行之前和之后添加一些额外的文本 ...
[详细]
蜡笔小新 2024-09-28 16:37:29
蜡笔小新 2024-09-27 20:41:41
《Java并发编程》自旋锁与互斥锁两者非常类似,只是调度策略的不同。对于独占资源的访问,互斥锁在获得锁之前将一直处于休眠状态,自旋锁则是不 ...
[详细]
蜡笔小新 2024-09-27 20:10:06
1、对于List而言,要不然就使用迭代器,要不然就从后往前删除,从前往后删除会出现角标越界。因为我List有两个remove方法,一个是int作为形参(删除指定位置的元素),一个是 ...
[详细]
蜡笔小新 2024-09-27 12:42:00
python鸭子类型Python遵循EAFP(比许可更容易请求宽恕)而不是LBYL(跨越式)。EAFP的Python哲学在某 ...
[详细]
蜡笔小新 2024-09-25 18:30:39
原文地址:https:blog.houzz.comchallenges-and-solutions-in-building-a-large-scale-cluster-with-k ...
[详细]
蜡笔小新 2024-09-24 18:07:49
本文介绍了云原生边缘计算中的KubeEdge系统,该系统是一个开源系统,用于将容器化应用程序编排功能扩展到Edge的主机。它基于Kubernetes构建,并为网络应用程序提供基础架构支持。同时,KubeEdge具有离线模式、基于Kubernetes的节点、群集、应用程序和设备管理、资源优化等特点。此外,KubeEdge还支持跨平台工作,在私有、公共和混合云中都可以运行。同时,KubeEdge还提供数据管理和数据分析管道引擎的支持。最后,本文还介绍了KubeEdge系统生成证书的方法。 ...
[详细]
蜡笔小新 2023-12-14 16:49:01
关于我们EMQ是一家全球领先的开源物联网基础设施软件供应商,服务新产业周期的IoT&5G、边缘计算与云计算市场,交付全球领先的开源物联网消息服务器和流处理数据 ...
[详细]
蜡笔小新 2023-12-13 21:02:32
导出功能protectedvoidbtnExport(objectsender,EventArgse){用来打开下载窗口stringfileName中 ...
[详细]
蜡笔小新 2023-12-12 14:34:29
篇首语:本文由编程笔记#小编为大家整理,主要介绍了OPLG:新一代云原生可观测最佳实践相关的知识,希望对你有一定的参考价值。简介: ...
[详细]
蜡笔小新 2023-10-12 18:05:29