基于VictoriaMetrics的大规模监控实战
victoriametrics原生支持水平扩展,并且大部分兼容Prometheus语法,官方文档地址:https://docs.victoriametrics.com/
这个是victoriametrics官方的集群架构
我公司用到的集群架构
目前用到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
,可以接入监控