Prometheus和Grafana的安装部署

初识Prometheus和Grafana

通常来说,对于一个运行时的复杂系统,如果系统出了问题是很难排查的。因为你是不太可能在运行时一边检查代码一边调试的。因此,你需要在各种关键点加上监控,通过监控获取的数据,指导我们进一步工作,解决问题。

用开车作为例子:车子本身是一个极其复杂的系统,而当你的车在高速上以 120 公里的速度狂奔时出现了噪音,你是不可能这时候边开车边打开发动机盖子来查原因的。通常来说,好一点的车会有内置电脑,在车子出问题时,告诉你左边轮胎胎压有问题,或是发动机缺水了之类。而这些检测,就是系统监控的一个例子。

通过仪表盘,你不一定能清楚地了解车子出问题的具体原因,但至少可以给你一个大概的方向。比如说,如果水温很高时出现了问题,你大概率可以尝试加点水降温来尝试是否解决问题。

把上面的车类比计算机系统或者一个软件系统:Grafana就是仪表盘,它和车辆的速度表、水温表是一类的,通过这些表盘你可以实时了解系统运行情况。而Prometheus作为一个时序数据库,其实它和大家熟知的Mysql是一类的东西,可以理解为是带有时间戳的Mysql,都是存储数据,提供查询的,它存储了计算机系统在各个时间点上的监控数据。而Grafana仪表盘上的数据,就是通过查询Prometheus获取的。

就像用户使用某浏览器进行搜索,Prometheus负责记录用户搜索到结果用时多久,是否有滞后,cpu占用了多少等等,而Grafana则可以通过Prometheus把这些进行可视化展示

Prometheus

官网:Prometheus - Monitoring system & time series database

 Prometheus 是一个开源的服务监控系统时序数据库,其提供了通用的数据模型和快捷数据采集、存储和查询接口。它的核心组件Prometheus server会定期从静态配置的监控目标或者基于服务发现自动配置的自标中进行拉取数据,当新拉取到的数据大于配置的内存缓存区时,数据就会持久化到存储设备当中

Prometheus(普罗米修斯)是一套开源的监控系统,其基本原理是通过 HTTP 协议周期性抓取被监控组件的状态,不需要任何 SDK 或者其他的集成过程,其架构如图:

Prometheus 主要由以下部分组成:

  • prometheus server: 是 Prometheus 组件中的核心部分,负责实现对监控数据的获取,存储以及查询;
  • exporter: 采集端,通过 http 服务的形式保留一个 url 地址,prometheus server 通过访问该 exporter 提供的 endpoint 端点,即可获取到需要采集的监控数据。
  • AlertManager: 在 prometheus 中,支持基于 PromQL 创建告警规则,如果满足定义的规则,则会产生一条告警信息,进入 AlertManager 进行处理。可以集成邮件,微信或者通过 webhook 自定义报警。
  • Pushgateway: 由于 Prometheus 数据采集采用 pull 方式进行设置的, 内置必须保证 prometheus server 和对应的 exporter 必须通信,当网络情况无法直接满足时,可以使用 pushgateway 来进行中转,可以通过 pushgateway 将内部网络数据主动 push 到 gateway 里面去,而 prometheus 采用 pull方式拉取 pushgateway 中数据

普罗米修斯的数据存储采用的是时间序列数据(TimeSeries Data),它是按照时间顺序记录系统、设备状态变化的数据。

默认情况下 Prometheus 会将采集的数据存储到本机的 /usr/local/prometheus/data 目录,存储数据的大小受限和扩展不便;如果只作为测试自然不需要担心这个问题,如果用于生产的话需要安装配置时序数据库influxdb

Grafana

官网:Grafana: The open observability platform | Grafana Labs

Grafana 是一个监控仪表系统,它是由 Grafana Labs 公司开源的的一个系统监测 (System Monitoring) 工具。它可以大大帮助你简化监控的复杂度,你只需要提供你需要监控的数据,它就可以帮你生成各种可视化仪表。同时它还有报警功能,可以在系统出现问题时通知你。

Grafana 不对数据源作假设,它支持以下各种数据,也就是说如果你的数据源是以下任意一种,它都可以帮助生成仪表。同时在市面上,如果 Grafana 称第二,那么应该没有敢称第一的仪表可视化工具了。因此,如果你搞定了 Grafana,它几乎是一个会陪伴你到各个公司的一件称心应手的兵器。

