将 ARO(Azure Red Hat OpenShift)集群监控的指标传输到持久存储中
首先
在OpenShift中,默认情况下可以使用集群监控堆栈进行安装。在Azure的托管OpenShift中,即Azure Red Hat OpenShift(ARO),情况也是如此,在ARO安装时,会部署用于集群监控的Prometheus(/Alertmanager)/Grafana。
在负责获取和存储集群内各种指标的Prometheus中,自助管理的OpenShift(OpenShift Container Platform)允许配置指标数据存储的持久化设置。
一方,ARO制定了该设置由操作员控制,即使投入设置也不会反映出来。
对于获取ARO的度量和日志记录,基本上建议使用适用于Azure Arc支持的Kubernetes的Container Insights。然而,有时可能存在仅出于数据持久化目的而使用Container Insight的情况,但这可能不是很划算的。
这次,我们会总结使用Victoria Metrics将ARO集群监控的指标数据存储到持久性存储中的方法。关于Prometheus和Victoria Metrics的配合,请务必阅读这个幻灯片,非常有参考价值。
前提
-
- AROクラスター:v4.10.20
- Cluster-admin権限を持つユーザー
步骤
首先创建项目。
oc new-project victoria-metrics
我們將在這個專案中部署 VictoriaMetrics Operator 和 Grafana Operator。
---
apiVersion: operators.coreos.com/v1
kind: OperatorGroup
metadata:
name: victoria-metrics-og
namespace: victoria-metrics
spec:
targetNamespaces:
- victoria-metrics
---
apiVersion: operators.coreos.com/v1alpha1
kind: Subscription
metadata:
name: grafana-operator
namespace: victoria-metrics
spec:
channel: v4
installPlanApproval: Automatic
name: grafana-operator
source: community-operators
sourceNamespace: openshift-marketplace
startingCSV: grafana-operator.v4.6.0
apiVersion: operators.coreos.com/v1alpha1
kind: Subscription
metadata:
name: victoriametrics-operator
namespace: openshift-operators
spec:
channel: beta
installPlanApproval: Automatic
name: victoriametrics-operator
source: community-operators
sourceNamespace: openshift-marketplace
startingCSV: victoriametrics-operator.v0.26.2
oc apply -f grafana-operator.yaml -f victoria-metrics-operator.yaml
如果运营商成功安装了操作员,我们就可以使用CRD实际部署VictoriaMetrics/Grafana。
首先是Victoria Metrics的CRD。这是用于部署Victoria Metrics集群的yaml文件。
请各自调整retentionPeriod、所需规格和磁盘容量等资源。
我认为直接设置资源配置可能会很困难,建议您先使用临时值进行设置,然后在开发环境中进行调整。
顺便说一下,retentionPeriod: 4表示保留数据4个月。还可以设置为1y(1年)或2w(2周)。更详细的信息,请参考这里。
kind: VMCluster
apiVersion: operator.victoriametrics.com/v1beta1
metadata:
name: example-vmcluster-persistent
namespace: victoria-metrics
spec:
replicationFactor: 2
retentionPeriod: '4'
vminsert:
replicaCount: 2
resources:
limits:
cpu: '1'
memory: 1000Mi
requests:
cpu: '0.5'
memory: 500Mi
vmselect:
cacheMountPath: /select-cache
replicaCount: 2
resources:
limits:
cpu: '1'
memory: 1000Mi
requests:
cpu: '0.5'
memory: 500Mi
storage:
volumeClaimTemplate:
spec:
resources:
requests:
storage: 2Gi
vmstorage:
replicaCount: 2
resources:
limits:
cpu: '1'
memory: 1500Mi
storage:
volumeClaimTemplate:
spec:
resources:
requests:
storage: 10Gi
storageDataPath: /vm-data
oc apply -f victoria-metrics-cluster.yaml
接下来部署Grafana。
虽然本来Grafana也需要调整,但这次我们只需要通过仪表盘进行浏览即可,因此将进行简单的配置,如下所示。
为了标识要稍后部署的Grafana仪表盘资源,我们会先设置dashboardLabelSelector。
apiVersion: integreatly.org/v1alpha1
kind: Grafana
metadata:
name: custom-grafana
namespace: victoria-metrics
spec:
config: {}
dashboardLabelSelector:
- matchExpressions:
- key: app
operator: In
values:
- grafana
oc apply -f grafana.yaml
通过这一步,Grafana和Victoria Metrics的组件已经部署完成。可以确认已经成功创建了持久化卷。
oc get pod,pvc,pv -n victoria-metrics
NAME READY STATUS RESTARTS AGE
pod/grafana-deployment-745fcc845f-dmhks 1/1 Running 0 27m
pod/grafana-operator-controller-manager-55b64cc88f-zgfxp 2/2 Running 0 36m
pod/vminsert-example-vmcluster-persistent-7c4cb4f764-brh94 1/1 Running 0 4h13m
pod/vminsert-example-vmcluster-persistent-7c4cb4f764-pzvff 1/1 Running 0 4h13m
pod/vmselect-example-vmcluster-persistent-0 1/1 Running 0 4h13m
pod/vmselect-example-vmcluster-persistent-1 1/1 Running 0 4h13m
pod/vmstorage-example-vmcluster-persistent-0 1/1 Running 0 4h13m
pod/vmstorage-example-vmcluster-persistent-1 1/1 Running 0 4h13m
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
persistentvolumeclaim/vmselect-cachedir-vmselect-example-vmcluster-persistent-0 Bound pvc-2ed20254-752b-4332-8bea-3fdff1ed73f8 2Gi RWO managed-premium 4h13m
persistentvolumeclaim/vmselect-cachedir-vmselect-example-vmcluster-persistent-1 Bound pvc-f7a2ac3b-7c79-4cbe-a65d-d53c8399efd3 2Gi RWO managed-premium 4h13m
persistentvolumeclaim/vmstorage-db-vmstorage-example-vmcluster-persistent-0 Bound pvc-272af200-54d4-49ff-afde-6ca2aec458e5 10Gi RWO managed-premium 4h13m
persistentvolumeclaim/vmstorage-db-vmstorage-example-vmcluster-persistent-1 Bound pvc-18a80105-dd5d-4968-8588-0f4a3ed1bf1d 10Gi RWO managed-premium 4h13m
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
persistentvolume/pvc-18a80105-dd5d-4968-8588-0f4a3ed1bf1d 10Gi RWO Delete Bound victoria-metrics/vmstorage-db-vmstorage-example-vmcluster-persistent-1 managed-premium 4h13m
persistentvolume/pvc-272af200-54d4-49ff-afde-6ca2aec458e5 10Gi RWO Delete Bound victoria-metrics/vmstorage-db-vmstorage-example-vmcluster-persistent-0 managed-premium 4h13m
persistentvolume/pvc-2ed20254-752b-4332-8bea-3fdff1ed73f8 2Gi RWO Delete Bound victoria-metrics/vmselect-cachedir-vmselect-example-vmcluster-persistent-0 managed-premium 4h13m
persistentvolume/pvc-f7a2ac3b-7c79-4cbe-a65d-d53c8399efd3 2Gi RWO Delete Bound victoria-metrics/vmselect-cachedir-vmselect-example-vmcluster-persistent-1 managed-premium 4h9m
首先,我们将对每个组件进行协同设置。
首先,我们将使用Prometheus中的Remote Write功能将数据传输到Victoria Metrics,用于集群监控。
ARO的Prometheus是由Prometheus Operator进行管理的,而作为其更高级的Operator,还存在Cluster Monitoring Operator。
设置到Prometheus的配置基本上是通过设置传递给该Operator来实现的。
Cluster Monitoring Operator和其他组件存在于openshift-monitoring项目中。
oc get pods -n openshift-monitoring
NAME READY STATUS RESTARTS AGE
alertmanager-main-0 6/6 Running 0 22h
alertmanager-main-1 6/6 Running 0 22h
cluster-monitoring-operator-5bbfd998c6-9lt58 2/2 Running 0 12h
grafana-5487f6d9cf-72xwk 3/3 Running 0 22h
kube-state-metrics-6d685b8687-6w9jb 3/3 Running 0 20h
node-exporter-9kvwc 2/2 Running 2 22h
node-exporter-dbsnk 2/2 Running 0 22h
node-exporter-fcdtp 2/2 Running 2 22h
node-exporter-fxrnt 2/2 Running 0 22h
node-exporter-gdwfr 2/2 Running 2 22h
node-exporter-qngtz 2/2 Running 0 22h
openshift-state-metrics-65f58d4c67-85l4k 3/3 Running 0 22h
prometheus-adapter-98b79f97-bqdc5 1/1 Running 0 3h33m
prometheus-adapter-98b79f97-g9wd6 1/1 Running 0 3h33m
prometheus-k8s-0 6/6 Running 0 12h
prometheus-k8s-1 6/6 Running 0 12h
prometheus-operator-76f79c8d85-s4qsg 2/2 Running 0 20h
thanos-querier-996bbbbfc-k67zk 6/6 Running 0 22h
thanos-querier-996bbbbfc-rn48x 6/6 Running 0 22h
集群监控运算符的配置由cluster-monitoring-configConfigMap进行管理。
oc get cm -n openshift-monitoring cluster-monitoring-config -o yaml
apiVersion: v1
data:
config.yaml: |
alertmanagerMain: {}
prometheusK8s: {}
kind: ConfigMap
metadata:
name: cluster-monitoring-config
namespace: openshift-monitoring
通过查看数据,我们可以知道没有特别的设置。我们将在这里对Remote Write进行设置。
创建一个类似以下的yaml文件:
在url字段中设置vminsert服务的URL。同时,在subpath字段中指定/insert/0/prometheus/api/v1/write路径。(请参考此处)
apiVersion: v1
data:
config.yaml: |
alertmanagerMain: {}
prometheusK8s:
remoteWrite:
- url: "http://vminsert-example-vmcluster-persistent.victoria-metrics.svc.cluster.local:8480/insert/0/prometheus/api/v1/write"
kind: ConfigMap
metadata:
name: cluster-monitoring-config
namespace: openshift-monitoring
oc apply -f cluster-monitoring-config.yaml
为了使设置生效,将重新启动 Prometheus。
oc rollout restart statefulsets/prometheus-k8s -n openshift-monitoring
通过这样的设置,Prometheus和Victoria Metrics现在可以协同工作了。接下来,我们需要在Grafana中进行DataSource的配置,以便从Victoria Metrics中存储的度量信息可以在Grafana上查看。
创建以下的YAML文件。
从Grafana访问vmselect的Service的URL,指定为/select/0/prometheus的子路径。
apiVersion: integreatly.org/v1alpha1
kind: GrafanaDataSource
metadata:
name: victoria-metrics-datasource
namespace: victoria-metrics
spec:
datasources:
- name: VictoriaMetrics
type: prometheus
url: >-
http://vmselect-example-vmcluster-persistent.victoria-metrics.svc.cluster.local:8481/select/0/prometheus/
access: Server
name: VictoriaMetrics
oc apply -f victoria-metrics-datasource.yaml
由于Grafana的配置会自动应用,因此无需重新启动Pod。
最终我们将部署Grafana Dashboard。这次我们将创建与集群监控默认仪表盘相同的仪表盘,因此需要获取ConfigMap的信息。
首先,将位于openshift-monitoring项目中的仪表板的ConfigMap部署到victoria-metrics项目中。
使用patch命令将Namespace替换为目标yaml,并应用此yaml。
oc patch cm grafana-dashboard-k8s-resources-namespace -n openshift-monitoring -p '{"metadata":{ "namespace":"victoria-metrics"}}' --dry-run=client -o yaml | oc apply -f -
然后创建一个引用此ConfigMap的Grafana仪表板。
apiVersion: integreatly.org/v1alpha1
kind: GrafanaDashboard
metadata:
name: grafana-dashboard-k8s-resources-namespace
namespace: victoria-metrics
labels:
app: grafana
spec:
configMapRef:
key: k8s-resources-namespace.json
name: grafana-dashboard-k8s-resources-namespace
oc apply -f grafana-dashboard-1.yaml
您可以通过重复上述过程来设置其他仪表板。
让我们尝试访问Grafana。
使用以下命令创建Route。
oc expose svc grafana-service -n victoria-metrics
我会获取Grafana管理员的密码先备用。
oc get secret grafana-admin-credentials -n victoria-metrics --template={{.data.GF_SECURITY_ADMIN_PASSWORD}} | base64 -d
获取URL并在浏览器中访问。
oc get route grafana-service -n victoria-metrics --template='{{ .spec.host }}'
在浏览器中,使用管理员和密码登录。


如果将namespace更改为victoria-metrics等,可以确认Pod的指标信息。

从以上可以看出,已经搭建好了一个环境,可以将数据存储在Victoria Metrics的持久化存储上,并且可以在Grafana上查看。
如果是短期数据,可以查看现有的监控环境;而如果是长期数据,则可以通过这个仪表盘来查看,建议根据需要进行使用。