influxdb 插入数据_SpringBoot 2.0 + InfluxDB+ Sentinel 实时监控数据存储

本文介绍了如何使用SpringBoot、InfluxDB和Sentinel实现监控数据的持久化存储。Sentinel默认仅内存存储监控数据,而通过扩展MetricsRepository接口并集成InfluxDB,可以将数据保存到时序数据库,确保数据可靠性。文章还提到了InfluxDB的特点和安装步骤,以及Sentinel控制台的改造方法。
摘要由CSDN通过智能技术生成

前言

阿里巴巴提供的控制台只是用于演示 Sentinel 的基本能力和工作流程,并没有依赖生产环境中所必需的组件,比如持久化的后端数据库、可靠的配置中心等。目前 Sentinel 采用内存态的方式存储监控和规则数据,监控最长存储时间为 5 分钟,控制台重启后数据丢失。

企业版

这里推荐一下阿里云的官方版,AHAS Sentinel 控制台 是 Sentinel 控制台的阿里云上版本,提供企业级的控制台服务,包括:

  • 实时请求链路查看
  • 还有各种酷炫的监控图表
  • 可靠的实时监控和历史监控数据查询,无需自行存储、拉取
  • 动态规则管理/推送,无需自行配置外部数据源

免费版,可以提供 5 个节点的免费额度。开通专业版即可享受不限量节点额度。

专业版没有实例连接限制,开通后每天前5个限流降级节点不计费,超出部分按3元/天/实例收取相应的费用。

思路

官方文档也提供了思路,若需要监控数据持久化的功能,可以自行扩展实现 MetricsRepository 接口(0.2.0 版本),然后注册成 Spring Bean 并在相应位置通过 @Qualifier 注解指定对应的 bean name 即可。MetricsRepository 接口定义了以下功能:

  • save 与 saveAll:存储对应的监控数据
  • queryByAppAndResourceBetween:查询某段时间内的某个应用的某个资源的监控数据
  • listResourcesOfApp:查询某个应用下的所有资源

其中默认的监控数据类型为 MetricEntity,包含应用名称、时间戳、资源名称、异常数、请求通过数、请求拒绝数、平均响应时间等信息。

对于监控数据的存储,用户需要根据自己的存储精度,来考虑如何存储这些监控数据。显然我们要使用目前最流行的时序数据库InfluxDB解决方案,不要问什么?闭眼享受就可以了。

选型

InfluxDB是一个开源分布式时序、事件和指标数据库。使用 Go 语言编写,无需外部依赖。

应用:性能监控,应用程序指标,物联网传感器数据和实时分析等的后端存储。

  • 强大的类SQL语法
  • 内置http支持,使用http读写
  • 基于事件:它支持任意的事件数据
  • 无结构(无模式):可以是任意数量的列
  • 可度量性:你可以实时对大量数据进行计算
  • 持续高并发写入、无更新、数据压缩存储、低查询延时
  • 支持min, max, sum, count, mean, median 等一系列函数
  • 基于时间序列,支持与时间有关的相关函数(如最大,最小,求和等)

改造

InfluxDB 安装

首先你得先有个 Influxdb 数据库,建议使用 Docker 方式安装,更多可以参考文末链接。

需要注意的是,从1.1.0版开始不推荐使用管理员界面,并将在1.3.0版中删除。默认情况下禁用。如果需要,仍可以通过设置如下环境变量来启用它。

以下端口很重要,并由InfluxDB使用。

  • 8086 HTTP API端口
  • 8083 管理员界面端口(如果已启用,1.7.8貌似启用也不好使),官方推荐使用chronograf
d3691b8c7797b49b2494ffc16fcb1716.png

通过该命令, 生成默认配置文件:

docker run --rm influxdb influxd config > influxdb.conf

创建并运行容器:

docker run -d  -p 8086:8086  -p 8083:8083  -e INFLUXDB_ADMIN_ENABLED=true  -v $PWD/data:/var/lib/influxdb/  -v $PWD/config/influxdb.conf:/etc/influxdb/influxdb.conf:ro  --name influx  influxdb -config /etc/influxdb/influxdb.conf

生产环境一定要开启权限验证,修改 influxdb.conf 配置:

[http] enabled = true bind-address = ":8086" auth-enabled = true # 鉴权

创建用户:

# 进入容器docker exec -it influx /bin/sh# 连接influx# 创建用户CREATE USER admin with PASSWORD 'admin' WITH ALL PRIVILEGES

退出重新登录:

# 用户密码登录influx -username admin -password admin# 创建数据库CREATE DATABASE sentinel_log

Sentinel 控制台改造

pom.xml引入 influxdb 官方开源工具包:

org.influxdb influxdb-java 2.15

配置文件引入:

# 自行替换 API 地址:端口spring.influx.url=http://127.0.0.1:8086spring.influx.user=adminspring.influx.password=adminspring.influx.database=sentinel_log

配置数据源:

/** * InfluxDb 配置 * 创建者 爪哇笔记 * 网址 https://blog.52itstyle.vip */@Configurationpublic class InfluxDbConfig { @Value("${spring.influx.url:''}") private String influxDBUrl; @Value("${spring.influx.user:''}") private String userName; @Value("${spring.influx.password:''}") private String password; @Value("${spring.influx.database:''}") private String database; @Bean public InfluxDB influxDB(){ InfluxDB influxDB = InfluxDBFactory.connect(influxDBUrl, userName, password); try { /** * 异步插入: * enableBatch这里第一个是point的个数,第二个是时间,单位毫秒 * point的个数和时间是联合使用的,如果满100条或者2000毫秒 * 满足任何一个条件就会发送一次写的请求。 */ influxDB.setDatabase(database) .enableBatch(100,2000, TimeUnit.MILLISECONDS); } catch (Exception e) { e.printStackTrace(); } finally { influxDB.setRetentionPolicy("autogen"); } influxDB.setLogLevel(InfluxDB.LogLevel.BASIC); return influxDB; }}

实现 MetricsRepository 接口,重写实现:

/** * 数据CURD * 创建者 爪哇笔记 * 网址 https://blog.52itstyle.vip */@Component("inInfluxdbMetricsRepository")public class InInfluxdbMetricsRepository implements MetricsRepository { @Autowired public InfluxDB influxDB; @Override public synchronized void save(MetricEntity metric) { //省略代码,太长了,参考内存写法,参考 saveAll 这里是单条插入 } @Override public synchronized void saveAll(Iterable metrics) { if (metrics == null) { return; } BatchPoints batchPoints = BatchPoints.builder() .tag("async
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值