日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷(xiāo)解決方案
Prometheus長(zhǎng)期遠(yuǎn)程存儲(chǔ)方案VictoriaMetrics入門(mén)實(shí)踐

VictoriaMetrics(簡(jiǎn)稱(chēng)VM) 是一個(gè)支持高可用、經(jīng)濟(jì)高效且可擴(kuò)展的監(jiān)控解決方案和時(shí)間序列數(shù)據(jù)庫(kù),可用于 Prometheus 監(jiān)控?cái)?shù)據(jù)做長(zhǎng)期遠(yuǎn)程存儲(chǔ)。

創(chuàng)新互聯(lián)公司-專(zhuān)業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設(shè)、高性價(jià)比臨川網(wǎng)站開(kāi)發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫(kù),直接使用。一站式臨川網(wǎng)站制作公司更省心,省錢(qián),快速模板網(wǎng)站建設(shè)找我們,業(yè)務(wù)覆蓋臨川地區(qū)。費(fèi)用合理售后完善,十余年實(shí)體公司更值得信賴。

前面章節(jié)我們介紹了 Thanos 方案也可以用來(lái)解決 Prometheus 的高可用和遠(yuǎn)程存儲(chǔ)的問(wèn)題,那么為什么我們還要使用 VictoriaMetrics 呢?相對(duì)于 Thanos,VictoriaMetrics 主要是一個(gè)可水平擴(kuò)容的本地全量持久化存儲(chǔ)方案,VictoriaMetrics 不僅僅是時(shí)序數(shù)據(jù)庫(kù),它的優(yōu)勢(shì)主要體現(xiàn)在以下幾點(diǎn)。

  • 對(duì)外支持 Prometheus 相關(guān)的 API,可以直接用于 Grafana 作為 Prometheus 數(shù)據(jù)源使用。
  • 指標(biāo)數(shù)據(jù)攝取和查詢具備高性能和良好的可擴(kuò)展性,性能比 InfluxDB 和 TimescaleDB 高出 20 倍。
  • 這處理高基數(shù)時(shí)間序列時(shí),內(nèi)存方面也做了優(yōu)化,比 InfluxDB 少 10x 倍,比 Prometheus、Thanos 或 Cortex 少 7 倍。
  • 高性能的數(shù)據(jù)壓縮方式,與 TimescaleDB 相比,可以將多達(dá) 70 倍的數(shù)據(jù)點(diǎn)存入有限的存儲(chǔ)空間,與 Prometheus、Thanos 或 Cortex 相比,所需的存儲(chǔ)空間減少 7 倍。
  • 它針對(duì)具有高延遲 IO 和低 IOPS 的存儲(chǔ)進(jìn)行了優(yōu)化。
  • 提供全局的查詢視圖,多個(gè) Prometheus 實(shí)例或任何其他數(shù)據(jù)源可能會(huì)將數(shù)據(jù)攝取到 VictoriaMetrics。
  • 操作簡(jiǎn)單
  1. VictoriaMetrics 由一個(gè)沒(méi)有外部依賴的小型可執(zhí)行文件組成
  2. 所有的配置都是通過(guò)明確的命令行標(biāo)志和合理的默認(rèn)值完成的
  3. 所有數(shù)據(jù)都存儲(chǔ)在 - storageDataPath 命令行參數(shù)指向的目錄中
  4. 可以使用 vmbackup/vmrestore 工具輕松快速地從實(shí)時(shí)快照備份到 S3 或 GCS 對(duì)象存儲(chǔ)中
  • 支持從第三方時(shí)序數(shù)據(jù)庫(kù)獲取數(shù)據(jù)源
  • 由于存儲(chǔ)架構(gòu),它可以保護(hù)存儲(chǔ)在非正常關(guān)機(jī)(即 OOM、硬件重置或 kill -9)時(shí)免受數(shù)據(jù)損壞
  • 同樣支持指標(biāo)的 relabel 操作

架構(gòu)

