Prometheus 在微服务架构中的应用

本文涉及的产品
可观测可视化 Grafana 版,10个用户账号 1个月
Serverless 应用引擎免费试用套餐包,4320000 CU,有效期3个月
任务调度 XXL-JOB 版免费试用,400 元额度,开发版规格
简介: 【8月更文第29天】随着微服务架构的普及,监控和跟踪各个服务的状态变得尤为重要。Prometheus 是一个开源的监控系统和时间序列数据库,非常适合用于微服务架构中的监控。本文将详细介绍 Prometheus 如何支持微服务架构下的监控需求,包括服务发现、服务间的监控指标收集以及如何配置 Prometheus 来适应这些需求。

引言

随着微服务架构的普及,监控和跟踪各个服务的状态变得尤为重要。Prometheus 是一个开源的监控系统和时间序列数据库,非常适合用于微服务架构中的监控。本文将详细介绍 Prometheus 如何支持微服务架构下的监控需求,包括服务发现、服务间的监控指标收集以及如何配置 Prometheus 来适应这些需求。

Prometheus 监控原理

Prometheus 使用拉取模式来收集监控数据。它定期从配置的目标中抓取时间序列数据,并存储在本地时间序列数据库中。Prometheus 支持多种数据源,如 HTTP API、Prometheus Exporter 等。

微服务架构下的监控挑战

在微服务架构中,通常存在大量的服务实例,这些服务实例可能会动态变化(例如,通过自动扩缩容)。因此,Prometheus 需要能够自动发现这些服务实例并对其进行监控。

Prometheus 服务发现机制

Prometheus 支持多种服务发现机制,包括静态配置、DNS SRV 记录、Consul、Zookeeper、Kubernetes 等。其中,Kubernetes 是微服务架构中最常用的平台之一,因此我们将重点介绍如何在 Kubernetes 中配置 Prometheus 的服务发现。

在 Kubernetes 中配置 Prometheus 服务发现

首先,我们需要在 Kubernetes 中部署 Prometheus Server 和相关的组件。这里假设我们已经有一个运行良好的 Kubernetes 集群。

  1. 安装 Prometheus Operator
    Prometheus Operator 可以简化 Prometheus 的部署和管理。我们可以使用 Helm Chart 来安装 Prometheus Operator。

    helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
    helm repo update
    helm install prometheus-operator prometheus-community/prometheus-operator
    
  2. 配置 Prometheus
    接下来,我们需要创建一个 Prometheus 配置文件,其中包含服务发现配置。

    apiVersion: monitoring.coreos.com/v1
    kind: Prometheus
    metadata:
      name: prometheus
    spec:
      serviceMonitorSelector:
        matchLabels:
          release: prometheus
      ruleSelector:
        matchLabels:
          release: prometheus
      enableRemoteWriteReceive: true
      retention: 15d
      storageSpec:
        volumeClaimTemplate:
          spec:
            storageClassName: local-storage
            accessModes: ["ReadWriteOnce"]
            resources:
              requests:
                storage: 50Gi
      additionalScrapeConfigs:
      - job_name: 'kubernetes-service-endpoints'
        kubernetes_sd_configs:
        - role: endpoints
        relabel_configs:
        - source_labels: [__meta_kubernetes_service_label_app, __meta_kubernetes_endpoint_port_name]
          action: keep
          regex: myapp;http-metrics
        - source_labels: [__address__, __meta_kubernetes_endpoint_node_name]
          action: replace
          target_label: __address__
          replacement: '$1:9100'
        - action: labelmap
          regex: __meta_kubernetes(.+)
        - source_labels: [__meta_kubernetes_namespace]
          action: replace
          target_label: kubernetes_namespace
        - source_labels: [__meta_kubernetes_service_name]
          action: replace
          target_label: kubernetes_name
        - source_labels: [__meta_kubernetes_pod_node_name]
          action: replace
          target_label: kubernetes_node
    

    在这个配置文件中,我们定义了一个 kubernetes-service-endpoints 的 scrape job,它会自动发现 Kubernetes 中带有 app=myapp 标签的服务,并监听端口 http-metrics

  3. 部署 Prometheus
    使用以下命令部署 Prometheus。

    kubectl apply -f prometheus.yaml
    
  4. 创建 ServiceMonitor
    ServiceMonitor 是一个 Kubernetes 资源对象,它定义了 Prometheus 如何发现和监控服务。

    apiVersion: monitoring.coreos.com/v1
    kind: ServiceMonitor
    metadata:
      labels:
        release: prometheus
      name: myapp-monitor
    spec:
      selector:
        matchLabels:
          app: myapp
      endpoints:
      - port: http-metrics
        interval: 30s
        path: /metrics
    

    这个 ServiceMonitor 将监控所有带有 app: myapp 标签的服务,并且每 30 秒抓取一次 /metrics 端点的数据。

  5. 部署应用
    我们需要部署一个应用,该应用暴露 /metrics 端点以供 Prometheus 抓取。

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: myapp
      labels:
        app: myapp
    spec:
      replicas: 3
      selector:
        matchLabels:
          app: myapp
      template:
        metadata:
          labels:
            app: myapp
        spec:
          containers:
          - name: myapp
            image: myapp:v1
            ports:
            - containerPort: 8080
            - name: http-metrics
              containerPort: 9100
            readinessProbe:
              httpGet:
                path: /metrics
                port: http-metrics
              initialDelaySeconds: 5
              periodSeconds: 10
    

    这个 Deployment 包含了一个名为 myapp 的服务,它监听两个端口:一个是业务端口 8080,另一个是 Prometheus 监控端口 9100。

