VictoriaMetrics是快速,经济高效且可扩展的时间序列数据库。它可以用作Prometheus的长期远程存储(==不支持远端读,但支持通过grafana读取==),使用go 语言编写。可以可以通过二进制文件一次编译,到处部署
优点:
- 支持Prometheus查询API,因此可以在Grafana中用作Prometheus的替代产品。VictoriaMetrics实现了受PromQL启发的MetricsQL查询语言。
- 插入和查询的高性能和良好的可伸缩性。优于InfluxDB和TimescaleDB 20倍。
- 在处理数百万个唯一的时间序列(又称高基数)时,使用的内存比InfluxDB少10倍。
- 高度的数据压缩,因此与TimescaleDB相比,有限的存储空间中最多可以塞满70倍的数据点。
- 针对高延迟IO和低IOPS(AWS,Google Cloud,Microsoft Azure等中的HDD和网络存储)的存储进行了优化。
- 运维优势:
- VictoriaMetrics由一个没有外部依赖性的小型可执行文件组成。
- 所有配置都是通过带有合理默认值的显式命令行标志完成的
- 所有数据都存储在-storageDataPath标志指向的单个目录中。
- 使用vmbackup / vmrestore从即时快照轻松快速地备份到S3或GCS。
- 支持多种协议的数据抓取
- prometheus exporter
- prometheus 远端写api
- 基于HTTP,TCP和UDP的InfluxDB协议。
- Graphite plaintext protocol
- OpenTSDB put message
- HTTP OpenTSDB /api/put requests
- /api/v1/import.
- 任意CSV数据。
- 开源的集群版本
部署集群版本:
整体结构图:
可以看到在整体的结构中。vmselect 和vminsert 均为无状态服务。storage 是存储服务。 可以部署在虚拟机中
部署方式:
使用helm 一键部署
镜像准备:
- 下载vmcluser 三个组件的二进制包
[root@k8s-master01 ~]# wget "https://github-production-release-asset-2e65be.s3.amazonaws.com/150954997/1e708100-7750-11ea-9da2-4460f46fa7be?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAIWNJYAX4CSVEH53A%2F20200408%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20200408T063357Z&X-Amz-Expires=300&X-Amz-Signature=839c0ab1a40df2e7eb512cd599c9edf03b7b241399d8eb8e7661d714b99ce158&X-Amz-SignedHeaders=host&actor_id=21969438&response-content-disposition=attachment%3B%20filename%3Dvictoria-metrics-v1.34.7-cluster.tar.gz&response-content-type=application%2Foctet-stream -o victoria-metrics-v1.34.7-cluster.tar.gz"
[root@k8s-master01 ~]# tar zxvf victoria-metrics-v1.34.7-cluster.tar.gz
- 构建images
vmselect 和vminsert 相同。修改二进制文件即可
FROM alpine:3
RUN echo "http://mirrors.aliyun.com/alpine/v3.8/main" > /etc/apk/repositories \
&& apk update \
&& apk add --no-cache tzdata \
&& apk add --no-cache curl \
&& cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \
&& echo "Asia/Shanghai" > /etc/timezone \
&& apk del tzdata \
&& rm -rf /var/cache/apk/* \
&& rm -rf /root/.cache \
&& rm -rf /tmp/*
WORKDIR /
COPY vmselect /bin/
ENTRYPOINT ["/bin/vmselect"]
- 推送到harbor私服
docker build . -t vmselect
docker tag vmselect registry.rong360.com/base/vmselect:v1.34.7
docker push registry.rong360.com/base/vmselect:v1.34.7
部署步骤:
- master节点安装git,helm
- 下载vm-cluster相关charts
[root@k8s-master01 ~]# git clone https://github.com/VictoriaMetrics/helm-charts.git
- 修改相关配置
- 修改helm-charts/charts/victoria-metrics-cluster/values.yaml 中 vmstorage.enable 为false
- 修改vmselect,vminsert 中image.repository 和image.tag 为harbor 私服的地址和tag
- 安装vm-cluster到集群中,修改select 和 insert 的svc 类型为headless
[root@k8s-master01 victoria-metrics-cluster]# helm install prod -n monitoring .
- 修改prometheus 实例中远程写配置(prometheus-prometheus.yaml)
remoteWrite:
- url: http://vm-cluster-vminsert.monitoring.svc:8480/insert/0/prometheus/
-
在虚拟机中部署storage 节点,二进制文件, 使用supervisor管理即可
-
修改grafana 中读取配置
因为线上grafana 位于集群外部。 需要使用nginx 接入代理vmselect 和insert。参考例子
server {
listen 80;
server_name vm.rong360.com;
location ^~/select/ {
proxy_pass http://vm-select;
}
location ^~/insert/ {
proxy_pass http://vm-insert;
}
location ^~/snapshot/ {
proxy_pass http://vm-storage;
}
}
grafana 的配置实例“http://vm.rong360.com/insert/0/prometheus/”
网友评论