VM 分為單節(jié)點(diǎn)和集群兩個(gè)方案,根據(jù)業(yè)務(wù)需求選擇即可。單節(jié)點(diǎn)版直接運(yùn)行一個(gè)二進(jìn)制文件既,官方建議采集數(shù)據(jù)點(diǎn)(data points)低于 100w/s,推薦 VM 單節(jié)點(diǎn)版,簡(jiǎn)單好維護(hù),但不支持告警。集群版支持?jǐn)?shù)據(jù)水平拆分。下圖是 VictoriaMetrics 集群版官方的架構(gòu)圖。

主要包含以下幾個(gè)組件:

  • vmstorage:數(shù)據(jù)存儲(chǔ)以及查詢結(jié)果返回,默認(rèn)端口為 8482。
  • vminsert:數(shù)據(jù)錄入,可實(shí)現(xiàn)類(lèi)似分片、副本功能,默認(rèn)端口 8480。
  • vmselect:數(shù)據(jù)查詢,匯總和數(shù)據(jù)去重,默認(rèn)端口 8481。
  • vmagent:數(shù)據(jù)指標(biāo)抓取,支持多種后端存儲(chǔ),會(huì)占用本地磁盤(pán)緩存,默認(rèn)端口 8429。
  • vmalert:報(bào)警相關(guān)組件,不如果不需要告警功能可以不使用該組件,默認(rèn)端口為 8880。

集群方案把功能拆分為 vmstorage、 vminsert、vmselect 組件,如果要替換 Prometheus,還需要使用 vmagent、vmalert。從上圖也可以看出 vminsert 以及 vmselect 都是無(wú)狀態(tài)的,所以擴(kuò)展很簡(jiǎn)單,只有 vmstorage 是有狀態(tài)的。

vmagent 的主要目的是用來(lái)收集指標(biāo)數(shù)據(jù)然后存儲(chǔ)到 VM 以及 Prometheus 兼容的存儲(chǔ)系統(tǒng)中(支持 remote_write 協(xié)議即可)。

下圖是 vmagent 的一個(gè)簡(jiǎn)單架構(gòu)圖,可以看出該組件也實(shí)現(xiàn)了 metrics 的 push 功能,此外還有很多其他特性:

  • 替換 prometheus 的 scraping target
  • 支持基于 prometheus relabeling 的模式添加、移除、修改 labels,可以方便在數(shù)據(jù)發(fā)送到遠(yuǎn)端存儲(chǔ)之前進(jìn)行數(shù)據(jù)的過(guò)濾
  • 支持多種數(shù)據(jù)協(xié)議,influx line 協(xié)議,graphite 文本協(xié)議,opentsdb 協(xié)議,prometheus remote write 協(xié)議,json lines 協(xié)議,csv 數(shù)據(jù)
  • 支持收集數(shù)據(jù)的同時(shí),并復(fù)制到多種遠(yuǎn)端存儲(chǔ)系統(tǒng)
  • 支持不可靠遠(yuǎn)端存儲(chǔ)(通過(guò)本地存儲(chǔ) -remoteWrite.tmpDataPath ),同時(shí)支持最大磁盤(pán)占用
  • 相比 prometheus 使用較少的內(nèi)存、cpu、磁盤(pán) io 以及網(wǎng)絡(luò)帶寬

接下來(lái)我們就分別來(lái)介紹了 VM 的單節(jié)點(diǎn)和集群兩個(gè)方案的使用。

單節(jié)點(diǎn)

這里我們采集 node-exporter 為例進(jìn)行說(shuō)明,首先使用 Prometheus 采集數(shù)據(jù),然后將 Prometheus 數(shù)據(jù)遠(yuǎn)程寫(xiě)入 VM 遠(yuǎn)程存儲(chǔ),由于 VM 提供了 vmagent 組件,最后我們使用 VM 來(lái)完全替換 Prometheus,可以使架構(gòu)更簡(jiǎn)單、更低的資源占用。

這里我們將所有資源運(yùn)行在 kube-vm 命名空間之下:

  kubectl create ns kube-vm

首先我們這 kube-vm 命名空間下面使用 DaemonSet 控制器運(yùn)行 node-exporter,對(duì)應(yīng)的資源清單文件如下所示:

# vm-node-exporter.yaml
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: node-exporter
namespace: kube-vm
spec:
selector:
matchLabels:
app: node-exporter
template:
metadata:
labels:
app: node-exporter
spec:
hostPID: true
hostIPC: true
hostNetwork: true
nodeSelector:
kubernetes.io/os: linux
containers:
- name: node-exporter
image: prom/node-exporter:v1.3.1
args:
- --web.listen-address=$(HOSTIP):9111
- --path.procfs=/host/proc
- --path.sysfs=/host/sys
- --path.rootfs=/host/root
- --no-collector.hwmon # 禁用不需要的一些采集器
- --no-collector.nfs
- --no-collector.nfsd
- --no-collector.nvme
- --no-collector.dmi
- --no-collector.arp
- --collector.filesystem.ignored-mount-points=^/(dev|proc|sys|var/lib/containerd/.+|/var/lib/docker/.+|var/lib/kubelet/pods/.+)($|/)
- --collector.filesystem.ignored-fs-types=^(autofs|binfmt_misc|cgroup|configfs|debugfs|devpts|devtmpfs|fusectl|hugetlbfs|mqueue|overlay|proc|procfs|pstore|rpc_pipefs|securityfs|sysfs|tracefs)$
ports:
- containerPort: 9111
env:
- name: HOSTIP
valueFrom:
fieldRef:
fieldPath: status.hostIP
resources:
requests:
cpu: 150m
memory: 180Mi
limits:
cpu: 150m
memory: 180Mi
securityContext:
runAsNonRoot: true
runAsUser: 65534
volumeMounts:
- name: proc
mountPath: /host/proc
- name: sys
mountPath: /host/sys
- name: root
mountPath: /host/root
mountPropagation: HostToContainer
readOnly: true
tolerations: # 添加容忍
- operator: "Exists"
volumes:
- name: proc
hostPath:
path: /proc
- name: dev
hostPath:
path: /dev
- name: sys
hostPath:
path: /sys
- name: root
hostPath:
path: /

由于前面章節(jié)中我們也創(chuàng)建了 node-exporter,為了防止端口沖突,這里我們使用參數(shù) --web.listen-address=$(HOSTIP):9111 配置端口為 9111。直接應(yīng)用上面的資源清單即可。

  kubectl apply -f vm-node-exporter.yaml
kubectl get pods -n kube-vm -owide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
node-exporter-c4d76 1/1 Running 0 118s 192.168.0.109 node2
node-exporter-hzt8s 1/1 Running 0 118s 192.168.0.111 master1
node-exporter-zlxwb 1/1 Running 0 118s 192.168.0.110 node1

然后重新部署一套獨(dú)立的 Prometheus,為了簡(jiǎn)單我們直接使用 static_configs 靜態(tài)配置方式來(lái)抓取 node-exporter 的指標(biāo),配置清單如下所示:

# vm-prom-config.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: prometheus-config
namespace: kube-vm
data:
prometheus.yaml: |
global:
scrape_interval: 15s
scrape_timeout: 15s
scrape_configs:
- job_name: "nodes"
static_configs:
- targets: ['192.168.0.109:9111', '192.168.0.110:9111', '192.168.0.111:9111']
relabel_configs: # 通過(guò) relabeling 從 __address__ 中提取 IP 信息,為了后面驗(yàn)證 VM 是否兼容 relabeling
- source_labels: [__address__]
regex: "(.*):(.*)"
replacement: "${1}"
target_label: 'ip'
action: replace

上面配置中通過(guò) relabel 操作從 __address__ 中將 IP 信息提取出來(lái),后面可以用來(lái)驗(yàn)證 VM 是否兼容 relabel 操作。

同樣要給 Prometheus 數(shù)據(jù)做持久化,所以也需要?jiǎng)?chuàng)建一個(gè)對(duì)應(yīng)的 PVC 資源對(duì)象:

# apiVersion: storage.k8s.io/v1
# kind: StorageClass
# metadata:
# name: local-storage
# provisioner: kubernetes.io/no-provisioner
# volumeBindingMode: WaitForFirstConsumer
---
apiVersion: v1
kind: PersistentVolume
metadata:
name: prometheus-data
spec:
accessModes:
- ReadWriteOnce
capacity:
storage: 20Gi
storageClassName: local-storage
local:
path: /data/k8s/prometheus
persistentVolumeReclaimPolicy: Retain
nodeAffinity:
required:
nodeSelectorTerms:
- matchExpressions:
- key: kubernetes.io/hostname
operator: In
values:
- node2
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: prometheus-data
namespace: kube-vm
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 20Gi
storageClassName: local-storage

