五、prometheus遠端存儲之VictoriaMetrics


一、prometheus本地存儲

prometheus有着非常高效的時間序列數據存儲方法,每個采樣數據僅僅占用3.5byte的空間

 默認情況下,prometheus將采集到的數據存儲在本地的TSDB數據庫中,路徑默認為prometheus安裝目錄的data目錄下,數據寫入過程先把數據寫入wal日志並存放在內存,然后2小時后將內存的數據保存至一個新的block塊,同時再把新采集的數據寫入內存並在2小時后保存至一個新的block塊,以此類推

 1.1、block簡介

每個block為一個data目錄中以01開頭的存儲目錄,如下:

 

 1.2、block的特性

block塊會壓縮、合並歷史數據塊,以及刪除過期的數據塊,隨着壓縮、合並,block塊數量會減少,在壓縮過程中會發生三件事:定時執行壓縮、合並小的block到大的block、清理過期的塊

每個塊有4部分組成:

 1.3、本地存儲配置參數

--config.file="prometheus.yml"          # 指定配置文件
--web.listen-address="0.0.0.0:9090"          # 指定監聽地址
--storage.tsdb.path="data/"             # 指定數據存儲目錄
--storage.tsdb.retention.size=B,KB,MB,GB,TB,PB,EB      # 指定chunk大小,默認512M
--storage.tsdb.retention.time=       # 數據保存時長,默認15天

--query.timeout=2m                      # 最大查詢超時時間
--query.max-connections=512          # 最大查詢並發數

--web.read-timeout=5m                  # 最大空閑超時時間
--web.max-connections=512            # 最大並發連接數
--web.enable-lifecycle                # 啟用api動態加載功能

  

 二、prometheus遠端存儲VictoriaMetrics

GITHUB地址:https://github.com/VictoriaMetrics/VictoriaMetrics

官網地址:https://docs.victoriametrics.com/Single-server-VictoriaMetrics.html

2.1、組件介紹

vminsert:寫入組件,vminsert負責接收數據寫入並根據對度量名稱及其所有標簽的一致hash結果將數據分散寫入不同的后端vmstorage節點之間,vminsert默認端口8480

vmstorage:存儲原始數據並返回給定時間范圍內給定標簽過濾器的查詢數據,默認端口8482

vmselect:查詢組件,連接vmstorage,默認端口8481

其他可選組件:

vmagent:是一個很小但功能很強大的代理,它可以從node_exporter各種來源收集度量數據,並將它們存儲在VictoriaMetrics或任何其他支持遠程寫協議的與prometheus兼容的存儲系統中,有點prometheus server的意向

vmalert:替換prometheus server,以VictoriaMetrics為數據源,基於兼容prometheus的告警規則,判斷數據是否異常,並將產生的通知發送給alertmanager

vmgateway:讀寫VictoriaMetrics數據的代理網關,可實現限速和訪問控制等功能,目前為企業版組件

vmctl:VictoriaMetrics的命令行工具,目前主要用於將prometheus、opentsdb等數據源的數據遷移到VictoriaMetrics

2.2、部署VictoriaMetrics集群

分別在各個victoriametrics服務器進行安裝配置

tar xf victoria-metrics-amd64-v1.71.0-cluster.tar.gz
vminsert-prod
vmstorage-prod
vmselect-prod
mv vminsert-prod vmstorage-prod vmselect-prod /usr/local/bin

環境簡介

192.168.88.200 prometheus
192.168.88.201 victoriametrics-server1  # 啟動vminsert、vmstorage、vmselect三個組件
192.168.88.202 victoriametrics-server2  # 啟動vminsert、vmstorage、vmselect三個組件
192.168.88.203 victoriametrics-server3  # 啟動vminsert、vmstorage、vmselect三個組件
192.168.88.204 node1
192.168.88.205 node2

2.2.1、部署vmstorage-prod組件

# service文件
root@prometheus-victoriametrics1:~# vim /etc/systemd/system/vmstorage.service
[Unit]
Description=Vmstorage Server
After=network.target

