docker安装victoriametrics(单机版)

docker安装victoriametrics

1、单机版安装

拉取镜像

bash 复制代码
docker pull victoriametrics/victoria-metrics

创建容器

bash 复制代码
docker run  --restart=always  -d -v /data/victoria-metrics-data:/victoria-metrics-data \
-p 8428:8428 --name=vm victoriametrics/victoria-metrics

然后可以访问:

bash 复制代码
http://ip:8428
#我的本机访问地址
http://192.168.52.128:8428

2、victoriametrics增删改查

2.1 、插入数据

2.1.1 组装数据插入victoriametrics(java代码插入)

bash 复制代码
一般,我们都会自己写代码采集数据,然后组装手动推送到victoriametrics,
这种方式也是用的最多的。

注意下面的参数和url都要加上单引号,如果不加,在服务器执行curl时插入不成功也不报错。

bash 复制代码
#指定时间戳写法(用的最多的写法)
curl -d 'cpu_usage_vm{name="bar",age="女"} 559.6 1733321837' -X POST 'http://localhost:8428/api/v1/import/prometheus'
#默认当前时间戳插入
curl -d 'cpu_usage_vm{name="bar",age="女"} 5.6' -X POST 'http://localhost:8428/api/v1/import/prometheus'

java代码实现插入

引入pom

java 复制代码
        <dependency>
            <groupId>cn.hutool</groupId>
            <artifactId>hutool-all</artifactId>
            <version>4.6.5</version>
        </dependency>
java 复制代码
import cn.hutool.http.HttpRequest;
import cn.hutool.http.HttpResponse;
import cn.hutool.http.Method;
public class Test{
    public static void main(String[] args) throws Exception {
        for (int i = 1; i < 100; i++) {
            String body = "cpu_usage_vm{name=\"bar\",age=\"女\"} " + (i + 0.6) + " " + System.currentTimeMillis() / 1000;
            HttpRequest request = HttpRequest.get("http://192.168.52.128:8428/api/v1/import/prometheus");
            request.body(body);
            System.out.println(body);
            request.setMethod(Method.POST);
            HttpResponse execute = request.execute();
            System.out.println(execute.body());
            //每隔一秒插入一条数据
            Thread.sleep(1000);
        }
    }
  }

2.1.2 Prometheus数据插入victoriametrics

bash 复制代码
victoriametrics可以用作 Prometheus 的长期存储,也就是Prometheus 拉取的数据,存入到victoriametrics里。
Prometheus 配置如下:
remote_write:
  - url: http://<victoriametrics-addr>:8428/api/v1/write

2.1.3 官网push到victoriametrics写法

bash 复制代码
#对应官网push数据的写法
curl -d '{"metric":{"__name__":"foo","job":"node_exporter"},"values":[0,1,2],"timestamps":[1733298568000,1733298569000,1733298570000]}' -X POST 'http://localhost:8428/api/v1/import'

2.2 、查询

2.2.1 、Instant query(即时查询)

参考官网给出的即使查询问:点击进入官网

语法:

bash 复制代码
GET | POST /api/v1/query?query=...&time=...&step=...&timeout=...

eg:

bash 复制代码
curl  'http://192.168.52.128:8428/prometheus/api/v1/query?query=cpu_usage_vmc&step=1m'

参数解释

复制代码
1、query --MetricsQL expression.
2、time --以秒精度的时间戳查询。缺省当前时间戳。时间参数可以以多种允许的格式指定,具体去官网查下。
3、timeout --查询超时时间。例如,timeout=5s。5秒查不到数据,就超时取消查询。
4、step --数据点之间的间隔,必须从范围查询返回。step缺省默认5m。
查询在start、start+step、start+2*step、结束时间戳处执行。
step不好理解,下面举例讲解:
  4.1、插入以下数据:
