prometheus普罗米修斯持久化

在这里插入图片描述

1.安装普罗米修斯

按照以下步骤进行操作:

  1. 首先,打开普罗米修斯的官方网站(https://prometheus.io)。
  2. 在网站顶部的菜单中,选择"Downloads"(下载)选项。
  3. 在下载页面中,找到适用于您系统的最新版本的压缩包,然后点击下载。
  4. 下载完成后,将压缩包解压到您希望安装普罗米修斯的目录中。
  5. 在解压后的目录中,您将找到一个名为prometheus的可执行文件,这是普罗米修斯服务器的主要组件。
  6. 创建一个用于存储配置文件和数据的目录。可以在解压后的目录中创建一个名为data的文件夹。
  7. 在存储配置文件的目录中创建一个名为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:
  # - "first_rules.yml"
  # - "second_rules.yml"

# A scrape configuration containing exactly one endpoint to scrape:
# Here it's Prometheus itself.
scrape_configs:
  # The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.
  - job_name: "prometheus"

    # metrics_path defaults to '/metrics'
    # scheme defaults to 'http'.

    static_configs:
      - targets: ["10.0.0.219:9090"]
  - job_name: 'pushgateway'
    static_configs:
      - targets: ['10.0.0.219:9091','10.0.0.218:9091']
        labels: 
            instance: pushgateway
# 添加 Node Exporter 监控配置
  - job_name: 'node exporter'
    static_configs:
      - targets: ['10.0.0.219:9100', '192.168.4.241:9100', '192.168.4.240:9100']
#持久化
remote_write:
 - url: "http://10.0.0.218:8087/receive"
  1. 打开终端,并导航到解压后的目录。
  2. 运行以下命令启动普罗米修斯服务器:
./prometheus --config.file=prometheus.yml --storage.tsdb.path=data
  1. 等待一段时间,使服务器启动和初始化。
  2. 现在,您可以通过访问http://10.0.0.219:9090来访问普罗米修斯的Web界面。

2.安装和部署自定义采集器Pushgateway

  1. 首先,打开Pushgateway的GitHub仓库页面(https://github.com/prometheus/pushgateway/releases)。
  2. 在仓库页面中,下载Pushgateway。
  3. 下载完成后,解压缩代码到您希望安装Pushgateway的目录中。
  4. 运行以下命令启动Pushgateway服务器:
nohup ./pushgateway  &
  1. 现在,您可以通过访问http://localhost:9091来访问Pushgateway的Web界面。

3.安装和部署Grafana

1.下载页面https://grafana.com/grafana/download?pg=get
2.解压

tar -zxvf grafana-enterprise-10.2.3.linux-amd64.tar.gz

3.修改邮箱告警配置文件
/azhangjs/grafana/conf/defaults.ini

[smtp]
enabled = true
host = smtp.sina.com:25
user = zhang_jushun@sina.com
# If the password contains # or ; you have to wrap it with triple quotes. Ex """#password;"""
password = 11221222
;cert_file = 
;key_file =
;skip_verify = true
from_address = zhang_jushun@sina.com
from_name = Grafana
ehlo_identity =
startTLS_policy =

4.启动命令

nohup ./grafana-server >1.txt &

5.访问 http://10.0.0.58:3000 账号 admin 密码默认 admin
6.配置普罗米修斯数据源
image.png
7.下载dashboards模板,导入dashboards
image.png
附录:
常用dashboards
https://grafana.com/grafana/dashboards/

4.安装InfluxDB 2.x(持久化)

远程存储方案主要有哪些?

来自官方文档: https://prometheus.io/docs/operating/integrations/#remote-endpoints-and-storage

优势

InfluxDB相比其他时序数据库具有以下优势:

  1. 设计用于时序数据:InfluxDB专门为高效处理和存储时序数据而设计。它使用了一种称为"TSDB"(时间序列数据库)的数据结构,可以快速地写入和查询大量时序数据。与传统的关系型数据库相比,InfluxDB在时序数据的存储和查询性能方面表现更出色。
  2. 高性能:InfluxDB采用了多级索引和压缩算法,以提供高性能的数据写入和查询。它支持批量写入和高并发读取,并且能够轻松地扩展以处理大规模的数据流。这使得InfluxDB成为处理实时监控、传感器数据、日志数据等具有高吞吐量和频繁更新的应用的理想选择。
  3. 灵活的查询语言:InfluxDB提供了一种名为InfluxQL的查询语言,用于灵活地查询和聚合时序数据。InfluxQL支持常见的SQL操作,如选择、过滤、排序、分组和聚合,同时还提供了针对时序数据优化的特定函数和操作符。这使得用户可以轻松地进行复杂的时序数据分析和可视化。
  4. 内置的数据保留策略:InfluxDB内置了数据保留策略,可以根据时间或空间等条件自动删除旧数据。这使得用户可以轻松地管理和控制数据的保留期限,避免数据无限增长导致的存储问题。
  5. 生态系统和集成:InfluxDB拥有丰富的生态系统和广泛的集成支持。它与多个监控和数据可视化工具(如Grafana、Prometheus)紧密集成,可以方便地进行数据展示和分析。此外,InfluxDB还提供了多个客户端库和API,支持多种编程语言和平台。

总之,InfluxDB在时序数据处理方面具有出色的性能和灵活性,适用于大规模的实时监控、传感器数据、日志数据等应用场景,并且具有丰富的生态系统和集成支持。

安装

按照以下步骤进行操作:

  1. 下载 InfluxDB 2.x 的安装包。你可以在 InfluxDB 官方网站(https://www.influxdata.com/downloads/)的下载页面上找到适用于你操作系统的安装包。

image.png

wget https://dl.influxdata.com/influxdb/releases/influxdb2-2.7.5_linux_amd64.tar.gz
  1. 解压安装包。根据你下载的安装包类型,执行相应的解压命令。
tar xvfz influxdb2-2.7.5_linux_amd64.tar.gz
  1. 启动 InfluxDB。在终端或命令提示符中,进入 InfluxDB 解压后的目录,执行启动命令。根据你的操作系统和安装包类型,启动命令可能会不同。
nohup ./influxdb2-2.7.4/usr/bin/influxd >1.txt &
  1. 验证安装。使用浏览器访问 InfluxDB 的管理界面,默认地址为 [http://10.0.0.218:8086/](http://10.0.0.218:8086/)。如果成功打开了管理界面,则说明 InfluxDB 安装成功。

5.安装Telgraf

按照以下步骤进行操作:

  1. 下载 Telegraf 的安装包。你可以在 Telegraf 官方网站的下载页面上找到适用于你操作系统的安装包。
wget https://dl.influxdata.com/telegraf/releases/telegraf-1.29.2_linux_amd64.tar.gz

image.png

  1. 解压安装包。根据你下载的安装包类型,执行相应的解压命令。
tar xf telegraf-1.29.2_linux_amd64.tar.gz
  1. 配置 Telegraf。在解压后的目录中,找到并编辑 /etc/telegraf/telegraf.conf 文件,根据你的需求进行配置。你可以设置数据收集的插件、输出目标、认证方式等等。
###############################################################################
#                            OUTPUT PLUGINS                                   #
###############################################################################

# Configuration for sending metrics to InfluxDB 2.0
# 配置将指标输出到 InfluxDB 2.0
[[outputs.influxdb_v2]]
  # 这里的 urls 指向 InfluxDB 的地址,可以是多个
  urls = ["http://127.0.0.1:8086"]
  # 这里的 Token 为 InfluxDB 中创建的 Token
  # 推荐使用环境变量的方式传入,本例为了方便直接把 token 写到配置文件中了
  #token = "$INFLUX_TOKEN"
  token = "asdfghjkxxxxxxxxxxxxxxxxxxxxxx=="
  # InfluxDB 的 organization 名称
  organization = "dsg"
  # 数据要输出到的 bucket 名称
  bucket = "telegraf"

# 配置监听端口和path,使之可以接收数据,这里会应用到Prometheus的配置文件中
[[inputs.http_listener_v2]]
 ## Address and port to host HTTP listener on
 # 监听端口
 service_address = ":8087"
 ## Path to listen to.
 # 设置接收数据的path,对应的HTTP地址为 http://ip:8087/receive
 path = "/receive"
 ## Data format to consume. 
 # 接收从Prometheus中出入过来的格式数据
 data_format = "prometheusremotewrite"
 
# Read metrics from one or many prometheus clients
# 读取 Prometheus 这个服务自身的指标数据(跟 Prometheus 写入数据到 InfluxDB 没有关系)
[[inputs.prometheus]]
  ## An array of urls to scrape metrics from.
  # 采集一下 prometheus 这个服务的指标数据,可以观察是否能正常写入数据到 bucket 中
  # 该 url 为本例安装的 Prometheus 服务的指标地址,数组格式可以是多个
  urls = ["http://10.0.0.219:9090/metrics"]

# Telegraf 提供了很多 inputs.xxxx 获取服务指标的插件可以直接使用,详见官网
# 以下配置随便获取一些本机数据
[[inputs.cpu]]
  percpu = true
  totalcpu = true
  collect_cpu_time = false
  report_active = false
[[inputs.disk]]
  ignore_fs = ["tmpfs", "devtmpfs", "devfs", "iso9660", "overlay", "aufs", "squashfs"]
[[inputs.diskio]]
  fieldpass = ["read_bytes","write_bytes","reads","writes"]
[[inputs.mem]]  
  fieldpass = ["available","total","available_percent","cached","buffered"]
[[inputs.net]]
  interfaces = ["eth*"]
  fieldpass = ["bytes_recv","bytes_sent"]
[[inputs.processes]]
  interval = "10m"
  fielddrop = ["wait","idle","unknown"]
[[inputs.swap]]
  # no configuration
[[inputs.system]]
  interval = "2m"
  fielddrop = ["uptime_format"]
  1. 启动 Telegraf。在终端或命令提示符中,进入 Telegraf 解压后的目录,执行启动命令。根据你的操作系统和安装包类型,启动命令可能会不同。
nohup ./telegraf --config ../../etc/telegraf/telegraf.conf &
  1. 验证安装。确认 Telegraf 是否成功运行,并开始收集和发送数据(http://10.0.0.218:9273/metrics)。你可以查看日志文件或使用其他工具来验证数据的收集和传输情况。

6.Java传输数据

 <!-- The client -->
        <dependency>
            <groupId>io.prometheus</groupId>
            <artifactId>simpleclient</artifactId>
            <version>0.15.0</version>
        </dependency>
        <!-- Hotspot JVM metrics-->
        <dependency>
            <groupId>io.prometheus</groupId>
            <artifactId>simpleclient_hotspot</artifactId>
            <version>0.15.0</version>
        </dependency>
        <!-- Exposition HTTPServer-->
        <dependency>
            <groupId>io.prometheus</groupId>
            <artifactId>simpleclient_httpserver</artifactId>
            <version>0.15.0</version>
        </dependency>
        <!-- Pushgateway exposition-->
        <dependency>
            <groupId>io.prometheus</groupId>
            <artifactId>simpleclient_pushgateway</artifactId>
            <version>0.15.0</version>
        </dependency>
package com.dsg.push.controller;

import com.influxdb.client.InfluxDBClient;
import com.influxdb.client.InfluxDBClientFactory;
import com.influxdb.client.WriteApiBlocking;
import com.influxdb.client.domain.WritePrecision;
import com.influxdb.client.write.Point;
import io.prometheus.client.CollectorRegistry;
import io.prometheus.client.Gauge;
import io.prometheus.client.exporter.PushGateway;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

import java.io.IOException;
import java.time.Instant;
import java.util.HashMap;
import java.util.Map;
import java.util.Random;
@RestController
public class MyController {

    @GetMapping("/my-endpoint")
    public void myEndpoint() throws IOException, InterruptedException {
        // 业务逻辑代
        CollectorRegistry registry = new CollectorRegistry();
        Gauge durationM = Gauge.build().name("azhangjs_cpu_used").help("服务的cpu、内存等使用率指标").labelNames("l").register(registry);
        Gauge durationDb = Gauge.build().name("azhangjs_aff_db_connect").help("数据库的最大连接数、当前连接数指标").labelNames("l").register(registry);
        // 创建一个Random对象
        Random random = new Random();
        Boolean flag = true;
        while(true) {
            try {
                //db
            int randomInRange3 = random.nextInt(1000) + 1;
            int randomInRange4 = random.nextInt(1000) + 1;
            durationDb.labels("max_connections").set(randomInRange3);
            durationDb.labels("max_used_connections").set(randomInRange4);
            float randomInRange1 = random.nextInt(100) + random.nextFloat();
            float randomInRange2 = random.nextInt(100) + random.nextFloat();
            durationM.labels("192.168.0.100").set(randomInRange1);
            durationM.labels("192.168.0.101").set(randomInRange2);
            System.out.println("------"+randomInRange3+"------"+randomInRange4+"------"+randomInRange1+"------"+randomInRange2);

            } finally {

                if(flag) {
                    PushGateway pg = new PushGateway("10.0.0.219:9091");
                    //按照instance推送
                    Map<String, String> insMap = new HashMap<>();
                    insMap.put("instance", "dsgscheduler219");
                    pg.pushAdd(registry, "azhangjs_monitor", insMap);
                    flag = false;
                }else {
                    PushGateway pg = new PushGateway("10.0.0.218:9091");
                    //按照instance推送
                    Map<String, String> insMap = new HashMap<>();
                    insMap.put("instance", "dsgscheduler218");
                    pg.pushAdd(registry, "azhangjs_monitor", insMap);
                    flag = true;
                }
                Thread.sleep(100);
            }
        }
    }
}

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

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

相关文章

启英泰伦推出「离线自然说」,离线语音交互随意说,不需记忆词条

离线语音识别是指不需要依赖网络&#xff0c;在本地设备实现语音识别的过程&#xff0c;通常以端侧AI语音芯片作为载体来进行数据的采集、计算和决策。但是语音芯片的存储空间有限&#xff0c;通过传统的语音算法技术&#xff0c;最多也只能存储数百条词条&#xff0c;导致用户…

c语言学生管理系统

创建结构体里面包含学生的各种信息。 struct xs {int xh;char xm[20];int gs, yy, wl;double pj;struct xs* next; }; 创建菜单 void menu() {printf("\n************************************\n");printf("* 学生管理系统&#xff08;1.0&#xff0…

使用MATLAB连接USRP

文章目录 前言一、本地环境二、前期准备1、MATLAB版本、labview版本、UHD 版本对应关系2、下载 GNU Radio Companion3、确定 USRP UHD 版本①、下载一个 USRP 硬件驱动程序②、确认 MATLAB 的 UHD 版本 三、下载 USRP 通信工具箱支持包四、使用 MATLAB 连接 USRP 前言 本文记录…

vue中组件的传递取值方式总结

vue中组件的传递取值方式总结 目录概述需求&#xff1a; 设计思路实现思路分析1.父子传参2.vue 子组件接收数据进行渲染或处理3.父组件通过v-on监听自定义事件并取得传递的值4.ref引用子组件5.通过provide/inject传值6.attrs和listeners7.通过vuex进行全局状态管理8.Vue mixin9…

Python 分支结构案例-个人所得税计算器

个人所得税的计算方法&#xff08;旧版&#xff09;如下表&#xff1a; 要使用代码根据工资计算税后收入&#xff0c;可以用分支结构编写一个计算器&#xff1a; """ example018 - 个人所得税&#xff08;旧版算法&#xff09;计算器Author: 不在同一频道上的呆…

扩展卡尔曼滤波(Extended Kalman Filter, EKF):理论和应用

扩展卡尔曼滤波&#xff08;Extended Kalman Filter, EKF&#xff09;&#xff1a;理论、公式和应用 引言 卡尔曼滤波是一种广泛应用于估计动态系统状态的技术&#xff0c;但当系统的动态模型或测量模型是非线性的时候&#xff0c;传统的卡尔曼滤波方法就显得无能为力。扩展卡…

Modbus协议学习第二篇之Modbus poll slave仿真软件初体验

软件准备 学习Modbus离不开硬件&#xff0c;好在我们可以通过仿真软件来模拟硬件&#xff0c;本篇博客就来简单介绍一下Modbus仿真软件的最基础使用方法&#xff0c;需要用到的3款仿真软件如下&#xff1a; Modbus Poll 64位 / Modbus Poll 32位&#xff08;根据自己机器位数选…

机器学习周记(第二十五周:文献阅读-DSTIGNN)2024.1.8~2024.1.14

目录 摘要 ABSTRACT 1 论文标题 2 论文摘要 3 论文背景 4 过去研究 5 论文研究 5.1 问题描述 5.2 论文模型 5.2.1 时空交互学习模块&#xff08;Spatiotemporal Interactive Learning Module&#xff09; 5.2.2 动态图推理模块&#xff08;Dynamic Graph Inference…

哪些代码是 Code Review 中的大忌?—— 以 Python 为例

Code Review 首要达成的结果是更好的可读性。 在此基础上才是进一步发现项目的 Bug、处理性能优化上的问题。 因为&#xff0c;编码是给人看的&#xff0c;不是给计算机&#xff08;Coding for human, NOT computer&#xff09;。 一. 滥用缩写命名 Overusing abbreviation …

软件工程:黑盒测试等价分类法相关知识和多实例分析

目录 一、黑盒测试和等价分类法 1. 黑盒测试 2. 等价分类法 二、黑盒测试等价分类法实例分析 1. 工厂招工年龄测试 2. 规定电话号码测试 3. 八位微机测试 4. 三角形判断测试 一、黑盒测试和等价分类法 1. 黑盒测试 黑盒测试就是根据被测试程序功能来进行测试&#xf…

4_【Linux版】重装数据库问题处理记录

1、卸载已安装的oracle数据库。 2、知识点补充&#xff1a; 3、调整/dev/shm/的大小 【linux下修改/dev/shm tmpfs文件系统大小 - saratearing - 博客园 (cnblogs.com)】 mount -o remount,size100g /dev/shm 4、重装oracle后没有orainstRoot.sh 【重装oracle后没有orains…

【面试突击】并发编程、线程池面试实战

&#x1f308;&#x1f308;&#x1f308;&#x1f308;&#x1f308;&#x1f308;&#x1f308;&#x1f308; 欢迎关注公众号&#xff08;通过文章导读关注&#xff1a;【11来了】&#xff09;&#xff0c;及时收到 AI 前沿项目工具及新技术 的推送 发送 资料 可领取 深入理…

2024--Django平台开发-Django知识点(七)

频率超高的问题 Redis的问题虚拟环境mysqlcient和pymysql短信服务&#xff0c;一期用的是腾讯云短信 虚拟环境 可以用来创建虚拟环境的&#xff1a; virtualenv这个模块&#xff0c;简单易上手&#xff0c;推荐 小白不建议&#xff0c;conda&#xff0c;如果大家用这个&…

NSSCTF Round# 16 Basic pwn方向题解

pwn nc_pwnre 没有附件&#xff0c;nc直接连接 给了一段汇编代码&#xff0c;让gpt翻译一下 这段汇编代码是一个循环&#xff0c;它对存储在ebpi位置的字符串进行处理。让我逐步解释一下每个指令的作用&#xff1a;mov eax, [ebpi]: 将ebpi位置的值加载到eax寄存器中。 add e…

【汇编要笑着学】汇编模块化编程 | call和ret调用指令 | jmp跳转指令 | inc自加指令

Ⅰ.汇编模块化编程 0x00 一个简单的例子 我们了解模块化编程前先给出一个例子&#xff0c;方便大家快速了解。 SECTION MBR vstart0x7c00 ; 起始地址编译在0x7c00mov ax,cs mov ds,ax mov es,axmov ss,axmov fs,axmov sp,0x7c00 ; 上面这些都没什…

系列十、Spring Security登录接口添加验证码

一、Spring Security登录接口添加验证码 1.1、概述 一般企业开发中&#xff0c;登录时都会有一个验证码&#xff0c;基于Spring Security的登录接口默认是没有验证码的&#xff1f;那么如何把验证码功能集成到Spring Security的登录接口呢&#xff1f;请看下文&#xff01; 1.…

基于SSM的仓库在线管理系统

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;Vue 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#xff1a;是 目录…

C++学习笔记——输入、输出和文件

目录 一、标准输入输出 2.1下面是它们的基本用法 解释 二、格式化输入输出 2.2下面是一个示例 解释 三、文件读写 3.3下面是一个文件读写的示例 解释 四、异常处理和错误检测 4.1下面是一个示例 解释 五、一个实例代码 5.1如何读取 CSV 文件&#xff0c;并计算每…

大厂是怎么做支付系统的流程容错的?

点击下方“JavaEdge”&#xff0c;选择“设为星标” 第一时间关注技术干货&#xff01; 1 单据关联 如某些订单域内部的多种单据间存在关联关系一样&#xff0c;支付设计上也有单据间关联设计。如所有逆向过程都须持有正向的单据&#xff0c;因此退款须关联到原来的支付&#…

LTESniffer:一款功能强大的LTE上下行链路安全监控工具

关于LTESniffer LTESniffer是一款功能强大的LTE上下行链路安全监控工具&#xff0c;该工具是一款针对LTE的安全开源工具。 该工具首先可以解码物理下行控制信道&#xff08;PDCCH&#xff09;并获取所有活动用户的下行链路控制信息&#xff08;DCI&#xff09;和无线网络临时…