美文网首页
Prometheus

Prometheus

作者: KwongRay | 来源:发表于2020-05-14 10:24 被阅读0次

    [TOC]

    一、 介绍

    1. Prometheus(普罗米修斯)是一套开源的监控&报警&时间序列数据库的组合,起始是由SoundCloud公司开发的。随着发展,越来越多公司和组织接受采用Prometheus,社会也十分活跃,他们便将它独立成开源项目,并且有公司来运作。Google SRE的书内也曾提到跟他们BorgMon监控系统相似的实现是Prometheus。现在最常见的Kubernetes容器管理系统中,通常会搭配Prometheus进行监控。
    2. Prometheus基本原理是通过HTTP协议周期性抓取被监控组件的状态,这样做的好处是任意组件只要提供HTTP接口就可以接入监控系统,不需要任何SDK或者其他的集成过程。这样做非常适合虚拟化环境比如VM或者Docker 。
    3. Prometheus应该是为数不多的适合Docker、Mesos、Kubernetes环境的监控系统之一。输出被监控组件信息的HTTP接口被叫做exporter 。目前互联网公司常用的组件大部分都有exporter可以直接使用,比如Varnish、Haproxy、Nginx、MySQL、Linux 系统信息 (包括磁盘、内存、CPU、网络等等),具体支持的源看:https://github.com/prometheus
    4. 与其他监控系统相比,Prometheus的主要特点是:
      • 一个多维数据模型(时间序列由指标名称定义和设置键/值尺寸)。
      • 非常高效的存储,平均一个采样数据占~3.5bytes左右,320万的时间序列,每30秒采样,保持60天,消耗磁盘大概228G。
      • 一种灵活的查询语言。
      • 不依赖分布式存储,单个服务器节点。
      • 时间集合通过HTTP上的PULL模型进行。
      • 通过中间网关支持推送时间。
      • 通过服务发现或静态配置发现目标。
      • 多种模式的图形和仪表板支持。

    二、Prometheus架构

    architecture.png
    • Prometheus server 负责从 Exporter 拉取和存储监控数据,并提供一套灵活的查询语言(PromQL)
      • Retrieval: 采样模块
      • TSDB: 存储模块默认本地存储为tsdb
      • HTTP Server: 提供http接口查询和面板,默认端口为9090
    • Exporters/Jobs
      负责收集目标对象(host, container…)的性能数据,并通过 HTTP 接口供 Prometheus Server 获取。支持数据库、硬件、消息中间件、存储系统、http服务器、jmx等。只要符合接口格式,就可以被采集。
    • Short-lived jobs
      瞬时任务的场景,无法通过pull方式拉取,需要使用push方式,与PushGateway搭配使用
    • PushGateway
      可选组件,主要用于短期的 jobs。由于这类 jobs 存在时间较短,可能在 Prometheus 来 pull 之前就消失了。为此,这次 jobs 可以直接向 Prometheus server 端推送它们的 metrics。这种方式主要用于服务层面的 metrics,对于机器层面的 metrices,需要使用 node exporter。
    • 客户端sdk
      官方提供的客户端类库有go、java、scala、python、ruby,其他还有很多第三方开发的类库,支持nodejs、php、erlang等
    • Alertmanager
      从 Prometheus server 端接收到 alerts 后,会进行去除重复数据,分组,并路由到对收的接受方式,发出报警。常见的接收方式有:电子邮件,pagerduty,OpsGenie, webhook 等。
    • Service Discovery
      服务发现,Prometheus支持多种服务发现机制:文件,DNS,Consul,Kubernetes,OpenStack,EC2等等。基于服务发现的过程并不复杂,通过第三方提供的接口,Prometheus查询到需要监控的Target列表,然后轮训这些Target获取监控数据。

    其大概的工作流程是:

    • Prometheus server 定期从配置好的 jobs 或者 exporters 中拉 metrics,或者接收来自 Pushgateway 发过来的 metrics,或者从其他的 Prometheus server 中拉 metrics。
    • Prometheus server 在本地存储收集到的 metrics,并运行已定义好的 alert.rules,记录新的时间序列或者向 Alertmanager 推送警报。
    • Alertmanager 根据配置文件,对接收到的警报进行处理,发出告警。
    • 在图形界面中,可视化采集数据。

    三、 安装部署

    四、各组件监控

    以下各种配置,凡是带有exporter的,都需要提前安装
    凡是修改的配置都在prometheus.yml文件

    • 服务器监控
    - job_name: 'node'
        static_configs:
        - targets: ['192.168.80.130:9100']
          labels:
            env: test
            name: node1
            instance: 192.168.80.130
    
    • MySQL监控
    - job_name: 'mysqld'
        static_configs:
        - targets: ['192.168.28.131:9104']
          labels:
            env: test
            name: mysql-5.7
            instance: 192.168.28.131:3306
    
    • Elasticsearch监控
    - job_name: elasticsearch
        scrape_interval: 10s
        metrics_path: "/_prometheus/metrics"
        static_configs:
        - targets: ['192.168.28.130:9200']
          labels:
            env: test
            name: elasticsearch
    
    • Nacos监控
      • 配置nacos的application.properties文件,暴露metrics数据
      management.endpoints.web.exposure.include=*
      
      • 修改prometheus的配置
      - job_name: nacos
      metrics_path: "/nacos/actuator/prometheus"
      static_configs:
      - targets: ['192.168.28.130:8848']
        labels:
          env: test
          name: nacos
          instance: 192.168.28.130:8848
      
    • Redis监控
    - job_name: redis
        static_configs:
        - targets: ['192.168.28.130:9121']
          labels:
            env: test
            name: redis
            instance: 192.168.28.130:3306
    
    • 微服务监控
      通过file_sd_configs进行服务发现的配置,每次json文件的内容发生变更,Prometheus会自动刷新target列表
      1. 新建配置服务的json文件
    [
     {
       "targets": [
         "127.0.0.1:9900"
       ],
       "labels": {
         "job":"spring-boot-service",
         "env":"dev",
         "application":"api-gateway",
         "instance":"127.0.0.1:9900"
       }
     },
     {
       "targets": [
         "127.0.0.1:8000"
       ],
       "labels": {
         "job":"spring-boot-service",
         "env":"dev",
         "application":"uaa-server",
         "instance":"127.0.0.1:8000"
       }
     },
     {
       "targets": [
         "127.0.0.1:7000"
       ],
       "labels": {
         "job":"spring-boot-service",
         "env":"dev",
         "application":"pscp-user",
         "instance":"127.0.0.1:7000"
       }
     }
    ] 
    
    1. 修改prometheus的配置
      - job_name: spring-boot-service
        metrics_path: "/actuator/prometheus"
        file_sd_configs:
        - files: ['F:/code/pscp-platform/pscp-tool/prometheus-2.18.1.windows-amd64/*.json']
       #这里的路径就是上面新建的json文件
    

    相关文章

      网友评论

          本文标题:Prometheus

          本文链接:https://www.haomeiwen.com/subject/bgsznhtx.html