Grafana 支持的数据源

  • Prometheus 
  • Graphite
  • OpenTSDB
  • InfluxDB
  • MySQL/PostgreSQL
  • Microsoft SQL Server
  • 等等

下面进行安装部署

1、用linux命令进行安装部署

要使用 Prometheus 和 Grafana 大约有五个步骤:

  • 准备服务器环境
  • 下载并安装 Node Exporter
  • 下载并安装 Prometheus
  • 配置 Prometheus
  • 下载并安装 Grafana
  1. Exporter 监控工具,获取数据
  2. Prometheus 普罗米修斯时序数据库,用来存储和查询你的监控数据
  3. Grafana 仪表盘

 (1)准备服务器环境

准备两台虚拟机

主机名IP角色系统
bigdata01192.168.233.128Prometheus 服务端CentOS 7
bigdata02192.168.233.129node_exporter 客户端CentOS 7

(2)下载并安装 Node Exporter

以下命令在bigdata02上运行

wget https://github.com/prometheus/node_exporter/releases/download/v0.16.0/node_exporter-0.16.0.linux-amd64.tar.gz 
解压到指定路径
 tar -zxvf node_exporter-0.16.0.linux-amd64.tar.gz -C /opt/installs
重命名
mv node_exporter-1.1.2.linux-amd64/ node_exporter

解压压缩包后,会发现一个名为 node_exporter-0.16.0.linux-amd64 的目录,包含了可执行文件、README 以及许可证文件

启动node_exporter

./node_exporter &

启动后会监听9100端口

添加为服务方式启动 

vim /usr/lib/systemd/system/node_exporter.service

[Unit]
Description=node_exporter
After=network.target 

[Service]
ExecStart=/usr/local/node_exporter/node_exporter
Restart=on-failure

[Install]
WantedBy=multi-user.target
重启 Systemd
systemctl daemon-reload
启动服务
systemctl start node_exporter
查看服务
systemctl status node_exporter

可以通过浏览器访问:http://localhost:9100/metrics 查看采集到的指标

192.168.233.129:9100/metrics

  •  每一行则表示当前Node Exporter采集到的一个监控样本
  • 对于图中可见的node_***,代表了当前监控样本的名称
  • 紧跟指标后大括号中的键值对中的被称为标签,它与键值对的值共同组成筛选条件,相当于Mysql里的Where后面的内容。键值对整体反映了当前样本的一些特征和维度
  • 而右大括号后的值则是该监控样本监控下的具体值

(3)下载并安装 Prometheus

以下命令在bigdata01上运行

可以在官网进行下载,这里是使用wget命令安装

在网上拉取prometheus 的压缩包
wget https://github.com/prometheus/prometheus/releases/download/v2.51.1/prometheus-2.51.1.linux-amd64.tar.gz
解压到指定路径
tar -zxvf  prometheus-2.51.1.linux-amd64.tar.gz -C /opt/installs
重命名
mv prometheus-2.51.1.linux-amd64/ prometheus
查看是否安装成功
./prometheus --version

查看是否安装成功 ./prometheus --version 

启动prometheus

./prometheus --config.file=prometheus.yml
 添加为服务方式启动
cd /usr/lib/systemd/system
创建文件:vim prometheus.service
[Unit]
  Description=https://prometheus.io
  
  [Service]
  Restart=on-failure
  ExecStart=/usr/local/prometheus/prometheus --config.file=/usr/local/prometheus/prometheus.yml --web.listen-address=:9090

  [Install]                      
  WantedBy=multi-user.target
systemctl daemon-reload
开启服务
systemctl start prometheus
查看状态
systemctl status prometheus

 

浏览器访问

IP:9090

192.168.233.128:9090 

 

(4)配置 Prometheus

# my global config
global:
  # 默认情况下,每15s拉取一次目标采样点数据。
  scrape_interval:     15s # Set the scrape interval to every 15 seconds. Default is every 1 minute.
  # 每15秒评估一次规则。默认值为每1分钟。
  evaluation_interval: 15s # Evaluate rules every 15 seconds. The default is every 1 minute.
  # scrape_timeout is set to the global default (10s).

