将 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的支持政策,禁止修改Prometheus和Alertmanager服务的设置。请您理解,此次配置更改可能导致Microsoft/Red Hat无法提供适当的支持。

前提

    • 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 }}'

在浏览器中,使用管理员和密码登录。

1.png
2.png

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

3.png

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

bannerAds