从零开始的Linux运维屌丝之路,资源免费分享平台   运维人员首选:简单、易用、高效、安全、稳定、社区活跃的开源软件
  • 首页
  • 监控
  • 基于VictoriaMetrics的大规模监控实战

基于VictoriaMetrics的大规模监控实战

发布:蔺要红06-20分类: 监控

基于VictoriaMetrics的大规模监控实战

victoriametrics原生支持水平扩展,并且大部分兼容Prometheus语法,官方文档地址:https://docs.victoriametrics.com/

这个是victoriametrics官方的集群架构

/images/20220617162704.png

我公司用到的集群架构

/images/202206182239511.png

目前用到3台机器

IP 说明
10.200.4.74 负载均衡、vmselect、vminsert、vmstorage、vmalert
10.200.4.75 vmselect、vminsert、vmstorage、vmalert
10.200.4.76 vmselect、vminsert、vmstorage、vmalert

启动配置文件


vmstorage

首先需要把存储部署上,多个存储之间数据是不同步的,也就是说所有的storege组件之间是感知不到彼此的。通过vmselect和vminsert采用一致性hash算法来确定读取/写入哪台节点。

vmstorage启动命令

./vmstorage-prod -httpListenAddr "0.0.0.0:8482" \   # vmstorage监听端口
    -storageDataPath ./data \                       # 数据存储位置
    -retentionPeriod 60d \                          # 数据保留多久
    -vminsertAddr "0.0.0.0:8400" \                  # insert服务连接的端口
    -vmselectAddr "0.0.0.0:8401" \                  # select服务连接的端口
    -loggerTimezone "Asia/Shanghai" \
    -loggerLevel INFO

vminsert

./vminsert-prod -httpListenAddr "0.0.0.0:8480" \
    -storageNode 10.200.4.74:8400,10.200.4.75:8400,10.200.4.76:8400 \       # 指定所有storege节点
    -replicationFactor 2 \                                                  # 副本数2
    -loggerTimezone"Asia/Shanghai" \
    -loggerLevel INFO

vmselect

vmselect启动命令

./vmselect-prod -httpListenAddr "0.0.0.0:8481" \
    -selectNode 10.200.4.74:8481,10.200.4.75:8481,10.200.4.76:8481 \    # select的所有节点
    -storageNode 10.200.4.74:8401,10.200.4.75:8401,10.200.4.76:8401 \   # 指定所有storage节点
    -dedup.minScrapeInterval=1ms \                                      # 重复数据删除,当同一条metrics时间小于这个值
    -loggerTimezone "Asia/Shanghai" \
    -loggerLevel INFO

vmalert

./vmalert-prod -rule=./rules/* \                            # 告警规则目录
    -datasource.url=http://10.200.4.74:8427 \               # vmselect的url,一般都是负载均衡地址
    -datasource.basicAuth.username admin \                  # vmselect的url认证用户名
    -datasource.basicAuth.password com.012 \                # vmselect的url认证密码
    -notifier.url=http://10.200.4.63:9093 \                 # alertmanager地址
    -remoteWrite.url=http://10.200.4.74:8427 \              # vminsert的url,一般都是负载均衡地址
    -remoteWrite.basicAuth.username admin \                 # vminsert的url认证用户名
    -remoteWrite.basicAuth.password com.012 \               # vminsert的url认证密码
    -evaluationInterval=15s \
    -httpListenAddr=0.0.0.0:8080

负载均衡配置

vmauth负载均衡配置

./vmauth-prod -auth.config=./vmauth.yml

其中vmauth.yml的配置

users:
- username: "admin"
  password: "com.012"
  url_map:
  - src_paths:
    - "/api/v1/query"
    - "/api/v1/query_range"
    - "/api/v1/label/[^/]+/values"
    url_prefix:
    - "http://10.200.4.74:8481/select/0/prometheus"
    - "http://10.200.4.75:8481/select/0/prometheus"
    - "http://10.200.4.76:8481/select/0/prometheus"
  - src_paths: ["/api/v1/write"]
    url_prefix:
    - "http://10.200.4.74:8480/insert/0/prometheus"
    - "http://10.200.4.75:8480/insert/0/prometheus"
    - "http://10.200.4.76:8480/insert/0/prometheus"
#    headers:
#    - "X-Scope-OrgID: abc"

nginx负载均衡配置

如果你不想用vmauth,nginx功能可以完全覆盖vmauth

nginx配置示例:

upstream  vmselect {
    server  10.200.4.74:8481 weight=5 ;
    server  10.200.4.75:8481 weight=5 ;
    server  10.200.4.76:8481 weight=5 ;
}

server {
    listen 8000;
    server_name _;
    auth_basic "authentication";                # 开启基本认证
    auth_basic_user_file conf.d/.htpasswd;      # 密码文件
    location / {
        proxy_pass http://vmselect/select/0/prometheus/;
    }
}

upstream vminsert {
    server  10.200.4.74:8480 weight=5 ;
    server  10.200.4.75:8480 weight=5 ;
    server  10.200.4.76:8480 weight=5 ;
}

server {
    listen 8001;
    server_name _;
    auth_basic "authentication";                # 开启基本认证
    auth_basic_user_file conf.d/.htpasswd;      # 密码文件
    location / {
        proxy_pass http://vminsert/insert/0/prometheus/;
    }
}

.htpasswd文件格式:

admin:$1$QYnl4A1Q$I8Q712.eKtG9m7sAb9oeM1

admin是用户名, :后面的是密码, 密码可以使用openssl passwd -1 com.012 来生成(假设原始密码是com.012)

常用的配置

Prometheus通过remote_write写入vm集群

remote_write:
- url: "http://10.200.4.74:8001/api/v1/write"                           # 通过负载均衡地址
# - url: "http://10.200.4.74:8480/insert/0/prometheus/api/v1/write"     # 直接连接vminsert组件
  basic_auth:
    username: admin
    password: com.012
  remote_timeout: 30s
  tls_config:
    insecure_skip_verify: true
  queue_config:
    capacity: 500
    max_shards: 1000
    min_shards: 1
    max_samples_per_send: 100
    batch_send_deadline: 5s
    min_backoff: 30ms
    max_backoff: 100ms

Grafana直接查询VM集群

Grafana配置地址:

说明 地址
负载均衡地址 http://10.200.4.74:8000
vmselect地址 http://10.200.4.74:8481/select/0/prometheus

其他API地址

目录:http://10.200.4.74:8481/select/0/

vmui:http://10.200.4.74:8481/select/0/vmui/

每个组件都有/metrics,可以接入监控

温馨提示如有转载或引用以上内容之必要,敬请将本文链接作为出处标注,如有侵权我会在24小时之内删除!

欢迎使用手机扫描访问本站