# Alertmanager configuration
alerting:
  alertmanagers:
  - static_configs:
    - targets:
      # - alertmanager:9093

# Load rules once and periodically evaluate them according to the global 'evaluation_interval'.
rule_files:
  # - "first_rules.yml"
  # - "second_rules.yml"

# A scrape configuration containing exactly one endpoint to scrape:
# Here it's Prometheus itself.
scrape_configs:
  # job名称会增加到拉取到的所有采样点上,同时还有一个instance目标服务的host:port标签也会增加到采样点上
  - job_name: 'prometheus'

    # 覆盖global的采样点,拉取时间间隔5s
    scrape_interval: 5s
    static_configs:
    - targets: ['localhost:9090']

修改prometheus.yml

# my global config
global:
  scrape_interval:     15s # Set the scrape interval to every 15 seconds. Default is every 1 minute.
  evaluation_interval: 15s # Evaluate rules every 15 seconds. The default is every 1 minute.
  # scrape_timeout is set to the global default (10s).

# Alertmanager configuration
alerting:
  alertmanagers:
  - static_configs:
    - targets:
      # - alertmanager:9093

# Load rules once and periodically evaluate them according to the global 'evaluation_interval'.
rule_files:
scrape_configs:
  - job_name: 'prometheus'
    static_configs:
    - targets: ['192.168.233.128:9090']

  - job_name: 'linux'
    static_configs:
    - targets: ['192.168.233.129:9100'] # 多个用,分开
# 指定配置文件
--config.file="prometheus.yml"
# 默认指定监听地址端口,可修改端口
--web.listen-address="0.0.0.0:9090" 
# 最大连接数
--web.max-connections=512
# tsdb数据存储的目录,默认当前data/
--storage.tsdb.path="data/"
# premetheus 存储数据的时间,默认保存15天
--storage.tsdb.retention=15d 
# 通过命令热加载无需重启 curl -XPOST 192.168.2.45:9090/-/reload
--web.enable-lifecycle
# 可以启用 TLS 或 身份验证 的配置文件的路径
--web.config.file=""

重启prometheus

systemctl restart prometheus.service

再次访问webdu192.168.233.128:9090 

打开普罗米修斯自带的监控页面,Status -> Targets 查看:

Prometheus简单使用 

点击Prometheus图标,进行查询页面。可以点击地图图标查看有哪些metrics name。输入要查询的metrics name和过滤条件,然后点击执行就会返回该时间序列中的一个瞬时(最新)监控数据

 1 查询时间序列

prometheus_http_requests_total{code="200",handler=~"/graph"}

2 范围查询

 查询过去一段时间范围内的监控数据时,需要使用区间向量表达式。如查询最近5分钟内的所有监控数据,一个label会有该时间范围内的一系列监控数据

prometheus_http_requests_total{}[5m]

  3 时间位移操作

在瞬时向量表达式或区间向量表达式中,都是以当前时间为基准。如果我们想查询,5 分钟前的瞬时监控数据,可以使用时间位移操作offset

prometheus_http_requests_total{}offset 5m

 

更多运算操作请查看Prometheus的PromQL语法讲解和使用示例_prometheus 语法-CSDN博客

 

(5)下载并安装 Grafana

以下命令在bigdata01上运行

wget https://dl.grafana.com/enterprise/release/grafana-enterprise-10.2.2.linux-amd64.tar.gz
解压到指定路径
tar -zxvf grafana-enterprise-10.2.2.linux-amd64.tar.gz -C /opt/installs
重命名
mv grafana-v10.2.2 grafana
添加为服务方式启动 
[Unit]
Description=Grafana Server
Documentation=http://docs.grafana.org
 
[Service]
Type=simple
Restart=on-failure
ExecStart=/opt/installs/grafana/bin/grafana-server \
--config=/opt/installs/grafana/conf/defaults.ini \
--homepath=/opt/installs/grafana 
 
[Install]
WantedBy=multi-user.target
systemctl daemon-reload
systemctl start grafana.service
systemctl status grafana.service

访问端口是3000fhttp://192.168.233.128:3000/

第一次进入Grafana界面,账号和密码都是admin,会让你修改密码

 

 

在 Grafana 里,仪表盘的配置可以通过图形化界面进行,但配置好的仪表盘是以 JSON 存储的。这也就是说,如果你把你的 JSON 数据分享出去,别人导入就可以直接导入同样的仪表盘(前提是你们的监测数据一样)。 

模板网址

Grafana dashboards | Grafana Labs

 

 

 

 

 

也可以连接mysql进行操作 

 

 2、用docker来进行安装

 

这里,最左边的 Docker 服务会将服务的数据发送给中间的普罗米修斯,而最右边的 Grafana 会查询中间的普罗米修斯,来展示仪表盘 

 安装docker

yum命令安装docker

yum install docker

安装后启动docker服务

systemctl start docker

查看docker状态

systemctl status docker

安装docker后其余步骤可参考该博客 

Grafana 中文入门教程 | 构建你的第一个仪表盘-腾讯云开发者社区-腾讯云

3、在腾讯云上部署

一文搞懂Prometheus、Grafana(含腾讯云上实战)-腾讯云开发者社区-腾讯云

4、用脚本一键部署

入门 | Prometheus+Grafana 普罗米修斯-CSDN博客

本文参考一、Prometheus+Grafana普罗米修斯,搭建和使用_普罗米修斯 grafana-CSDN博客 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/905574.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

ubuntu20.04 加固方案-设置用户缺省UMASK

一、编辑/etc/profile配置文件 打开终端。 查看当前umask 使用文本编辑器(如vim)编辑/etc/profile文件。 sudo vim /etc/profile 二、添加配置参数 在打开的配置文件的末尾中,添加或修改以下参数: umask 027 三、保存并退出…

liunx网络套接字 | 实现基于tcp协议的echo服务

前言:本节讲述linux网络下的tcp协议套接字相关内容。博主以实现tcp服务为主线,穿插一些小知识点。以先粗略实现,后精雕细琢为思路讲述实现服务的过程。下面开始我们的学习吧。 ps:本节内容建议了解网络端口号的友友们观看哦。 目录…

【果蔬识别】Python+卷积神经网络算法+深度学习+人工智能+机器学习+TensorFlow+计算机课设项目+算法模型

一、介绍 果蔬识别系统,本系统使用Python作为主要开发语言,通过收集了12种常见的水果和蔬菜(‘土豆’, ‘圣女果’, ‘大白菜’, ‘大葱’, ‘梨’, ‘胡萝卜’, ‘芒果’, ‘苹果’, ‘西红柿’, ‘韭菜’, ‘香蕉’, ‘黄瓜’)…

isp框架代码理解

一、整体框架如下: 1 外层的src中 1.1 从camera.c->task.c:封装了3层,透传到某个功能的本级。 1.2 core.c和capability.c中实现:开机初始化加载参数。2. plat/src中 2.1 fun.c中继task.c又透传了一层;以及最后功能…

VuePress文档初始化请求过多问题探讨

1. 背景 公司有部门使用VuePress 1.0搭建平台的帮助文档,前期文档不是很多,所以没有暴露出特别明显的问题。但随着文档的逐步迭代和内容的增多,出现了大量的并发请求,总共有218个请求,导致服务器带宽耗尽、响应速度下降…

Paimon x StarRocks 助力喜马拉雅构建实时湖仓

作者:王琛 喜马拉雅数仓专家 小编导读: 本文将介绍喜马拉雅直播的业务现状及数据仓库架构的迭代升级,重点分享基于 Flink Paimon StarRocks 实现实时湖仓的架构及其成效。我们通过分钟级别的收入监控、实时榜单生成、流量监测和盈亏预警&am…

Virtuoso使用layout绘制版图、使用Calibre验证DRC和LVS

1 绘制版图 1.1 进入Layout XL 绘制好Schmatic后,在原理图界面点击Launch,点击Layout XL进入版图绘制界面。 1.2 导入元件 1、在Layout XL界面左下角找到Generate All from Source。 2、在Generate Layout界面,选中“Instance”&#…

vscode插件-08 Golang

文章目录 Go安装其他必须软件 Go Go语言环境,只需安装这一个插件。然后通过vscode命令下载安装其他go环境需要的内容。 程序调试,需要创建.vscode文件夹并编写launch.json文件。 安装其他必须软件 ctrlshiftp,调出命令面板,输入…