cpu_usage_vmc{name="zg",age="男"} 99 1733405421
cpu_usage_vmc{name="zg",age="男"} 31 1733405361
cpu_usage_vmc{name="zg",age="男"} 66 1733405301
cpu_usage_vmc{name="zg",age="男"} 69 1733405241
cpu_usage_vmc{name="zg",age="男"} 49 1733405181
cpu_usage_vmc{name="zg",age="男"} 2 1733405121
cpu_usage_vmc{name="zg",age="男"} 44 1733405061
cpu_usage_vmc{name="zg",age="男"} 22 1733405001
cpu_usage_vmc{name="zg",age="男"} 29 1733404941
  4.2、查询语句
curl 'http://192.168.52.128:8428/api/v1/query?query=cpu_usage_vmc&time=1733404941'
value查出是29,因为time时间戳刚好能匹配上。
如果时间戳time=1733404940,此时查询出来的就是null,因为实际查询范围是1733404940和1733404940-5*60直间,自然没值。
如果时间戳time=1733405060,value查出是22,因为实际查询是1733405060和1733405060-5*60,这个查询范围有多个值,但是会取和time=1733405060最近的一个值,这个最近的值是向下取的,不是向上取,也就是22。
别忘记即时查询只返回series的单个数据样本。

即时查询可以返回多个series,但每个series总是只有一个数据样本。即时查询用于以下场景:

dart 复制代码
1、获取最后记录的值;
2、汇总函数,如count_over_time;
3、用于警报和记录规则评估;
4、在Grafana中绘制统计数据或表格面板。

2.2.2 、Range query(范围查询)

语法:

bash 复制代码
GET | POST /api/v1/query_range?query=...&start=...&end=...&step=...&timeout=... 

eg:

注意,范围查询,尽量加上开始的时间戳。

dart 复制代码
curl 'http://192.168.52.128:8428/api/v1/query_range?query=cpu_usage_vm&step=1m&start=1733404940'

参数解释

dart 复制代码
1、start --开始时间戳。尽量指定个范围。
2、end --结束时间戳。如果未设置结束时间,则结束时间会自动设置为当前时间。
3、step --数据点之间的间隔,必须从范围查询返回。step缺省默认5m。
查询在start、start+step、start+2*step、结束时间戳处执行。
step不好理解,下面举例讲解:
  3.1、插入以下数据:
  cpu_usage_vmd{name="zg",age="男"} 82 1733406112
  cpu_usage_vmd{name="zg",age="男"} 77 1733406052
  cpu_usage_vmd{name="zg",age="男"} 27 1733405992
  cpu_usage_vmd{name="zg",age="男"} 22 1733405932
  cpu_usage_vmd{name="zg",age="男"} 18 1733405872
  cpu_usage_vmd{name="zg",age="男"} 78 1733405812
  cpu_usage_vmd{name="zg",age="男"} 60 1733405752
curl 'http://192.168.52.128:8428/api/v1/query_range?query=cpu_usage_vmd&start=1733406052'
如果时间戳start=1733405932,此时会查2条数据,因为会先取时间戳最近值,最近值是向下取,
此时查询条件是,1733406052-5*60,1733406052,值为22。 
然后在查1733406052,1733406052+5*60的值,切记此时取1733406052+5*60最近值,值为82。

2.2.3 、在vmui查询

bash 复制代码
#访问地址:
http://192.168.52.128:8428/vmui

直接在浏览器输入指标名称,即可查询。

bash 复制代码
cpu_usage_vm
或者
cpu_usage_vm{}

vmui查询页面解释:

dart 复制代码
#我的本机访问地址
http://192.168.52.128:8428/vmui
dart 复制代码
右上角可以设置step的值,单位m分钟,单位s秒。
还可以设置查询时间范围。LAST 1 HOUR 表示最近一小时的数据。
Gtaph可以显示多天数据,Json只返回一条数据,本身即时查询也就只返回series的一个样本值。

2.2.4、victoriametrics返回的resultType