监控指标

在微服务架构中,我们通常需要关注以下几类指标:

  1. HTTP 请求相关指标

    • http_requests_total: HTTP 请求总数。
    • http_request_duration_seconds: HTTP 请求持续时间。
  2. 服务健康检查指标

    • up: 服务是否正常运行。
    • process_start_time_seconds: 进程启动时间。
  3. 系统资源使用情况

    • go_goroutines: 当前运行的 Goroutine 数量。
    • process_resident_memory_bytes: 进程占用的物理内存大小。

实践示例

假设我们已经部署了一个名为 myapp 的服务,接下来我们将展示如何配置 Prometheus 来监控这些服务。

  1. 配置 Prometheus 规则
    我们可以使用 Prometheus 的 Alert Rules 来定义告警规则。

    groups:
    - name: myapp-alerts
      rules:
      - alert: HighErrorRate
        expr: sum(rate(http_requests_total{
         status_code=~"5.."}[5m])) by (job)
        for: 10m
        labels:
          severity: warning
        annotations:
          summary: "High error rate on {
         { $labels.job }}"
          description: "{
         { $labels.job }} has an error rate of more than 1% for more than 10 minutes."
    

    这个规则将在过去 5 分钟内 HTTP 错误率超过 1% 时触发告警。

  2. 查看监控数据
    我们可以使用 Prometheus 的 Web UI 或 Grafana 来查看监控数据。

    kubectl port-forward svc/prometheus-k8s 9090
    

    打开浏览器访问 http://localhost:9090 即可查看 Prometheus 的 Web UI。

结论

Prometheus 是一个非常强大的监控工具,特别适合用于微服务架构。通过配置服务发现机制、监控指标和告警规则,我们可以有效地监控和维护微服务架构的稳定性和性能。希望本文能帮助您更好地理解和应用 Prometheus,在微服务架构中实现有效的监控。