然后直接創(chuàng)建 Prometheus 即可,將上面的 PVC 和 ConfigMap 掛載到容器中,通過(guò) --config.file 參數(shù)指定配置文件文件路徑,指定 TSDB 數(shù)據(jù)路徑等,資源清單文件如下所示:

# vm-prom-deploy.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: prometheus
namespace: kube-vm
spec:
selector:
matchLabels:
app: prometheus
template:
metadata:
labels:
app: prometheus
spec:
volumes:
- name: data
persistentVolumeClaim:
claimName: prometheus-data
- name: config-volume
configMap:
name: prometheus-config
containers:
- image: prom/prometheus:v2.35.0
name: prometheus
args:
- "--config.file=/etc/prometheus/prometheus.yaml"
- "--storage.tsdb.path=/prometheus" # 指定tsdb數(shù)據(jù)路徑
- "--storage.tsdb.retention.time=2d"
- "--web.enable-lifecycle" # 支持熱更新,直接執(zhí)行l(wèi)ocalhost:9090/-/reload立即生效
ports:
- containerPort: 9090
name: http
securityContext:
runAsUser: 0
volumeMounts:
- mountPath: "/etc/prometheus"
name: config-volume
- mountPath: "/prometheus"
name: data
---
apiVersion: v1
kind: Service
metadata:
name: prometheus
namespace: kube-vm
spec:
selector:
app: prometheus
type: NodePort
ports:
- name: web
port: 9090
targetPort: http

直接應(yīng)用上面的資源清單即可。

  kubectl apply -f vm-prom-config.yaml
kubectl apply -f vm-prom-pvc.yaml
kubectl apply -f vm-prom-deploy.yaml
kubectl get pods -n kube-vm -owide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
node-exporter-c4d76 1/1 Running 0 27m 192.168.0.109 node2
node-exporter-hzt8s 1/1 Running 0 27m 192.168.0.111 master1
node-exporter-zlxwb 1/1 Running 0 27m 192.168.0.110 node1
prometheus-dfc9f6-2w2vf 1/1 Running 0 4m58s 10.244.2.102 node2
kubectl get svc -n kube-vm
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
prometheus NodePort 10.103.38.114 9090:31890/TCP 4m10s

部署完成后可以通過(guò) http://:31890 訪問(wèn) Prometheus,正??梢钥吹讲杉?3 個(gè) node 節(jié)點(diǎn)的指標(biāo)任務(wù)。

同樣的方式重新部署 Grafana,資源清單如下所示:

# vm-grafana.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: grafana
namespace: kube-vm
spec:
selector:
matchLabels:
app: grafana
template:
metadata:
labels:
app: grafana
spec:
volumes:
- name: storage
persistentVolumeClaim:
claimName: grafana-data
containers:
- name: grafana
image: grafana/grafana:main
imagePullPolicy: IfNotPresent
ports:
- containerPort: 3000
name: grafana
securityContext:
runAsUser: 0
env:
- name: GF_SECURITY_ADMIN_USER
value: admin
- name: GF_SECURITY_ADMIN_PASSWORD
value: admin321
volumeMounts:
- mountPath: /var/lib/grafana
name: storage
---
apiVersion: v1
kind: Service
metadata:
name: grafana
namespace: kube-vm
spec:
type: NodePort
ports:
- port: 3000
selector:
app: grafana
---
apiVersion: v1
kind: PersistentVolume
metadata:
name: grafana-data
spec:
accessModes:
- ReadWriteOnce
capacity:
storage: 1Gi
storageClassName: local-storage
local:
path: /data/k8s/grafana
persistentVolumeReclaimPolicy: Retain
nodeAffinity:
required:
nodeSelectorTerms:
- matchExpressions:
- key: kubernetes.io/hostname
operator: In
values:
- node2
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: grafana-data
namespace: kube-vm
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi
storageClassName: local-storage
  kubectl apply -f vm-grafana.yaml
