[prometheus]基于influxdb2实现远端存储
前言
Prometheus自带的时序数据库胜在使用方便,缺点在于难以维护,如果数据有问题,可能需要删除存储目录、重建目录再重启Prometheus,才能恢复正常。而且Prometheus自带的时序数据库不适合存储大量历史数据,也无法灵活扩展。为此,Prometheus提供了远端存储的方案,可以将数据存储到InfluxDB、OpenTSDB等时序数据库中。
在InfluxDB 2之前,InfluxDB提供远端写的API供Prometheus直接写数据,InfluxDB 2之后,需要通过 telegraf 才能将 Prometheus的监控数据存储到 InfluxDB 中。
环境
- Prometheus版本:2.38
- InfluxDB版本:2.3.0
- Telegraf版本:1.23
- node_exporter版本:1.3.1
- Grafana版本:8.3.3
- 系统版本:CentOS 7
- docker版本:19.03
安装influxdb
- docker拉取镜像
docker pull influxdb:2.3.0
- 生成配置文件
# 创建挂载目录
mkdir -p /home/apps/influxdb/{conf,data}
docker run --rm influxdb:2.3.0 influxd print-config > /home/apps/influxdb/conf/config.yml
- 创建容器
docker run --name influxdb -p 8086:8086 \
-v /home/apps/influxdb/data:/var/lib/influxdb2 \
-v /home/apps/influxdb/conf/config.yml:/etc/influxdb2/config.yml \
-d influxdb:2.3.0
- 浏览器访问 IP:8086 ,配置账户、bucket等。并获取token

安装telegraf
- docker拉取镜像
docker pull telegraf:1.23
- 生成配置文件
mkdir -p /home/apps/telegraf/conf
docker run --rm telegraf:1.23 telegraf config > /home/apps/telegraf/conf/telegraf.conf
- 修改配置文件,示例。主要是 "
outputs.influxdb_v2"、"inputs.http_listener_v2"和"inputs.prometheus"这三块配置,其它都是默认的。篇幅限制,默认的注释全部删了,可导出默认配置后自行查看。默认未注释“outputs.influxdb”,需要注释掉。
[global_tags]
[agent]
interval = "10s"
round_interval = true
metric_batch_size = 1000
metric_buffer_limit = 10000
collection_jitter = "0s"
flush_interval = "10s"
flush_jitter = "0s"
precision = "0s"
hostname = ""
omit_hostname = false
[[outputs.influxdb_v2]]
urls = ["http://192.168.0.20:8086"]
token = "gXnmZO4ILBSHa0eivemfvXEz6EiAtv8kktKxn7Hz2sQ6ItUtfbyjCaRiSStIFJDzUV2wR2cfUE8Dkb6yLN1bIQ=="
organization = "rainux"
bucket = "prometheus"
[[inputs.cpu]]
percpu = true
totalcpu = true
collect_cpu_time = false
report_active = false
core_tags = false
[[inputs.disk]]
ignore_fs = ["tmpfs", "devtmpfs", "devfs", "iso9660", "overlay", "aufs", "squashfs"]
[[inputs.diskio]]
[[inputs.kernel]]
[[inputs.mem]]
[[inputs.processes]]
[[inputs.swap]]
[[inputs.system]]
[[inputs.http_listener_v2]]
service_address = ":1234"
paths = ["/receive"]
data_format = "prometheusremotewrite"
[[inputs.prometheus]]
urls = ["http://192.168.0.20:9100/metrics"]
- 创建容器
docker run -p 1234:1234 \
-v /home/apps/telegraf/conf/telegraf.conf:/etc/telegraf/telegraf.conf:ro \
--name=telegraf -d telegraf:1.23
安装prometheus
- docker或者二进制安装都行。这里用的二进制安装方式,安装比较简单,此处不再赘述,可参考底部的链接"搭建基本的Prometheus监控系统"。prometheus.yml配置示例如下。
# my global config
global:
scrape_interval: 15s
evaluation_interval: 15s
alerting:
alertmanagers:
- static_configs:
- targets:
# - alertmanager:9093
rule_files:
# - "first_rules.yml"
# - "second_rules.yml"
scrape_configs:
- job_name: "prometheus"
static_configs:
- targets: ["192.168.0.20:9090"]
remote_write:
- url: "http://192.168.0.20:1234/receive"
- 启动prometheus
nohup /home/apps/prometheus/prometheus --config.file=/home/apps/prometheus/prometheus.yml --web.listen-address=:9100 > /dev/null 2>&1 &
安装node_exporter
- docker或者二进制安装都行。这里用的二进制安装方式,安装比较简单,此处不再赘述,可参考底部的链接"搭建基本的Prometheus监控系统"。
- 启动
nohup /home/apps/node_exporter/node_exporter --web.listen-address=":9090" > /dev/null 2>&1 &
安装grafana
- docker安装
docker pull grafana/grafana:latest
docker -p 3000:3000 --name grafana grafana/grafana:latest
- 使用默认账密 admin/admin 在浏览器登录grafana的控制台。(IP:3000)
- 添加prometheus的数据源
- 导入ID为10242的dashboard(其它ID:12633)

参考
- 简书 - rekca - prometheus+influxdb2.0+grafana打造监控系统
- 官方文档 - telegraf - v1.23 configuration
- 官方文档 - Prometheus Remote Write Support with InfluxDB 2.0
- Rainux - 搭建基本Prometheus监控系统
- 陈金窗、刘政委、张其栋、郑少斌 - 《Prometheus监控技术与实践》,机械工业出版社
[prometheus]基于influxdb2实现远端存储的更多相关文章
- Prometheus监控学习笔记之prometheus的远端存储
0x00 概述 prometheus在容器云的领域实力毋庸置疑,越来越多的云原生组件直接提供prometheus的metrics接口,无需额外的exporter.所以采用prometheus作为整个集 ...
- 基于OceanStor Dorado V3存储之数据保护 Hyper 特性
基于OceanStor Dorado V3存储之数据保护 Hyper 特性 1.1 快照 1.2 HyperCDP 1.3 HyperCopy 1.4 克隆(HyperClone) 1.5 ...
- TKE用户故事 | 作业帮检索服务基于Fluid的计算存储分离实践
作者 吕亚霖,2019年加入作业帮,作业帮基础架构-架构研发团队负责人,在作业帮期间主导了云原生架构演进.推动实施容器化改造.服务治理.GO微服务框架.DevOps的落地实践. 张浩然,2019年加入 ...
- 【WP8.1开发】基于应用的联系人存储
上一篇文章所吹的牛是访问系统(手机)上的联系人,当然那只是读不能改,这是自然的,要是让你能随便修改用户的联系人信息的话,那后果很严重,有些恶意开发者就有可能把”你的户口改成猪“. 但是,API也允许应 ...
- 基于catalog 创建RMAN存储脚本
--============================== -- 基于catalog 创建RMAN存储脚本 --============================== 简言之,将rman的 ...
- [大牛翻译系列]Hadoop(19)MapReduce 文件处理:基于压缩的高效存储(二)
5.2 基于压缩的高效存储(续) (仅包括技术27) 技术27 在MapReduce,Hive和Pig中使用可分块的LZOP 如果一个文本文件即使经过压缩后仍然比HDFS的块的大小要大,就需要考虑选择 ...
- [大牛翻译系列]Hadoop(18)MapReduce 文件处理:基于压缩的高效存储(一)
5.2 基于压缩的高效存储 (仅包括技术25,和技术26) 数据压缩可以减小数据的大小,节约空间,提高数据传输的效率.在处理文件中,压缩很重要.在处理Hadoop的文件时,更是如此.为了让Hadoop ...
- prometheus 基于DNS的目标发现
prometheus 基于DNS的目标发现 DNS服务发现依赖于查询A.AAAA或SRV DNS记录. 1.基于 SRV 记录发现 scrape_configs: - job_name: 'webap ...
- prometheus 基于文件的目标发现
prometheus 基于文件的目标发现 1.创建目录 cd /usr/local/prometheus/conf mkdir -pv targets/{nodes,docker} 2.修改prome ...
- 服务注册发现consul之四: 分布式锁之四:基于Consul的KV存储和分布式信号量实现分布式锁
一.基于key/value实现 我们在构建分布式系统的时候,经常需要控制对共享资源的互斥访问.这个时候我们就涉及到分布式锁(也称为全局锁)的实现,基于目前的各种工具,我们已经有了大量的实现方式,比如: ...
随机推荐
- #Python pandas库,读取模块,代码笔记
日常数据清洗中,利用python清洗的第一步就是读取对应文件,今天一起复盘一下数据读取环节的常规操作. csv和xlsx格式读取类似,所以用csv做案例 X-MIND图
- 2023-04-11:给你下标从 0 开始、长度为 n 的字符串 pattern , 它包含两种字符,‘I‘ 表示 上升 ,‘D‘ 表示 下降 。 你需要构造一个下标从 0 开始长度为 n + 1 的
2023-04-11:给你下标从 0 开始.长度为 n 的字符串 pattern , 它包含两种字符,'I' 表示 上升 ,'D' 表示 下降 . 你需要构造一个下标从 0 开始长度为 n + 1 的 ...
- 2023-02-13:力扣数据中心有 n 台服务器,分别按从 0 到 n-1 的方式进行了编号 它们之间以「服务器到服务器」点对点的形式相互连接组成了一个内部集群 其中连接 connections 是
2023-02-13:力扣数据中心有 n 台服务器,分别按从 0 到 n-1 的方式进行了编号 它们之间以「服务器到服务器」点对点的形式相互连接组成了一个内部集群 其中连接 connections 是 ...
- 2022-11-07:给你一个 n 个节点的 有向图 ,节点编号为 0 到 n - 1 ,其中每个节点 至多 有一条出边。 图用一个大小为 n 下标从 0 开始的数组 edges 表示, 节点 i 到
2022-11-07:给你一个 n 个节点的 有向图 ,节点编号为 0 到 n - 1 ,其中每个节点 至多 有一条出边. 图用一个大小为 n 下标从 0 开始的数组 edges 表示, 节点 i 到 ...
- Django4全栈进阶之路9 STATIC静态文件路径设置、MEDIA媒体文件路径设置
在 Django 4 中,可以在 settings.py 文件中设置 STATICFILES_DIRS 来指定应用程序静态文件所在的文件夹路径,设置 STATIC_ROOT 来指定收集所有应用程序静态 ...
- 数据科学工具 Jupyter Notebook 教程(一)
ipython notebook 是一个基于浏览器的 python 数据分析工具,使用起来非常方便,具有极强的交互方式和富文本的展示效果.jupyter 是它的升级版,它的安装也非常方便,一般 Ana ...
- Post-Exploitation Basics
开发后基础知识 https://tryhackme.com/room/postexploit 使用 mimikatz.bloodhound.powerview 和 msfvenom 学习后期开发和维护 ...
- Rust中的变量的声明和定义
变量的声明和定义 Rust中合法的标识符(包括变量名.函数名.triat名等)必须由数字.字母.下划线组成,而且不能以数字开头.这个和很多语言都是一样的.Rust将来也会允许其他Unicode字符作为 ...
- Handler机制实现原理总结
Handler一般用于线程间通信,如常用的子线程使用handler让主线程更新UI.那么这是怎么实现的呢? 我们先把这个大问题分解成多个小问题: post();postDelayed();sendMe ...
- 微信公众号redirect_uri 参数错误
前期所有准备工作我就不在这里一一叙述了.在这说一下需要注意的事项: 1.如果域名为www开头,记得把www去掉,否则依旧会报这个错误 2.跳转域名必须是授权域名的子集,如:'授权域名为 www.bai ...