目录
相关文章
|
3月前
|
人工智能 自然语言处理 开发工具
统一多模态 Transformer 架构在跨模态表示学习中的应用与优化
本文介绍统一多模态 Transformer(UMT)在跨模态表示学习中的应用与优化,涵盖模型架构、实现细节与实验效果,探讨其在图文检索、图像生成等任务中的卓越性能。
统一多模态 Transformer 架构在跨模态表示学习中的应用与优化
|
4月前
|
存储 编解码 Serverless
Serverless架构下的OSS应用:函数计算FC自动处理图片/视频转码(演示水印添加+缩略图生成流水线)
本文介绍基于阿里云函数计算(FC)和对象存储(OSS)构建Serverless媒体处理流水线,解决传统方案资源利用率低、运维复杂、成本高等问题。通过事件驱动机制实现图片水印添加、多规格缩略图生成及视频转码优化,支持毫秒级弹性伸缩与精确计费,提升处理效率并降低成本,适用于高并发媒体处理场景。
226 0
|
5月前
|
人工智能 监控 安全
NTP网络子钟的技术架构与行业应用解析
在数字化与智能化时代,时间同步精度至关重要。西安同步电子科技有限公司专注时间频率领域,以“同步天下”品牌提供可靠解决方案。其明星产品SYN6109型NTP网络子钟基于网络时间协议,实现高精度时间同步,广泛应用于考场、医院、智慧场景等领域。公司坚持技术创新,产品通过权威认证,未来将结合5G、物联网等技术推动行业进步,引领精准时间管理新时代。
|
6月前
|
Web App开发 Linux 数据库
Omnissa Horizon 8 2503 (ESB Release) - 虚拟桌面基础架构 (VDI) 和应用软件
Omnissa Horizon 8 2503 (ESB Release) - 虚拟桌面基础架构 (VDI) 和应用软件
366 8
Omnissa Horizon 8 2503 (ESB Release) - 虚拟桌面基础架构 (VDI) 和应用软件
|
16天前
|
人工智能 Cloud Native 中间件
划重点|云栖大会「AI 原生应用架构论坛」看点梳理
本场论坛将系统性阐述 AI 原生应用架构的新范式、演进趋势与技术突破,并分享来自真实生产环境下的一线实践经验与思考。
|
22天前
|
机器学习/深度学习 人工智能 vr&ar
H4H:面向AR/VR应用的NPU-CIM异构系统混合卷积-Transformer架构搜索——论文阅读
H4H是一种面向AR/VR应用的混合卷积-Transformer架构,基于NPU-CIM异构系统,通过神经架构搜索实现高效模型设计。该架构结合卷积神经网络(CNN)的局部特征提取与视觉Transformer(ViT)的全局信息处理能力,提升模型性能与效率。通过两阶段增量训练策略,缓解混合模型训练中的梯度冲突问题,并利用异构计算资源优化推理延迟与能耗。实验表明,H4H在相同准确率下显著降低延迟和功耗,为AR/VR设备上的边缘AI推理提供了高效解决方案。
245 0
|
6月前
|
人工智能 Cloud Native Serverless
从理论到落地:MCP 实战解锁 AI 应用架构新范式
本文旨在从 MCP 的技术原理、降低 MCP Server 构建复杂度、提升 Server 运行稳定性等方面出发,分享我们的一些实践心得。
2526 102
|
4月前
|
消息中间件 存储 Kafka
一文带你从入门到实战全面掌握RocketMQ核心概念、架构部署、实践应用和高级特性
本文详细介绍了分布式消息中间件RocketMQ的核心概念、部署方式及使用方法。RocketMQ由阿里研发并开源,具有高性能、高可靠性和分布式特性,广泛应用于金融、互联网等领域。文章从环境搭建到消息类型的实战(普通消息、延迟消息、顺序消息和事务消息)进行了全面解析,并对比了三种消费者类型(PushConsumer、SimpleConsumer和PullConsumer)的特点与适用场景。最后总结了使用RocketMQ时的关键注意事项,如Topic和Tag的设计、监控告警的重要性以及性能与可靠性的平衡。通过学习本文,读者可掌握RocketMQ的使用精髓并灵活应用于实际项目中。
2459 9
 一文带你从入门到实战全面掌握RocketMQ核心概念、架构部署、实践应用和高级特性
|
3月前
|
人工智能 数据可视化 Java
什么是低代码(Low-Code)?低代码核心架构技术解析与应用展望
低代码开发正成为企业应对业务增长与IT人才短缺的重要解决方案。相比传统开发方式效率提升60%,预计2026年市场规模达580亿美元。它通过可视化界面与少量代码,让非专业开发者也能快速构建应用,推动企业数字化转型。随着AI技术发展,低代码与AIGC结合,正迈向智能化开发新时代。

热门文章

最新文章

相关产品

  • 可观测监控 Prometheus 版