找回密码
 立即注册
首页 业界区 业界 VictoriaMetrics 尝鲜

VictoriaMetrics 尝鲜

嗅叽 1 小时前
前言

前段时间逛别人的博客看到有对 VictoriaMetrics 的推荐,看了下其特性,感觉还挺有意思,遂自己搭建一个玩玩。
目前我使用过的监控方案有:

  • Zabbix。很多年前简单上手过,当时版本貌似还是 4,印象中性能比较差,接盘一周后就换成了 Prometheus。
  • Prometheus。作为 CNCF 的毕业项目,社区非常成熟,其本身性能也不错,除非有成千上万个节点,否则单点 Prometheus 就够用了。问题是 Prometheus 官方只支持单点,扩展起来不方便。以前个人做过的一个方案就是在 kubernetes 里再部署一个 ceph 来保证数据高可用。还有个问题是不少环境有很严格的防火墙规则,即便内网也只开放必要端口,这样就需要使用 push-gateway。
  • Telegraf + Kafka + InfluxDB。Telegraf 采集数据 push 到 kafka,然后再有个服务去消费 kafka 消息并写到 influxdb。这种架构只解决了上面说的网络问题。我们当时用的是开源版的 InfluxDB,不支持集群部署,而单点 InfluxDB 的性能有点捉急,经常被查崩。
  • Telegraf + Mimir。Telegraf 直接 push 到 Mimir。因为 Mimir 由另一个团队维护,我也不太清楚 mimir 在生产环境的资源消耗情况。我自己在虚拟机上搭建一个 mimir,没什么数据,但感觉还是复杂了点。对于 Grafana 家的东西,除了 Grafana 这个产品,我对 Loki 和 mimir 都没什么好印象。
基于 Prometheus 的架构一般是 pull 模式,需要被监控目标提供一个接口来暴露自身 metrics,市面上的成熟产品大多都有相应的 exporter。而 Telegraf 的架构一般就是 push 模式,不需要对外暴露接口,而且 telegraf 本身就支持很多 input 和 output 的 plugin,常见需求基本都能满足。两种模式各有各的好处,可以根据实际需求来决定。
作为尝鲜,本文将采用 Telegraf + VictoriaMetrics (cluster) + Grafana 的架构,暂时不考虑告警功能。其中 VictoriaMetrics 采用集群部署,也就是分别部署读节点、写节点、存储节点和 auth 节点。(只是分开部署,实际还是 docker-compose 在本地部署)
Versions:

  • Telegraf: 1.35
  • VictoriaMetrics: v1.132.0, cluster 版
  • Grafana: 12.2.0
  • Docker: 29.1.3
  • Docker-compose: v5.0.0
配置 docker-compose

下面的 docker-compose 文件中编排了 6 个服务:

  • vmstorage: 存储节点
  • vminsert: 写节点
  • vmselect: 读节点
  • vmauth: 提供用户认证和读写分离的负载均衡功能
  • telegraf: 数据采集器
  • grafana: 数据可视化
创建好 docker-compose.yaml 文件后,别急着启动,先执行下一步创建一些配置文件。
  1. services:
  2.   vmstorage-1:
  3.     image: victoriametrics/vmstorage:v1.132.0-cluster
  4.     container_name: vmstorage-1
  5.     networks:
  6.       - monitoring
  7.     volumes:
  8.       - ./monitoring/victoriametrics/vmstorage/ins1/storage:/storage
  9.       - /etc/localtime:/etc/localtime:ro
  10.     command:
  11.       - "--storageDataPath=/storage"
  12.   vminsert-1:
  13.     image: victoriametrics/vminsert:v1.132.0-cluster
  14.     container_name: vminsert-1
  15.     networks:
  16.       - monitoring
  17.     depends_on:
  18.       - "vmstorage-1"
  19.     volumes:
  20.       - /etc/localtime:/etc/localtime:ro
  21.     command:
  22.       - "--storageNode=vmstorage-1:8400"
  23.   vmselect-1:
  24.     image: victoriametrics/vmselect:v1.132.0-cluster
  25.     container_name: vmselect-1
  26.     networks:
  27.       - monitoring
  28.     depends_on:
  29.       - "vmstorage-1"
  30.     command:
  31.       - "--storageNode=vmstorage-1:8401"
  32.     #   - "--vmalert.proxyURL=http://vmalert:8880"
  33.     restart: always
  34.   vmauth:
  35.     image: victoriametrics/vmauth:v1.132.0
  36.     container_name: vmauth
  37.     networks:
  38.       - monitoring
  39.     ports:
  40.       - 8427:8427
  41.     depends_on:
  42.       - "vmselect-1"
  43.     volumes:
  44.       - ./monitoring/victoriametrics/vmauth/config.yml:/etc/vmauth/config.yml:ro
  45.       - /etc/localtime:/etc/localtime:ro
  46.     command:
  47.       - '--auth.config=/etc/vmauth/config.yml'
  48.   telegraf:
  49.     image: telegraf:1.35
  50.     container_name: telegraf
  51.     hostname: "debian-41"  # 注意替换, 否则 telegraf 采集的是容器里面的 hostname
  52.     volumes:
  53.       - ./monitoring/telegraf/telegraf.conf:/etc/telegraf/telegraf.conf:ro
  54.       - /:/hostfs:ro
  55.       - /var/run/docker.sock:/var/run/docker.sock
  56.       - /etc/localtime:/etc/localtime:ro
  57.     environment:
  58.       - HOST_PROC=/hostfs/proc
  59.       - HOST_ETC=/hostfs/etc
  60.       - HOST_SYS=/hostfs/sys
  61.       - HOST_VAR=/hostfs/var
  62.       - HOST_RUN=/hostfs/run
  63.       - HOST_MOUNT_PREFIX=/hostfs
  64.       - 'VM_URL=http://vmauth:8427'
  65.       - 'VM_USERNAME=telegraf_username'
  66.       - 'VM_PASSWORD=telegraf_password'
  67.       - 'VM_DATABASE=victoriametrics'
  68.     networks:
  69.       - monitoring
  70.     depends_on:
  71.       - vmauth
  72.   grafana:
  73.     image: grafana/grafana:12.2.0
  74.     container_name: grafana
  75.     user: "1000"  # id -u
  76.     ports:
  77.       - "3000:3000"
  78.     networks:
  79.       - monitoring
  80.     volumes:
  81.       - ./monitoring/grafana/data:/var/lib/grafana
  82.       - /etc/localtime:/etc/localtime:ro
  83.     depends_on:
  84.       - vmauth
  85. networks:
  86.   monitoring:
  87.     name: monitoring
