集群监控部署

当你使用 GreptimeDB Operator 部署 GreptimeDB 集群后,默认其对应组件(如 Metasrv / Datanode / Frontend)的 HTTP 端口(默认为 4000)将会暴露 /metrics 端点用于暴露 Prometheus 指标。

我们将提供两种方式来监控 GreptimeDB 集群:

  1. 启用 GreptimeDB 自监控:GreptimeDB Operator 将额外启动一个 GreptimeDB Standalone 实例和 Vector Sidecar 容器,分别用于收集和存储 GreptimeDB 集群的指标和日志数据;
  2. 使用 Prometheus Operator 配置 Prometheus 指标监控:用户需先部署 Prometheus Operator,并创建相应的 Prometheus 实例,然后通过 Prometheus Operator 的 PodMonitor 来将 GreptimeDB 集群的 Metrics 数据写入到相应的 Prometheus 中;

用户可根据自身需求选择合适的监控方式。

启用 GreptimeDB 自监控

自监控模式下 GreptimeDB Operator 将会额外启动一个 GreptimeDB Standalone 实例,用于收集 GreptimeDB 集群的指标和日志数据,其中日志数据将包括集群日志和慢查询日志。为了收集日志数据,GreptimeDB Operator 会在每一个 Pod 中启动一个 Vector 的 Sidecar 容器,用于收集 Pod 的日志数据。启用该模式后,集群将自动开启 JSON 格式的日志输出。

如果你使用 Helm Chart 部署 GreptimeDB 集群(可参考立即开始),可对 Helm Chart 的 values.yaml 文件进行如下配置:

1. monitoring:
2. enabled: true

此时 Helm Chart 将会部署一个名为 ${cluster}-monitoring 的 GreptimeDB Standalone 实例,用于收集 GreptimeDB 集群的指标和日志数据,你可以用如下命令进行查看:

1. kubectl get greptimedbstandalones.greptime.io ${cluster}-monitoring -n ${namespace}

默认该 GreptimeDB Standalone 实例会将监控数据使用 Kubernetes 当前默认的 StorageClass 将数据保存于本地存储,你可以根据实际情况进行调整。

GreptimeDB Standalone 实例的配置可以通过 Helm Chart 的 values.yaml 中的 monitoring.standalone 字段进行调整,如下例子所示:

1. monitoring:
2. enabled: true
3. standalone:
4. base:
5. main:
6. # 用于配置 GreptimeDB Standalone 实例的镜像
7. image: "greptime-registry.cn-hangzhou.cr.aliyuncs.com/greptime/greptimedb:latest"

9. # 用于配置 GreptimeDB Standalone 实例的资源配置
10. resources:
11. requests:
12. cpu: "2"
13. memory: "4Gi"
14. limits:
15. cpu: "2"
16. memory: "4Gi"

18. # 用于配置 GreptimeDB Standalone 实例的对象存储
19. objectStorage:
20. s3:
21. # 用于配置 GreptimeDB Standalone 实例的对象存储的 bucket
22. bucket: "monitoring"
23. # 用于配置 GreptimeDB Standalone 实例的对象存储的 region
24. region: "ap-southeast-1"
25. # 用于配置 GreptimeDB Standalone 实例的对象存储的 secretName
26. secretName: "s3-credentials"
27. # 用于配置 GreptimeDB Standalone 实例的对象存储的 root
28. root: "standalone-with-s3-data"

GreptimeDB Standalone 实例将会使用 ${cluster}-monitoring-standalone 作为 Kubernetes Service 的名称来暴露相应的服务,你可以使用如下地址来用于监控数据的读取:

  • Prometheus 协议的指标监控:http://${cluster}-monitor-standalone.${namespace}.svc.cluster.local:4000/v1/prometheus。
  • SQL 协议的日志监控:${cluster}-monitor-standalone.${namespace}.svc.cluster.local:4002。默认集群日志会存储于 public._gt_logs 表,而将慢查询日志存储于 public._gt_slow_queries 表。

GreptimeDB 自监控模式将使用 Vector Sidecar 来收集日志数据,你可以通过 monitoring.vector 字段来配置 Vector 的配置,如下所示:

1. monitoring:
2. enabled: true
3. vector:
4. # 用于配置 Vector 的镜像仓库
5. registry: greptime-registry.cn-hangzhou.cr.aliyuncs.com
6. # 用于配置 Vector 的镜像仓库
7. repository: timberio/vector
8. # 用于配置 Vector 的镜像标签
9. tag: nightly-alpine

11. # 用于配置 Vector 的资源配置
12. resources:
13. requests:
14. cpu: "50m"
15. memory: "64Mi"
16. limits:
17. cpu: "50m"
18. memory: "64Mi"

集群监控部署 - 图1备注

如果你没有使用 Helm Chart 进行部署,你也可以通过如下 GreptimeDBCluster 的 YAML 来手动配置自监控模式,如下所示:

1. apiVersion: greptime.io/v1alpha1
2. kind: GreptimeDBCluster
3. metadata:
4. name: basic
5. spec:
6. base:
7. main:
8. image: greptime/greptimedb:latest
9. frontend:
10. replicas: 1
11. meta:
12. replicas: 1
13. etcdEndpoints:
14. - "etcd.etcd-cluster.svc.cluster.local:2379"
15. datanode:
16. replicas: 1
17. monitoring:
18. enabled: true

其中 monitoring 字段用于配置自监控模式,具体可参考 GreptimeDBCluster API 文档。

使用 Prometheus Operator 配置 Prometheus 指标监控

用户需先部署 Prometheus Operator 并创建相应的 Prometheus 实例,例如可以使用 kube-prometheus-stack 来部署相应的 Prometheus 技术栈,具体过程可参考其对应的官方文档。

当部署完 Prometheus Operator 和 Prometheus 实例后,用户可通过 Helm Chart 的 values.yaml 的 prometheusMonitor 字段来配置 Prometheus 监控,如下所示:

1. prometheusMonitor:
2. # 用于配置是否启用 Prometheus 监控,此时 GreptimeDB Operator 将会自动创建 Prometheus Operator 的 `PodMonitor` 资源
3. enabled: true
4. # 用于配置 Prometheus 监控的抓取间隔
5. interval: "30s"
6. # 用于配置 Prometheus 监控的标签
7. labels:
8. release: prometheus

集群监控部署 - 图2备注

labels 字段需要与相应用于创建 Prometheus 实例的 matchLabels 字段保持一致,否则将无法正常抓取到 GreptimeDB 集群的 Metrics 数据。

当我们配置完 prometheusMonitor 字段后,GreptimeDB Operator 将会自动创建 Prometheus Operator 的 PodMonitor 资源,并将 GreptimeDB 集群的 Metrics 数据导入到 Prometheus 中,比如我们可以用如下命令来查看创建的 PodMonitor 资源:

1. kubectl get podmonitors.monitoring.coreos.com -n ${namespace}

集群监控部署 - 图3备注

如果你没有使用 Helm Chart 进行部署,你也可以通过如下 GreptimeDBCluster 的 YAML 来手动配置 Prometheus 监控,如下所示:

1. apiVersion: greptime.io/v1alpha1
2. kind: GreptimeDBCluster
3. metadata:
4. name: basic
5. spec:
6. base:
7. main:
8. image: greptime/greptimedb:latest
9. frontend:
10. replicas: 1
11. meta:
12. replicas: 1
13. etcdEndpoints:
14. - "etcd.etcd-cluster.svc.cluster.local:2379"
15. datanode:
16. replicas: 1
17. prometheusMonitor:
18. enabled: true
19. interval: "30s"
20. labels:
21. release: prometheus

其中 prometheusMonitor 字段用于配置 Prometheus 监控。

导入 Grafana Dashboard

目前 GreptimeDB 集群可使用如下 3 个 Grafana Dashboard 来配置监控面板:

集群监控部署 - 图4备注

其中 集群日志 Dashboard 和 慢查询日志 Dashboard 仅适用于自监控模式,而 集群指标 Dashboard 则适用于自监控模式和 Prometheus 监控模式。

如果你使用 Helm Chart 部署 GreptimeDB 集群,你可以通过启用 grafana.enabled 来一键部署 Grafana 实例,并导入相应的 Dashboard(可参考立即开始),如下所示:

1. grafana:
2. enabled: true

如果你是已经部署了 Grafana 实例,你可以参考如下步骤来导入相应的 Dashboard:

  1. 添加相应的 Data Sources

你可以参考 Grafana 官方文档的 datasources 来添加如下 3 个数据源:

  • metrics 数据源

    用于导入集群的 Prometheus 监控数据,适用于自监控模式和 Prometheus 监控模式。如上文所述,当使用自监控模式时,此时可使使用 http://${cluster}-monitor-standalone.${namespace}.svc.cluster.local:4000/v1/prometheus 作为数据源的 URL。如果使用 Prometheus 监控模式,用户可根据具体 Prometheus 实例的 URL 来配置数据源。 - information-schema 数据源

    这部分数据源用于使用 SQL 协议导入集群内部的元数据信息,适用于自监控模式和 Prometheus 监控模式。此时我们可以用 ${cluster}-frontend.${namespace}.svc.cluster.local:4002 作为 SQL 协议的地址,并使用 information_schema 作为数据库名称进行连接。 - logs 数据源

    这部分数据源用于使用 SQL 协议导入集群的日志和慢查询日志,仅适用于自监控模式。此时我们可以用 ${cluster}-monitor-standalone.${namespace}.svc.cluster.local:4002 作为 SQL 协议的地址,并使用 public 作为数据库名称进行连接。 2. 导入相应的 Dashboard

你可以参考 Grafana 官方文档的 Import dashboards 来导入相应的 Dashboard。