Linux系列-vim的使用

🌈个人主页:羽晨同学 💫个人格言:“成为自己未来的主人~” vim的使用 vim是多模式编辑器,不同的是vim是vi的升级版本,它不仅兼容vi的所有指令,而且还有一些新的特性在里面,比如语法加亮&am…

强化学习DQN实践(gymnasium+pytorch)

Pytorch官方教程中有强化学习教程,但是很多中文翻译都太老了,里面的代码也不能跑了 这篇blog按照官方最新教程实现,并加入了一些个人理解 工具 gymnasium:由gym升级而来,官方定义:An API standard for rei…

2024快手面试算法题-生气传染

问题描述 思路分析 生气只会向后传播,最后一个生气的人一定是最长连续没有生气的人中的最后一个人,前提是前面得有一个人生气。 注意,一次只能传播一个人,比如示例1,第一次只会传播给第一个P,不会传播给第…

入门 | Kafka数据使用vector消费到Loki中使用grafana展示

一、Loki的基本介绍 1、基本介绍 Loki 是由 Grafana Labs 开发的一款水平可扩展、高性价比的日志聚合系统。它的设计初衷是为了有效地处理和存储大量的日志数据,与 Grafana 生态系统紧密集成,方便用户在 Grafana 中对日志进行查询和可视化操作。 从架构…

分类算法——逻辑回归 详解

逻辑回归(Logistic Regression)是一种广泛使用的分类算法,特别适用于二分类问题。尽管名字中有“回归”二字,逻辑回归实际上是一种分类方法。下面将从底层原理、数学模型、优化方法以及源代码层面详细解析逻辑回归。 1. 基本原理 …

【Spring MVC】DispatcherServlet 请求处理流程

一、 请求处理 Spring MVC 是 Spring 框架的一部分,用于构建 Web 应用程序。它遵循 MVC(Model-View-Controller)设计模式,将应用程序分为模型(Model)、**视图(View)和控制器&#x…

现代数字信号处理I--最佳线性无偏估计 BLUE 学习笔记

目录 1. 最佳线性无偏估计的由来 2. 简单线性模型下一维参数的BLUE 3. 一般线性模型下一维参数的BLUE 4. 一般线性模型下多维参数的BLUE 4.1 以一维情况说明Rao论文中的结论 4.2 矢量参数是MVUE的本质是矢量参数中的每个一维参数都是MVUE 4.3 一般线性模型多维参数BLUE的…

QT(绘图)

目录 QPainter QPainter 的一些关键步骤和使用方法: QPainter 的一些常用接口: 1. 基础绘制接口 2. 颜色和画刷设置 3. 图像绘制 4. 文本绘制 5. 变换操作 6. 渲染设置 7. 状态保存与恢复 8. 其它绘制方法 示例代码1: 示例代码…

【js逆向学习】某多多anti_content逆向(补环境)

文章目录 声明逆向目标逆向分析逆向过程总结 声明 本文章中所有内容仅供学习交流使用,不用于其他任何目的,不提供完整代码,抓包内容、敏感网址、数据接口等均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的…

【安全解决方案】深入解析:如何通过CDN获取用户真实IP地址

一、业务场景 某大型互联网以及电商公司为了防止客户端获取到真实的ip地址,以及达到保护后端业务服务器不被网站攻击,同时又可以让公安要求留存网站日志和排查违法行为,以及打击犯罪的时候,获取不到真实的ip地址,发现…

Java | Leetcode Java题解之第524题通过删除字母匹配到字典里最长单词

题目&#xff1a; 题解&#xff1a; class Solution {public String findLongestWord(String s, List<String> dictionary) {int m s.length();int[][] f new int[m 1][26];Arrays.fill(f[m], m);for (int i m - 1; i > 0; --i) {for (int j 0; j < 26; j) {…

python爬虫抓取豆瓣数据教程

环境准备 在开始之前&#xff0c;你需要确保你的Python环境已经安装了以下库&#xff1a; requests&#xff1a;用于发送HTTP请求。BeautifulSoup&#xff1a;用于解析HTML文档。 如果你还没有安装这些库&#xff0c;可以通过以下命令安装&#xff1a; pip install requests…