复制代码
创建配置文件


  • 先创建一些数据目录和文件
  1. # vmstorage 的数据目录
  2. mkdir -p ./monitoring/victoriametrics/vmstorage/ins1/storage
  3. # vmauth 的目录和配置文件
  4. mkdir -p ./monitoring/victoriametrics/vmauth
  5. touch ./monitoring/victoriametrics/vmauth/config.yml
  6. # telegraf 的目录和配置文件
  7. mkdir -p ./monitoring/telegraf
  8. touch ./monitoring/telegraf/telegraf.conf
  9. # grafana 的数据目录
  10. mkdir -p ./monitoring/grafana/data
  11. ## 修改权限,否则 Grafana 启动会报错提示权限不足
  12. chmod -R 777 ./monitoring/grafana/data
复制代码

  • 编辑 vmauth 的配置文件 ./monitoring/victoriametrics/vmauth/config.yml。分别配置给 grafana 和 telegraf 的账户及其读写分离的路由规则。
  1. users:
  2.   - username: "grafana_username"
  3.     password: "grafana_password"
  4.     url_map:
  5.       - src_paths:
  6.           - "/api/v1/query"
  7.           - "/api/v1/query_range"
  8.           - "/api/v1/label/[^/]+/values"
  9.           - "/api/v1/series"
  10.         url_prefix: "http://vmselect-1:8481/select/0/prometheus/"
  11.   - username: "telegraf_username"
  12.     password: "telegraf_password"
  13.     url_map:
  14.       - src_paths:
  15.         - "/insert/0/prometheus/api/v1/write"
  16.         url_prefix: "http://vminsert-1:8480/"
复制代码

  • 编辑 telegraf 的配置文件 ./monitoring/telegraf/telegraf.conf。完整配置可使用命令来导出 docker run --rm telegraf:1.35 telegraf config > /monitoring/telegraf/telegraf.conf.sample
  1. [global_tags]
  2.   machinetype = "vmware"
  3. [agent]
  4.   interval = "10s"
  5.   round_interval = true
  6.   metric_batch_size = 1000
  7.   metric_buffer_limit = 10000
  8.   collection_jitter = "0s"
  9.   flush_interval = "10s"
  10.   flush_jitter = "0s"
  11.   precision = "0s"
  12.   quiet = true
  13.   logformat = "structured"
  14. [[outputs.http]]
  15.   url = "http://vmauth:8427/insert/0/prometheus/api/v1/write"
  16.   method = "POST"
  17.   data_format = "prometheusremotewrite"
  18.   username = "telegraf_username"
  19.   password = "telegraf_password"
  20.   [outputs.http.headers]
  21.     Content-Encoding = "snappy"
  22. [[inputs.cpu]]
  23.   percpu = true
  24.   totalcpu = true
  25.   collect_cpu_time = false
  26.   report_active = false
  27.   core_tags = false
  28. [[inputs.disk]]
  29.   ignore_fs = ["tmpfs", "devtmpfs", "devfs", "iso9660", "overlay", "aufs", "squashfs"]
  30. [[inputs.diskio]]
  31. [[inputs.kernel]]
  32. [[inputs.mem]]
  33. [[inputs.processes]]
  34. [[inputs.swap]]
  35. [[inputs.system]]
  36. [[inputs.interrupts]]
  37. [[inputs.kernel_vmstat]]
  38. [[inputs.linux_sysctl_fs]]
  39. [[inputs.net]]
  40. [[inputs.netstat]]
复制代码
启动
  1. docker-compose up -d
复制代码
没什么问题的话,使用 docker-compose ps 可以看到这 6 个服务都启动了,如果有的没启动,可以用 docker logs  --tail 50 来查看日志。
服务启动后,浏览器访问 grafana,配置 victoriametrics 的 datasource。这个 datasource 需要单独安装 plugin,如果在线下载失败,可以手动下载压缩包,解压到 ./monitoring/grafana/data/plugins 目录下。添加 datasource 时,url 填写为 http://vmauth:8427/,然后填写用户名和密码。
补充


  • victoriametrics 官方文档乍一看还挺专业的,但有问题的时候才发现大部分是废话,跟 mimir 有的一拼。
  • docker 运行的 telegraf 不支持很多 plugin,最好还是在 server 上直接运行 telegraf。

来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

相关推荐

您需要登录后才可以回帖 登录 | 立即注册