微信公众号:运维开发故事,作者:华仔
引言
上次说到我们不用docker,而是使用containerd作为CRI了。没想到,连监控告警这一块也换了。以前我们使用的prometheus进行监控数据的采集、存储和提供查询,alertmanager进行告警推送,同时使用了grafana做数据展示。那么现在呢,我们选择使用OpenTelemetry和VictoriaMetrics。那么这两者究竟是何方神圣呢?请允许我慢慢道来。考虑到我也是刚接触,所以今天先给大家介绍一下VictoriaMetrics。OpenTelemetry后续再做介绍。
注:后续VictoriaMetrics简称为vm
引言
什么是VM
这里我们看官网的描述。如下:
VictoriaMetrics is a fast, cost-effective and scalable monitoring solution
and time series database
翻译过来就是说,vm是一个快速、实用和可扩展的监控方案和时序数据库。思考一下:prometheus也是时序数据库,两者会不会有什么不一样呢?
VM特性
要说vm的特性,可太多了。举几个例子:
-
可以作为prometheus长期存储的一个方案。我们知道prometheus默认只会保留最近15天的数据,如果要保留更长时间的数据,需要把数据写到远端存储中去
-
当使用grafana时,可以把其数据源prometheus可以被替换为vm,因为vm也支持prometheus查询APi
-
它实现了基于PromQL的查询语言,即MetricsQL,并且在PromQL基础上做了改进
-
在处理百万比别数据时,使用内存资源比Thanos、Promtheus更少
-
…
VM组件
那么vm有哪些组件呢,(cluster)架构又是怎么样的呢?主要组件说明:
-
vmstorage负责存储时序数据以及提供查询
-
vmselect从vmstorage获取数据返回给查询数据的客户端,支持PromeQL
-
vminsert通过remote write API将数据存储到vmstorage
其他组件说明:
-
vmui提供了一个UI供查询数据和问题排查
-
vmalert用户告警
-
vmagent用户数据采集
-
vmbackup用于数据备份
-
vmrestore用于数据恢复
-
…
VM安装注意事项
vm可以通过多种方式安装,如二进制、docker镜像以及源码。可根据场景进行选择。如果在k8s中进行安装,我们可以直接使用operator来进行安装。下面重点说一下安装过程中的一些注意事项。
- 一个最小的集群必须包含以下节点:
-
一个vmstorage单节点,另外要指定-retentionPeriod和-storageDataPath两个参数
-
一个vminsert单节点,要指定-storageNode=<vmstorage_host>
-
一个vmselect单节点,要指定-storageNode=<vmstorage_host>
注:高可用情况下,建议每个服务至少有个两个节点
- 在vmselect和vminsert前面需要一个负载均衡,比如vmauth、nginx,同时要求:
-
以/insert开头的请求必须要被路由到vminsert节点的8480端口
-
以/select开头的请求必须要被路由到vmselect节点的8481端口
注:各服务的端口可以通过-httpListenAddr进行指定
-
建议为集群安装监控
-
如果是在一个主机上进行安装测试集群,vminsert、vmselect和vmstorage各自的-httpListenAddr参数必须唯一,vmstorage的-storageDataPath、-vminsertAddr、-vmselectAddr这几个参数必须有唯一的值。
-
当vmstorage通过-storageDataPath目录大小小于通过-storage.minFreeDiskSpaceBytes指定的可用空间时,会切换到只读模式;vminsert停止向这类节点发送数据,转而将数据发送到其他可用vmstorage节点