[Service]
Restart=on-failure
WorkingDirectory=/tmp
ExecStart=/usr/local/bin/vmstorage-prod -loggerTimezone Asia/Shanghai -storageDataPath /data/vmstorage-data -httpListenAddr :8482 -vminsertAddr :8400 -vmselectAddr :8401

[Install]
WantedBy=multi-user.target

# 啟動
root@prometheus-victoriametrics1:~# systemctl daemon-reload
root@prometheus-victoriametrics1:~# systemctl restart vmstorage.service

root@prometheus-victoriametrics1:~# netstat -tnlp | grep -E "8482|8400|8401"
tcp        0      0 0.0.0.0:8400            0.0.0.0:*               LISTEN      1529/vmstorage-prod 
tcp        0      0 0.0.0.0:8401            0.0.0.0:*               LISTEN      1529/vmstorage-prod 
tcp        0      0 0.0.0.0:8482            0.0.0.0:*               LISTEN      1529/vmstorage-prod

2.2.2、部署vminsert-prod組件

root@prometheus-victoriametrics1:~# vim /etc/systemd/system/vminsert.service
[Unit]
Description=Vmsinsert Server
After=network.target

[Service]
Restart=on-failure
WorkingDirectory=/tmp
ExecStart=/usr/local/bin/vminsert-prod -httpListenAddr :8480 -storageNode=192.168.88.201:8400,192.168.88.202:8400,192.168.88.203:8400

[Install]
WantedBy=multi-user.target


# 啟動
root@prometheus-victoriametrics1:~# systemctl daemon-reload
root@prometheus-victoriametrics1:~# systemctl start vminsert.service

root@prometheus-victoriametrics1:~# netstat -tnlp | grep 8480
tcp        0      0 0.0.0.0:8480            0.0.0.0:*               LISTEN      1609/vminsert-prod  
root@prometheus-victoriametrics1:~#

2.2.3、部署vmselect-prod組件

root@prometheus-victoriametrics1:~# vim /etc/systemd/system/vmselect.service
[Unit]
Description=Vmselect Server
After=network.target

[Service]
Restart=on-failure
WorkingDirectory=/tmp
ExecStart=/usr/local/bin/vmselect-prod -httpListenAddr :8481 -storageNode=192.168.88.201:8401,192.168.88.202:8401,192.168.88.203:8401

[Install]
WantedBy=multi-user.target

# 啟動
root@prometheus-victoriametrics2:~# systemctl daemon-reload
root@prometheus-victoriametrics2:~# systemctl start vmselect.service 

root@prometheus-victoriametrics2:~# netstat -tnlp|grep sele
tcp        0      0 0.0.0.0:8481            0.0.0.0:*               LISTEN      1337/vmselect-prod  
root@prometheus-victoriametrics2:~#

 2.2.4、驗證服務端口

curl http://192.168.88.201:8480/metrics
curl http://192.168.88.201:8481/metrics
curl http://192.168.88.201:8482/metrics

curl http://192.168.88.202:8480/metrics
curl http://192.168.88.202:8481/metrics
curl http://192.168.88.202:8482/metrics

curl http://192.168.88.203:8480/metrics
curl http://192.168.88.203:8481/metrics
curl http://192.168.88.203:8482/metrics

2.2.5、配置prometheus接入vmstorage-prod存儲

root@prometheus:/usr/local/prometheus# vim prometheus.yml
.............
remote_write:
  - url: http://192.168.88.201:8480/insert/0/prometheus
  - url: http://192.168.88.202:8480/insert/0/prometheus
  - url: http://192.168.88.203:8480/insert/0/prometheus

scrape_configs:
  - job_name: "prometheus"

    # metrics_path defaults to '/metrics'
    # scheme defaults to 'http'.

    static_configs:
      - targets: ["localhost:9090"]

  - job_name: "nodes"
    static_configs:
      - targets: ["192.168.88.204:9100","192.168.88.205:9100"]


root@prometheus:/usr/local/prometheus# systemctl restart prometheus.service

2.2.6、配置grafana數據源

 URL處填寫其中一個vmselect服務的地址 例如:http://192.168.88.201:8481/select/0/prometheus

注意:生產環境中這個應該填寫的是負載均衡器的地址

導入模板,數據源選擇prometheus-VictoriaMetrics

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM