【探索实战】Kurator怎么实现统一监控:告别分散告警,打造一站式可观测性平台!

在这里插入图片描述

在分布式云原生时代,企业的IT基础设施日益复杂,应用往往部署在多个云环境、多个集群甚至是边缘节点上。传统的监控方式面临着诸多挑战:每个集群独立部署监控组件,导致监控数据孤岛;运维人员需要登录不同的监控界面查看指标,效率低下;缺乏全局视角,难以快速定位跨集群的性能问题。Kurator作为一站式分布式云原生平台,通过其强大的统一监控能力,完美解决了这些问题,为企业提供了一站式的可观测性解决方案。

了解什么是统一监控?

在这里插入图片描述

统一监控是指通过单一控制平面,集中管理和监控分布在多个集群、多个环境中的基础设施和服务。它解决了传统监控方式的以下核心痛点:

  1. 监控数据孤岛:消除各集群独立监控导致的数据分散问题
  2. 操作复杂性:通过统一界面管理所有监控组件,简化运维操作
  3. 全局可见性:提供跨集群、跨环境的全局监控视图
  4. 成本优化:减少重复部署监控组件的成本和资源消耗

Kurator统一监控的核心架构

Kurator的统一监控能力基于以下关键技术栈构建:

1. Prometheus - 指标收集引擎

Prometheus是云原生生态系统中最流行的监控和告警工具包。Kurator利用Prometheus作为指标收集引擎,每个集群本地运行一个Prometheus实例,负责采集该集群内的Node、Pod、Service等监控指标。

2. Thanos - 指标聚合和长期存储

在这里插入图片描述

Thanos是一个开源的、具有长期存储功能的高可用Prometheus解决方案。Kurator通过Thanos实现了以下功能:

  • 全局查询视图:通过Thanos Query组件,将多个Prometheus实例的数据聚合在一起,提供统一的查询接口
  • 高可用性:通过冗余部署和自动故障转移,确保监控系统的高可用性
  • 数据备份:将监控数据备份到对象存储中,实现长期存储和历史数据分析
  • 历史数据低成本访问:通过对象存储,以较低的成本存储和访问历史监控数据

3. Grafana - 数据可视化

在这里插入图片描述

Grafana是一个开源的度量分析和可视化套件,常用于可视化时间序列数据。Kurator集成了Grafana,为用户提供丰富的监控仪表板和可视化功能。

4. Fleet管理模式

在这里插入图片描述

与Kurator的其他功能一样,统一监控同样基于Fleet管理模式。通过将多个集群组织成逻辑舰队(Fleet),Kurator可以在舰队级别统一部署和管理监控组件。

实战:使用Kurator实现统一监控

让我们通过一个实际的例子来演示如何使用Kurator实现统一监控。

玎境准备

首先,确保我们已经安装了Kurator控制平面,并且有至少两个已注册的集群:

# 查看已注册的集群
kurator fleet clusters

# 输出示例:
# NAME            STATUS    VERSION   PROVIDER
# prod-cluster-1  Ready     v1.24.0   aws
# prod-cluster-2  Ready     v1.24.0   local

启用统一监控

接下来,我们需要在Fleet中启用统一监控功能:

apiVersion: fleet.kurator.dev/v1alpha1
kind: Fleet
metadata:
  name: production-fleet
spec:
  clusters:
    - name: prod-cluster-1
    - name: prod-cluster-2
    
  plugin:
    prometheus:
      enable: true
      # 配置Prometheus实例的副本数
      replicas: 2
      
    thanos:
      enable: true
      # 启用Thanos组件
      components:
        - query
        - store
        - compact
        
    grafana:
      enable: true
      # 启用Grafana用于可视化

应用这个配置:

kubectl apply -f production-fleet-with-monitoring.yaml

验证监控组件部署

等待一段时间让Kurator完成监控组件的部署,然后验证各组件是否正常运行:

# 查看Prometheus实例状态
kubectl get pods -n monitoring

# 输出示例:
# NAME                                   READY   STATUS    RESTARTS   AGE
# prometheus-prometheus-0               2/2     Running   0          10m
# prometheus-prometheus-1               2/2     Running   0          9m
# thanos-query-7b9f8d9c4f-abcde         1/1     Running   0          8m
# thanos-store-6d8f7c9b4f-fghij         1/1     Running   0          8m
# grafana-5d7c9f8b4f-klmno              1/1     Running   0          7m

访问Grafana仪表板

获取Grafana服务的访问地址:

# 获取Grafana服务信息
kubectl get svc grafana -n monitoring

# 输出示例:
# NAME      TYPE       CLUSTER-IP      EXTERNAL-IP   PORT(S)        AGE
# grafana   NodePort   10.96.123.45    <none>        80:30001/TCP   15m

通过浏览器访问http://<cluster-ip>:30001,默认用户名和密码都是admin

配置统一数据源

在Grafana中配置Thanos作为统一数据源:

  1. 登录Grafana后,点击左侧菜单的"Configuration" -> “Data Sources”
  2. 点击"Add data source"
  3. 选择"Prometheus"
  4. 在URL字段中输入Thanos Query的地址,例如:http://thanos-query.monitoring:9090
  5. 点击"Save & Test"验证连接

创建跨集群监控面板

现在我们可以创建一个跨集群的监控面板,展示所有集群的资源使用情况:

{
  "dashboard": {
    "title": "跨集群资源使用情况",
    "panels": [
      {
        "title": "CPU使用率(所有集群)",
        "type": "graph",
        "targets": [
          {
            "expr": "100 - (avg by (instance) (irate(node_cpu_seconds_total{mode=\"idle\"}[5m])) * 100)",
            "legendFormat": "{{cluster}} - {{instance}}"
          }
        ]
      },
      {
        "title": "内存使用率(所有集群)",
        "type": "graph",
        "targets": [
          {
            "expr": "(node_memory_MemTotal_bytes - node_memory_MemAvailable_bytes) / node_memory_MemTotal_bytes * 100",
            "legendFormat": "{{cluster}} - {{instance}}"
          }
        ]
      }
    ]
  }
}

高级功能:自定义监控配置

Kurator不仅提供了默认的监控配置,还支持用户自定义监控配置以满足特定需求。

自定义Prometheus配置

apiVersion: fleet.kurator.dev/v1alpha1
kind: Fleet
metadata:
  name: production-fleet
spec:
  clusters:
    - name: prod-cluster-1
    - name: prod-cluster-2
    
  plugin:
    prometheus:
      enable: true
      # 自定义配置
      config:
        retention: "30d"
        storageSpec:
          volumeClaimTemplate:
            spec:
              resources:
                requests:
                  storage: 100Gi
                  
    thanos:
      enable: true
      # 自定义Thanos配置
      config:
        query:
          replicas: 2
        store:
          shardingStrategy: hash

添加自定义告警规则

apiVersion: monitoring.coreos.com/v1
kind: PrometheusRule
metadata:
  name: custom-alert-rules
  namespace: monitoring
spec:
  groups:
  - name: custom.rules
    rules:
    - alert: HighRequestLatency
      expr: job:request_latency_seconds:mean5m{job="myapp"} > 0.5
      for: 10m
      labels:
        severity: page
      annotations:
        summary: High request latency

配置日志收集

除了指标监控,Kurator还支持统一的日志收集:

apiVersion: fleet.kurator.dev/v1alpha1
kind: Fleet
metadata:
  name: production-fleet
spec:
  clusters:
    - name: prod-cluster-1
    - name: prod-cluster-2
    
  plugin:
    loki:
      enable: true
      # 启用Loki用于日志收集
      
    promtail:
      enable: true
      # 启用Promtail用于日志采集

监控最佳实践

1. 合理规划存储容量

监控数据随着时间的推移会不断增长,需要合理规划存储容量:

apiVersion: fleet.kurator.dev/v1alpha1
kind: Fleet
metadata:
  name: production-fleet
spec:
  plugin:
    prometheus:
      config:
        # 保留时间
        retention: "15d"
        storageSpec:
          volumeClaimTemplate:
            spec:
              resources:
                requests:
                  # 根据集群规模调整存储大小
                  storage: 200Gi

2. 设置合适的告警阈值

合理的告警阈值可以避免告警疲劳:

groups:
- name: example
  rules:
  - alert: HighErrorRate
    expr: |
      sum(rate(http_requests_total{status=~"5.."}[5m]))
      /
      sum(rate(http_requests_total[5m]))
      * 100 > 5
    for: 10m
    labels:
      severity: warning
    annotations:
      summary: "High error rate"

3. 使用服务发现自动发现监控目标

通过服务发现机制自动发现监控目标,减少手动配置:

- job_name: 'kubernetes-pods'
  kubernetes_sd_configs:
  - role: pod
  relabel_configs:
  - source_labels: [__meta_kubernetes_pod_annotation_prometheus_io_scrape]
    action: keep
    regex: true

安全考虑

在生产环境中实施统一监控时,需要特别注意以下安全事项:

1. 网络隔离

确保监控组件之间的网络通信安全:

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: monitoring-policy
  namespace: monitoring
spec:
  podSelector: {}
  policyTypes:
  - Ingress
  - Egress
  ingress:
  - from:
    - namespaceSelector:
        matchLabels:
          name: monitoring

2. 访问控制

实施严格的访问控制策略:

apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  namespace: monitoring
  name: monitoring-reader
rules:
- apiGroups: [""]
  resources: ["pods", "services", "endpoints"]
  verbs: ["get", "list", "watch"]

3. 数据加密

确保敏感监控数据的传输和存储安全:

apiVersion: v1
kind: Secret
metadata:
  name: monitoring-tls
  namespace: monitoring
type: kubernetes.io/tls
data:
  tls.crt: <base64 encoded cert>
  tls.key: <base64 encoded key>

总结

Kurator通过其创新的统一监控能力,为企业提供了一套完整的跨环境监控解决方案。它不仅简化了多集群环境中的监控复杂度,还提供了强大的数据聚合、长期存储和可视化功能。

通过本文的介绍和实践演示,我们可以看到:

  1. 简化操作:通过声明式配置和Fleet管理模式,一次定义即可实现跨多个集群的监控部署
  2. 增强可见性:通过Thanos实现全局查询视图,提供跨集群的统一监控视角
  3. 提高效率:统一的Grafana仪表板大大简化了运维监控工作
  4. 扩展性强:支持自定义配置和多种插件,满足不同场景的监控需求

在实际应用中,建议从基础监控开始,逐步扩展到更复杂的监控场景,充分发挥Kurator统一监控的优势,构建高效、可靠的分布式云原生监控体系。

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