如何在OpenShift中访问Cassandra数据库及Pod相关数据查询
1. 是否所有Pod信息都存储在Cassandra中?
并不是。Cassandra在Hawkular的架构里,核心职责是存储时间序列监控指标数据。Pod的元数据(比如名称、标签、运行状态、所属Namespace等)其实是存在OpenShift/Kubernetes的etcd中的。Hawkular会从K8s API拉取这些元数据,用来和收集到的指标做关联,但不会把完整的Pod元数据都存进Cassandra——它只保留和监控相关的、带时间戳的指标值,以及少量用于关联的标签信息。
2. Pod的CPU、内存、网络使用率是否存储在Cassandra中?
必须的!这些都是Hawkular监控的核心指标,会被持续采集并以时间序列的形式持久化到Cassandra里。具体包括:
- CPU使用率(比如
cpu/usage_rate指标) - 内存使用率(比如
memory/usage、memory/working_set指标) - 网络收发速率(比如
network/rx_rate、network/tx_rate指标)
这些数据都会存在Cassandra的hawkular_metricskeyspace中。
3. 如何连接Cassandra并检索Pod的监控数据?
步骤1:定位Cassandra Pod
首先找到集群中Hawkular对应的Cassandra Pod,它通常运行在openshift-infra或者专门的hawkular-metrics项目下,用命令排查:
oc get pods -n openshift-infra | grep cassandra
你会得到类似hawkular-cassandra-1-xyzab这样的Pod名称。
步骤2:端口转发到本地
Cassandra的9042端口默认不会暴露到集群外,所以需要通过端口转发把集群内的端口映射到本地:
oc port-forward hawkular-cassandra-1-xyzab 9042:9042 -n openshift-infra
保持这个终端窗口处于运行状态,不要关闭。
步骤3:用cqlsh连接Cassandra
如果本地没装cqlsh,可以直接在OpenShift的Pod内执行,或者本地安装Cassandra工具包后运行:
cqlsh localhost 9042
连接成功后会进入Cassandra的命令行交互界面。
步骤4:检索目标Pod的监控数据
首先切换到Hawkular的专属keyspace:
USE hawkular_metrics;
先找到目标Pod对应的指标ID
Hawkular里每个指标都有唯一ID,且关联了Pod的标签(比如pod_name、namespace)。你可以先查询metrics表定位目标Pod的CPU使用率指标ID:
SELECT id, tags FROM metrics WHERE metric_type = 'gauge' AND tags ->> 'pod_name' = 'your-target-pod-name';
把your-target-pod-name替换成你要查询的Pod名称,gauge类型对应使用率这类数值型指标。
查询具体的时间序列数据
拿到指标ID后,就能从data表中拉取历史数据了,比如查询过去1小时的CPU使用率:
SELECT timestamp, value FROM data WHERE metric_id = 'your-metric-id' AND timestamp >= toTimestamp(now() - 1h);
你可以根据需求调整时间范围或者查询其他指标的数据。
内容的提问来源于stack exchange,提问作者samar

