Prometheus 在微服务架构中的应用

简介: 【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,在微服务架构中实现有效的监控。

目录
相关文章
|
7月前
|
人工智能 自然语言处理 开发工具
统一多模态 Transformer 架构在跨模态表示学习中的应用与优化
本文介绍统一多模态 Transformer(UMT)在跨模态表示学习中的应用与优化,涵盖模型架构、实现细节与实验效果,探讨其在图文检索、图像生成等任务中的卓越性能。
统一多模态 Transformer 架构在跨模态表示学习中的应用与优化
|
6月前
|
监控 Java API
Spring Boot 3.2 结合 Spring Cloud 微服务架构实操指南 现代分布式应用系统构建实战教程
Spring Boot 3.2 + Spring Cloud 2023.0 微服务架构实践摘要 本文基于Spring Boot 3.2.5和Spring Cloud 2023.0.1最新稳定版本,演示现代微服务架构的构建过程。主要内容包括: 技术栈选择:采用Spring Cloud Netflix Eureka 4.1.0作为服务注册中心,Resilience4j 2.1.0替代Hystrix实现熔断机制,配合OpenFeign和Gateway等组件。 核心实操步骤: 搭建Eureka注册中心服务 构建商品
1052 3
|
9月前
|
人工智能 监控 安全
NTP网络子钟的技术架构与行业应用解析
在数字化与智能化时代,时间同步精度至关重要。西安同步电子科技有限公司专注时间频率领域,以“同步天下”品牌提供可靠解决方案。其明星产品SYN6109型NTP网络子钟基于网络时间协议,实现高精度时间同步,广泛应用于考场、医院、智慧场景等领域。公司坚持技术创新,产品通过权威认证,未来将结合5G、物联网等技术推动行业进步,引领精准时间管理新时代。
|
8月前
|
存储 编解码 Serverless
Serverless架构下的OSS应用:函数计算FC自动处理图片/视频转码(演示水印添加+缩略图生成流水线)
本文介绍基于阿里云函数计算(FC)和对象存储(OSS)构建Serverless媒体处理流水线,解决传统方案资源利用率低、运维复杂、成本高等问题。通过事件驱动机制实现图片水印添加、多规格缩略图生成及视频转码优化,支持毫秒级弹性伸缩与精确计费,提升处理效率并降低成本,适用于高并发媒体处理场景。
451 0
|
4月前
|
人工智能 JavaScript 前端开发
GenSX (不一样的AI应用框架)架构学习指南
GenSX 是一个基于 TypeScript 的函数式 AI 工作流框架,以“函数组合替代图编排”为核心理念。它通过纯函数组件、自动追踪与断点恢复等特性,让开发者用自然代码构建可追溯、易测试的 LLM 应用。支持多模型集成与插件化扩展,兼具灵活性与工程化优势。
349 6
|
5月前
|
人工智能 Cloud Native 中间件
划重点|云栖大会「AI 原生应用架构论坛」看点梳理
本场论坛将系统性阐述 AI 原生应用架构的新范式、演进趋势与技术突破,并分享来自真实生产环境下的一线实践经验与思考。
|
5月前
|
机器学习/深度学习 人工智能 vr&ar
H4H:面向AR/VR应用的NPU-CIM异构系统混合卷积-Transformer架构搜索——论文阅读
H4H是一种面向AR/VR应用的混合卷积-Transformer架构,基于NPU-CIM异构系统,通过神经架构搜索实现高效模型设计。该架构结合卷积神经网络(CNN)的局部特征提取与视觉Transformer(ViT)的全局信息处理能力,提升模型性能与效率。通过两阶段增量训练策略,缓解混合模型训练中的梯度冲突问题,并利用异构计算资源优化推理延迟与能耗。实验表明,H4H在相同准确率下显著降低延迟和功耗,为AR/VR设备上的边缘AI推理提供了高效解决方案。
666 0
|
4月前
|
机器学习/深度学习 自然语言处理 算法
48_动态架构模型:NAS在LLM中的应用
大型语言模型(LLM)在自然语言处理领域的突破性进展,很大程度上归功于其庞大的参数量和复杂的网络架构。然而,随着模型规模的不断增长,计算资源消耗、推理延迟和部署成本等问题日益凸显。如何在保持模型性能的同时,优化模型架构以提高效率,成为2025年大模型研究的核心方向之一。神经架构搜索(Neural Architecture Search, NAS)作为一种自动化的网络设计方法,正在为这一挑战提供创新性解决方案。本文将深入探讨NAS技术如何应用于LLM的架构优化,特别是在层数与维度调整方面的最新进展,并通过代码实现展示简单的NAS实验。
|
6月前
|
Web App开发 Linux 虚拟化
Omnissa Horizon 8 2506 (8.16) - 虚拟桌面基础架构 (VDI) 和应用软件
Omnissa Horizon 8 2506 (8.16) - 虚拟桌面基础架构 (VDI) 和应用软件
339 0
Omnissa Horizon 8 2506 (8.16) - 虚拟桌面基础架构 (VDI) 和应用软件

相关产品

  • 可观测监控 Prometheus 版