技术分享-揭秘高效监控:K3s + Rancher Monitoring 轻松搞定 ThingsBoard 服务性能追踪
本文手把手教你如何在 K3s 集群中使用 Rancher Monitoring 来监控外部 ThingsBoard 服务的关键指标,帮助你及时发现问题,确保物联网平台稳定运行。
概述
ThingsBoard 是一款强大的开源物联网平台,擅长数据收集、处理、可视化和设备管理。在生产环境中,实时监控其运行状态是保障系统可靠性的关键。本文将一步步指导你利用 Rancher Monitoring(基于 Prometheus + Grafana)来监控 ThingsBoard 的核心性能指标,让你的监控体系更智能、更高效。
前置条件
- 一个已就绪的 K3s 集群
- 已安装 Rancher Monitoring(包括 Prometheus 和 Grafana)
- ThingsBoard 服务已部署并可正常访问
- 你拥有
kubectl的访问权限
环境信息
为了便于说明,我们假设 ThingsBoard 服务的基本信息如下: - IP 地址:192.168.198.8 - 端口:8080 - 指标端点:/actuator/prometheus
(请根据你的实际环境替换这些参数,确保配置准确。)
步骤一:验证 ThingsBoard 指标端点
配置 Thingsboard 支持 Metrics 端点
有两种方式可以配置:
- 使用 ENV 环境变量
# 启用指标收集
METRICS_ENABLED=true
# 指定暴露指标的类型为 Prometheus
METRICS_ENDPOINTS_EXPOSE=prometheus
- 或使用 yaml 配置,至少保持这两个地方是跟下面一样
metrics:
# Enable/disable actuator metrics.
enabled: "${METRICS_ENABLED:true}"
management:
endpoints:
web:
exposure:
# Expose metrics endpoint (use value 'prometheus' to enable prometheus metrics).
include: '${METRICS_ENDPOINTS_EXPOSE:prometheus}'
验证 Metrics 配置正确
在开始集成前,先确认 ThingsBoard 是否正确暴露了 Prometheus 兼容的指标数据。这一步能避免后续配置问题。
# 直接通过 curl 访问指标端点进行验证
curl http://192.168.198.8:8080/actuator/prometheus
# 预期输出示例(部分内容):
# # HELP jvm_memory_used_bytes The current used memory of the JVM in bytes
# # TYPE jvm_memory_used_bytes gauge
# jvm_memory_used_bytes{area="heap",} 2.47492664E8
# ...
如果输出类似 Prometheus 格式的指标数据,说明端点正常工作。否则,请检查 ThingsBoard 的配置(确保 Spring Boot Actuator 已启用并配置了 Prometheus 端点)。
步骤二:部署 ThingsBoard 服务(可选)
如果你的 ThingsBoard 尚未部署在 Kubernetes 集群内,可以参考以下 YAML 配置在 K3s 中部署 ThingsBoard(假设使用 Docker 镜像)。如果 ThingsBoard 已运行在外部(如独立服务器),可跳过此步骤,直接进入步骤三。
以下是 ThingsBoard 的示例部署 YAML 文件:
apiVersion: apps/v1
kind: Deployment
metadata:
name: thingsboard
namespace: cattle-monitoring-system
labels:
app: thingsboard
spec:
replicas: 1
selector:
matchLabels:
app: thingsboard
template:
metadata:
labels:
app: thingsboard
spec:
containers:
- name: thingsboard
image: thingsboard/tb-postgres:3.4.4
ports:
- containerPort: 8080
name: http
env:
- name: TB_SERVER_PORT
value: "8080"
- name: SPRING_DATASOURCE_URL
value: "jdbc:postgresql://postgres:5432/thingsboard"
- name: SPRING_DATASOURCE_USERNAME
value: "postgres"
- name: SPRING_DATASOURCE_PASSWORD
value: "postgres"
resources:
requests:
memory: "512Mi"
cpu: "500m"
limits:
memory: "2Gi"
cpu: "1000m"
---
apiVersion: v1
kind: Service
metadata:
name: thingsboard
namespace: cattle-monitoring-system
labels:
app: thingsboard
spec:
selector:
app: thingsboard
ports:
- port: 8080
targetPort: 8080
name: http
type: ClusterIP
说明: - 此配置假设使用 PostgreSQL 数据库,需提前部署数据库服务(如 postgres)。 - 根据你的实际需求调整镜像版本、环境变量和资源限制。 - 如果 ThingsBoard 运行在外部服务器,可忽略此部署,直接使用外部 IP。
应用配置:
kubectl apply -f thingsboard-deployment.yaml
步骤三:创建 Kubernetes Service 和 Endpoints
对于运行在外部的 ThingsBoard 服务(本例中为 192.168.198.8:8080),我们需要通过 Kubernetes 的 Service 和 Endpoints 资源将其“引入”集群服务发现系统,以便 Prometheus 抓取指标。
创建文件 thingsboard-monitoring.yaml:
apiVersion: v1
kind: Endpoints
metadata:
name: thingsboard-metrics
namespace: cattle-monitoring-system
labels:
app: thingsboard-metrics
subsets:
- addresses:
- ip: 192.168.198.8
ports:
- port: 8080
name: http-metrics
---
apiVersion: v1
kind: Service
metadata:
name: thingsboard-metrics
namespace: cattle-monitoring-system
labels:
app: thingsboard-metrics
spec:
ports:
- name: http-metrics
port: 8080
targetPort: 8080
protocol: TCP
type: ClusterIP
应用配置:
kubectl apply -f thingsboard-monitoring.yaml
说明:如果 ThingsBoard 部署在集群内(如步骤二),可直接使用其 Service 名称(例如 thingsboard),无需创建 Endpoints。
步骤四:配置 ServiceMonitor 资源
ServiceMonitor 是 Prometheus Operator 的自定义资源定义(CRD),用于告诉 Prometheus 如何发现并抓取指标。
创建文件 thingsboard-servicemonitor.yaml:
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
name: thingsboard-metrics
namespace: cattle-monitoring-system
labels:
app: thingsboard-metrics
spec:
selector:
matchLabels:
app: thingsboard-metrics
endpoints:
- port: http-metrics
path: /actuator/prometheus
interval: 30s
scrapeTimeout: 10s
scheme: http
honorLabels: true
metricRelabelings:
- sourceLabels: [__name__]
regex: 'jvm_.+'
action: keep
- sourceLabels: [__name__]
regex: 'process_.+'
action: keep
- sourceLabels: [__name__]
regex: 'http_.+'
action: keep
应用配置:
kubectl apply -f thingsboard-servicemonitor.yaml
说明:metricRelabelings 过滤出 JVM、进程和 HTTP 相关的指标,减少数据冗余。你可根据需要调整 regex 规则。
步骤五:验证监控配置
配置完成后,验证所有组件是否正常工作。
检查资源状态
# 查看 Service 和 Endpoints
kubectl -n cattle-monitoring-system get svc,ep -l app=thingsboard-metrics
# 查看 ServiceMonitor
kubectl -n cattle-monitoring-system get servicemonitor thingsboard-metrics
验证 Prometheus 目标状态
# 端口转发到 Prometheus 服务
kubectl -n cattle-monitoring-system port-forward svc/rancher-monitoring-prometheus 9090:9090
浏览器访问 http://localhost:9090/targets,找到 thingsboard-metrics,确认状态为 UP。
测试指标查询
在 Prometheus 的 Graph 界面,尝试查询以下指标: - jvm_memory_used_bytes - process_cpu_usage - http_server_requests_seconds_count
如果数据正常显示,说明指标采集成功。
步骤六:构建 Grafana 仪表板
有了指标数据,我们用 Grafana 将其可视化为直观的仪表板,提升监控体验。
访问 Grafana
# 端口转发到 Grafana 服务
kubectl -n cattle-monitoring-system port-forward svc/rancher-monitoring-grafana 3000:3000
浏览器访问 http://localhost:3000,使用默认凭据登录(用户名:admin,密码:prom-operator)。
创建 ThingsBoard 监控仪表板(自定义,适合 Grafana 高手)
- JVM 内存使用情况
- 添加 Graph 面板
- 查询:
jvm_memory_used_bytes{area="heap"} - 标题:"JVM Heap Memory Usage"
-
设置:单位为字节,添加警报阈值(如 80% 堆内存触发警告)。
-
CPU 使用率
- 添加 Graph 面板
- 查询:
process_cpu_usage - 标题:"Process CPU Usage"
-
设置:显示为百分比,观察峰值趋势。
-
HTTP 请求统计
- 添加 Graph 面板
- 查询:
rate(http_server_requests_seconds_count[5m]) - 标题:"HTTP Request Rate"
-
设置:按状态码分组,突出显示 4xx/5xx 错误。
-
系统负载
- 添加 Stat 面板
- 查询:
system_load_average_1m - 标题:"System Load Average"
- 设置:绿色(<1),黄色(1-5),红色(>5)。
提示:保存仪表板并导出为 JSON,方便备份或分享。
可以在这里找到你所希望的 Dashboard:https://grafana.com/grafana/dashboards/?search=spring+boot
使用 Thingsboard 官方 Grafana Monitoring
在官方 GitHub 仓库,可以找到:
https://github.com/thingsboard/thingsboard/tree/master/docker/monitoring/grafana/provisioning/dashboards
导入 Grafana 即可。
数据库使用状况
规则引擎使用统计
关键监控指标详解
以下是 ThingsBoard 的核心监控指标,助你快速锁定问题:
JVM 相关指标
jvm_memory_used_bytes:JVM 内存占用,预防内存溢出。jvm_gc_memory_promoted_bytes_total:GC 提升字节数,优化内存分配。jvm_gc_pause_seconds:GC 暂停时间,避免性能抖动。
系统资源指标
process_cpu_usage:进程 CPU 使用率,识别计算瓶颈。process_start_time_seconds:进程启动时间,计算服务 uptime。system_cpu_usage:系统整体 CPU 使用率。system_load_average_1m:1 分钟系统负载,评估压力。
应用性能指标
http_server_requests_seconds_count:HTTP 请求总数,监控流量。http_server_requests_seconds_sum:请求总耗时,计算平均延迟。tomcat_sessions_active_current:活跃会话数,适合 Web 负载分析。
这些指标结合使用,能全面洞察 ThingsBoard 的运行状态。
故障排除指南
遇到问题?以下是常见问题及解决方法:
- Target 状态为 DOWN
- 检查网络连通性:
kubectl -n cattle-monitoring-system run -it --rm --image=alpine network-test -- sh # 在 Pod 内: apk add curl curl -v http://192.168.198.8:8080/actuator/prometheus -
确保防火墙未阻挡端口 8080。
-
指标数据缺失
- 验证 ThingsBoard 的 Actuator 配置(检查
application.yml是否启用 Prometheus)。 - 确认 ServiceMonitor 的路径和端口正确。
-
直接 curl 指标端点,排查访问问题。
-
认证问题 如果 ThingsBoard 端点需要认证,在 ServiceMonitor 中添加:
(需先创建包含用户名和密码的 Secret 资源。)basicAuth: username: name: auth-secret key: username password: name: auth-secret key: password
总结
通过本教程,你已成功将 ThingsBoard 服务(无论部署在集群内还是外部)接入 K3s 的 Rancher Monitoring 体系。核心优势包括:
- 统一监控:所有服务指标集中管理,运维更高效。
- 自动发现:Prometheus Operator 简化服务接入。
- 专业可视化:Grafana 仪表板让数据一目了然。
- 灵活扩展:方法适用于任何支持 Prometheus 指标的服务。
快去实践吧!让你的物联网平台监控更上一层楼!