kubectl get svc -n kube-vm |grep grafana
grafana NodePort 10.97.111.153 3000:31800/TCP 62s

同樣通過(guò) http://:31800 就可以訪問(wèn) Grafana 了,進(jìn)入 Grafana 配置 Prometheus 數(shù)據(jù)源。

然后導(dǎo)入 16098 這個(gè) Dashboard,導(dǎo)入后效果如下圖所示。

到這里就完成了使用 Prometheus 收集節(jié)點(diǎn)監(jiān)控指標(biāo),接下來(lái)我們來(lái)使用 VM 來(lái)改造現(xiàn)有方案。

遠(yuǎn)程存儲(chǔ) VictoriaMetrics

首先需要一個(gè)單節(jié)點(diǎn)模式的 VM,運(yùn)行 VM 很簡(jiǎn)單,可以直接下載對(duì)應(yīng)的二進(jìn)制文件啟動(dòng),也可以使用 docker 鏡像一鍵啟動(dòng),我們這里同樣部署到 Kubernetes 集群中。資源清單文件如下所示。

# vm-grafana.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: victoria-metrics
namespace: kube-vm
spec:
selector:
matchLabels:
app: victoria-metrics
template:
metadata:
labels:
app: victoria-metrics
spec:
volumes:
- name: storage
persistentVolumeClaim:
claimName: victoria-metrics-data
containers:
- name: vm
image: victoriametrics/victoria-metrics:v1.76.1
imagePullPolicy: IfNotPresent
args:
- -storageDataPath=/var/lib/victoria-metrics-data
- -retentionPeriod=1w
ports:
- containerPort: 8428
name: http
volumeMounts:
- mountPath: /var/lib/victoria-metrics-data
name: storage
---
apiVersion: v1
kind: Service
metadata:
name: victoria-metrics
namespace: kube-vm
spec:
type: NodePort
ports:
- port: 8428
selector:
app: victoria-metrics
---
apiVersion: v1
kind: PersistentVolume
metadata:
name: victoria-metrics-data
spec:
accessModes:
- ReadWriteOnce
capacity:
storage: 20Gi
storageClassName: local-storage
local:
path: /data/k8s/vm
persistentVolumeReclaimPolicy: Retain
nodeAffinity:
required:
nodeSelectorTerms:
- matchExpressions:
- key: kubernetes.io/hostname
operator: In
values:
- node2
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: victoria-metrics-data
namespace: kube-vm
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 20Gi
storageClassName: local-storage

這里我們使用 -storageDataPath 參數(shù)指定了數(shù)據(jù)存儲(chǔ)目錄,然后同樣將該目錄進(jìn)行了持久化,-retentionPeriod 參數(shù)可以用來(lái)配置數(shù)據(jù)的保持周期。直接應(yīng)用上面的資源清單即可。

  kubectl apply -f vm-single-node-deploy.yaml
kubectl get svc victoria-metrics -n kube-vm
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
victoria-metrics NodePort 10.106.216.248 8428:31953/TCP 75m
kubectl get pods -n kube-vm -l app=victoria-metrics
NAME READY STATUS RESTARTS AGE
victoria-metrics-57d47f4587-htb88 1/1 Running 0 3m12s
kubectl logs -f victoria-metrics-57d47f4587-htb88 -n kube-vm
2022-04-22T08:59:14.431Z info VictoriaMetrics/lib/logger/flag.go:12 build version: victoria-metrics-20220412-134346-tags-v1.76.1-0-gf8de318bf
2022-04-22T08:59:14.431Z info VictoriaMetrics/lib/logger/flag.go:13 command line flags
2022-04-22T08:59:14.431Z info VictoriaMetrics/lib/logger/flag.go:20 flag "retentionPeriod"="1w"
2022-04-22T08:59:14.431Z info VictoriaMetrics/lib/logger/flag.go:20 flag "storageDataPath"="/var/lib/victoria-metrics-data"
2022-04-22T08:59:14.431Z info VictoriaMetrics/app/victoria-metrics/main.go:52 starting VictoriaMetrics at ":8428"...
2022-04-22T08:59:14.432Z http://m.5511xx.com/article/cojjjdg.html