dart 复制代码
VictoriaMetrics是一个高性能的时序数据库和监控系统,它支持多种查询语言,比如PromQL。
当你向VictoriaMetrics发送查询时,它会返回结果,这个结果的类型取决于查询的类型和返回数据的情况。
以下是一些可能的resultType值:
1、matrix:表示返回的是一系列包含时间戳和值的数据点的集合。
2、vector:表示返回的是一系列包含特定时间戳的单个数据点。
3、scalar:表示返回的是一个单一的数字,通常是一个简单的计数或总和。
4、string:表示返回的是单个字符串,通常用于返回错误信息或警告。

2.3、什么是series?series个数计算

复制代码
相同measurement、相同tag的数据属于一个series集合。
series就是不同tag列,进行排列组合。比如一个表中有两个tag字段A和B。 
A字段有有3种值,B字段有4种值,则series个数 = 3*4=12个。

2.4、MetricsQL

dart 复制代码
VictoriaMetrics 提供了一种用于执行读取查询的特殊查询语言 - MetricsQL。
它是一种类似 PromQL 的查询语言,具有一组强大的函数和特性,专门用于处理时间序列数据。
MetricsQL 与 PromQL 向后兼容,因此它共享大多数查询概念。

2.4.1、过滤

dart 复制代码
在 instant query 和 range query 部分中,我们已经使用 MetricsQL 来获取指标cpu_usage_vm的数据。
它就像在查询中编写指标名称一样简单:

eg(适用instant query 和 range query):

bash 复制代码
#不带过滤查询1
curl  'http://192.168.52.128:8428/prometheus/api/v1/query?query=cpu_usage_vm&step=1m'
#不带过滤查询2
curl  'http://192.168.52.128:8428/prometheus/api/v1/query?query=cpu_usage_vm{}&step=1m'
#查询name=bar的数据
curl  'http://192.168.52.128:8428/prometheus/api/v1/query?query=cpu_usage_vm{name="bar"}&step=1m'

更多过滤条件查询参考官网,点击进入:

2.4.3、聚合函数

很简单,官网可以查看下。
点击进入

2.5、修改数据

victoriametrics本身不支持直接修改数据。

如果你非要修改,同一个series并且时间戳相等,再次推送,修改value后再次推送,则会修改操作

bash 复制代码
#第一次推送到victoriametrics
cpu_usage_vm{name="bwar",age="男"} 2.3 1733451580'

#第二次推送到victoriametrics,则达到修改的效果
cpu_usage_vm{name="bwar",age="男"} 3.3 1733451580

2.6、删除数据

相关推荐
TDengine (老段)21 小时前
TDengine STMT2 API 使用指南
java·大数据·物联网·时序数据库·iot·tdengine·涛思数据
时序数据说2 天前
为什么时序数据库IoTDB选择Java作为开发语言
java·大数据·开发语言·数据库·物联网·时序数据库·iotdb
TDengine (老段)2 天前
使用 StatsD 向 TDengine 写入
java·大数据·数据库·时序数据库·iot·tdengine·涛思数据
myskybeyond2 天前
时序数据库TDEngine安装和使用
服务器·时序数据库·tdengine
时序数据说2 天前
时序数据库IoTDB用户自定义函数(UDF)使用指南
大数据·数据库·物联网·开源·时序数据库·iotdb
时序数据说3 天前
Java类加载机制及关于时序数据库IoTDB排查
java·大数据·数据库·物联网·时序数据库·iotdb
时序数据说13 天前
时序数据库IoTDB数据导入与查询功能详解
大数据·数据库·开源·时序数据库·iotdb
TDengine (老段)13 天前
TDengine 3.3.5.0 新功能——服务端查询内存管控
大数据·数据库·物联网·时序数据库·iot·tdengine·涛思数据
TDengine (老段)14 天前
使用 Telegraf 向 TDengine 写入数据
大数据·数据库·物联网·时序数据库·iot·tdengine·涛思数据
时序数据说15 天前
时序数据库双存储引擎技术解析
大数据·数据库·物联网·开源·时序数据库·iotdb