Prometheus

[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 根据配置文件,对接收到的警报进行处理,发出告警。
  • 在图形界面中,可视化采集数据。

三、 安装部署

  • 下载
    https://prometheus.io/download/
    image.png

    这里选择 windows版
  • 解压
    解压后的目录


    image.png
  • 启动
    点击prometheus.exe

四、各组件监控

以下各种配置,凡是带有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)