跳到主要内容
版本:Nightly

自监控 GreptimeDB 集群

在阅读本文档前,请确保你已经了解如何在 Kubernetes 上部署 GreptimeDB 集群。 本文将介绍在部署 GreptimeDB 集群时如何配置监控。

快速开始

你可以在使用 Helm Chart 部署 GreptimeDB 集群时,通过对 values.yaml 文件进行配置来启用监控和 Grafana。下面是一个完整的 values.yaml 示例,用于部署一个最小化的带有监控和 Grafana 的 GreptimeDB 集群:

image:
registry: docker.io
# 镜像仓库:
# OSS GreptimeDB 使用 `greptime/greptimedb`,
# Enterprise GreptimeDB 请咨询工作人员
repository: <repository>
# 镜像标签:
# OSS GreptimeDB 使用数据库版本,例如 `v0.17.1`
# Enterprise GreptimeDB 请咨询工作人员
tag: <tag>
pullSecrets: [ regcred ]

initializer:
registry: docker.io
repository: greptime/greptimedb-initializer

monitoring:
# 启用监控
enabled: true

grafana:
# 用于监控面板
# 需要先启用监控 `monitoring.enabled: true` 选项
enabled: true

frontend:
replicas: 1

meta:
replicas: 1
backendStorage:
etcd:
endpoints: "etcd.etcd-cluster.svc.cluster.local:2379"

datanode:
replicas: 1
备注

如果你在中国大陆遇到网络访问问题,可直接使用阿里云 OCI 镜像仓库:

image:
registry: greptime-registry.cn-hangzhou.cr.aliyuncs.com
# 镜像仓库:
# OSS GreptimeDB 使用 `greptime/greptimedb`,
# Enterprise GreptimeDB 请咨询工作人员
repository: <repository>
# 镜像标签:
# OSS GreptimeDB 使用数据库版本,例如 `v0.17.1`
# Enterprise GreptimeDB 请咨询工作人员
tag: <tag>
pullSecrets: [ regcred ]

initializer:
registry: greptime-registry.cn-hangzhou.cr.aliyuncs.com
repository: greptime/greptimedb-initializer

monitoring:
# 启用监控
enabled: true
vector:
# 监控需要使用 Vector
registry: greptime-registry.cn-hangzhou.cr.aliyuncs.com

grafana:
# 用于监控面板
# 需要先启用监控 `monitoring.enabled: true` 选项
enabled: true
image:
registry: greptime-registry.cn-hangzhou.cr.aliyuncs.com

frontend:
replicas: 1

meta:
replicas: 1
backendStorage:
etcd:
endpoints: "etcd.etcd-cluster.svc.cluster.local:2379"

datanode:
replicas: 1

当启用监控后,GreptimeDB Operator 会额外启动一个 GreptimeDB Standalone 实例用于收集 GreptimeDB 集群的指标和日志数据。 为了收集日志数据,GreptimeDB Operator 会在每一个 Pod 中启动一个 Vector 的 Sidecar 容器。

当启用 Grafana 后,会部署一个 Grafana 实例,并将用于集群监控的 GreptimeDB Standalone 实例作为其数据源。 这样就可以开箱即用地通过 Prometheus 和 MySQL 协议来可视化 GreptimeDB 集群的监控数据。

接下来使用上述配置的 values.yaml 文件来部署 GreptimeDB 集群:

helm upgrade --install mycluster \
greptime/greptimedb-cluster \
--values /path/to/values.yaml \
-n default

部署完成后,你可以用如下命令来查看 GreptimeDB 集群的 Pod 状态:

kubectl -n default get pods
Expected Output
NAME                                 READY   STATUS    RESTARTS   AGE
mycluster-datanode-0 2/2 Running 0 77s
mycluster-frontend-6ffdd549b-9s7gx 2/2 Running 0 66s
mycluster-grafana-675b64786-ktqps 1/1 Running 0 6m35s
mycluster-meta-58bc88b597-ppzvj 2/2 Running 0 86s
mycluster-monitor-standalone-0 1/1 Running 0 6m35s

你可以转发 Grafana 的端口到本地来访问 Grafana 仪表盘:

kubectl -n default port-forward svc/mycluster-grafana 18080:80

请参考访问 Grafana 仪表盘章节来查看相应的数据面板。

配置监控数据的收集

本节将介绍监控配置的细节。

启用监控

在使用 Helm Chart 部署 GreptimeDB 集群时,在 values.yaml 中添加以下配置来启用监控:

monitoring:
enabled: true

这将部署一个名为 ${cluster-name}-monitoring 的 GreptimeDB Standalone 实例来收集指标和日志。你可以使用以下命令验证部署:

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

GreptimeDB Standalone 实例使用 ${cluster-name}-monitoring-standalone 作为 Kubernetes Service 名称来暴露服务。你可以使用以下地址访问监控数据:

  • Prometheus 指标http://${cluster-name}-monitor-standalone.${namespace}.svc.cluster.local:4000/v1/prometheus
  • SQL 日志${cluster-name}-monitor-standalone.${namespace}.svc.cluster.local:4002。默认情况下,集群日志存储在 public._gt_logs 表中。

自定义监控数据存储

默认情况下,GreptimeDB Standalone 实例使用 Kubernetes 默认的 StorageClass 将监控数据存储在本地存储中。 你可以通过 values.yaml 中的 monitoring.standalone 字段来配置 GreptimeDB Standalone 实例。例如,以下配置使用 S3 对象存储来存储监控数据:

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

# 用于配置 GreptimeDB Standalone 实例的资源配置
resources:
requests:
cpu: "2"
memory: "4Gi"
limits:
cpu: "2"
memory: "4Gi"

# 用于配置 GreptimeDB Standalone 实例的对象存储
objectStorage:
s3:
# 用于配置 GreptimeDB Standalone 实例的对象存储的 bucket
bucket: "monitoring"
# 用于配置 GreptimeDB Standalone 实例的对象存储的 region
region: "ap-southeast-1"
# 用于配置 GreptimeDB Standalone 实例的对象存储的 secretName
secretName: "s3-credentials"
# 用于配置 GreptimeDB Standalone 实例的对象存储的 root
root: "standalone-with-s3-data"

自定义 Vector Sidecar

用于日志收集的 Vector Sidecar 配置可以通过 monitoring.vector 字段进行自定义。 例如,你可以按如下方式调整 Vector 的镜像和资源:

monitoring:
enabled: true
vector:
# 用于配置 Vector 的镜像仓库
registry: greptime-registry.cn-hangzhou.cr.aliyuncs.com
# 用于配置 Vector 的镜像仓库
repository: timberio/vector
# 用于配置 Vector 的镜像标签
tag: nightly-alpine

# 用于配置 Vector 的资源配置
resources:
requests:
cpu: "50m"
memory: "64Mi"
limits:
cpu: "50m"
memory: "64Mi"

使用 kubectl 部署的 YAML 配置

如果你没有使用 Helm Chart 部署 GreptimeDB 集群, 可以在 GreptimeDBCluster 的 YAML 中使用 monitoring 字段来手动配置自监控模式:

monitoring:
enabled: true

详细的配置选项请参考 GreptimeDBCluster API 文档

Grafana 配置

启用 Grafana

values.yaml 中添加以下配置启用 Grafana 部署, 注意该功能必须先启用监控(monitoring.enabled: true)配置

grafana:
enabled: true

自定义 Grafana 数据源

默认情况下,Grafana 使用 myclusterdefault 作为集群名称和命名空间来创建数据源。 要监控其他名称或命名空间的集群,请根据实际的集群名称和命名空间自定义配置。 以下是 values.yaml 配置示例:

monitoring:
enabled: true

grafana:
enabled: true
datasources:
datasources.yaml:
datasources:
- name: greptimedb-metrics
type: prometheus
url: http://${cluster-name}-monitor-standalone.${namespace}.svc.cluster.local:4000/v1/prometheus
access: proxy
isDefault: true

- name: greptimedb-logs
type: mysql
url: ${cluster-name}-monitor-standalone.${namespace}.svc.cluster.local:4002
access: proxy
database: public

此配置会在 Grafana 中为 GreptimeDB 集群的监控创建以下数据源:

  • greptimedb-metrics:用于存储监控数据的单机数据库中的集群指标,通过 Prometheus 协议提供服务(type: prometheus
  • greptimedb-logs:用于存储监控数据的单机数据库中的集群日志,通过 MySQL 协议提供服务(type: mysql),默认使用 public 数据库。

访问 Grafana 仪表盘

你可以通过将 Grafana 服务端口转发到本地来访问 Grafana 仪表盘:

kubectl -n ${namespace} port-forward svc/${cluster-name}-grafana 18080:80 

然后打开 http://localhost:18080 来访问 Grafana 仪表盘。 默认登录凭据为:

  • 用户名admin
  • 密码gt-operator

接着进入到 Dashboards 部分来查看用于监控 GreptimeDB 集群而预配置的仪表盘。

Grafana Dashboard

清理 PVC

危险

清理操作将移除 GreptimeDB 集群的元数据和数据,请确保在操作前已备份数据。

请参考清理 GreptimeDB 集群文档 查看如何卸载 GreptimeDB 集群,

要清理 GreptimeDB 用于监控的单机数据库的 PVC,请使用以下命令:

kubectl -n default delete pvc -l app.greptime.io/component=${cluster-name}-monitor-standalone