前言

Prometheus是CNCF的一个开源项目,Google BorgMon监控系统的开源版本,是一个系统和服务的监控系统。周期性采集metrics指标,匹配规则和展示结果,以及触发某些条件的告警发送。

特点

Prometheus主要区别于其他监控系统的特点是:

  • 多维度数据模型(时序数据是由指标名字和kv结构的维度定义)
  • 灵活的查询语言(PromQL)
  • 不依赖分布式存储。每个server是一个自治的节点。
  • 通过HTTP拉取收集时序数据,同时提供push gateway供用户主动推送数据,主要用于短生命周期的job。
  • 通过静态配置或服务发现来发现目标对象
  • 支持多种多样的出图和展示方式,例如自带的Web UI和Grafana等。
  • 支持水平扩容

架构

组件

Prometheus生态系统由多个组件组成,其中大部分是可选的组件。

  • Prometheus Server 负责收集和存储时序数据。提供PromQL查询语言的支持。
  • Pushgateway 支持短生命周期的任务推送结果数据。
  • Exporter 采集组件的总称,是Prometheus生态系统中的Agent。
  • Altermanager 处理告警。
  • 客户端SDK 官方提供的SDK支持的语言由go,java,python等多种语言。

绝大部分Prometheus的组件都是用golang编写,使得Prometheus 组件容易编译和部署。(二进制没有依赖)

工作流程

从架构图中可以看出,Prometheus Server 周期性的拉取从配置文件或者服务发现获取到的目标数据,每个目标需要通过HTTP接口暴露数据。Prometheus Server通过一定的规则汇总和记录时序数据到本地数据库。将符合检测条件的告警数据推送给Altermanager,Altermanager通过配置的通知方式发送告警。Web UI 或者Grafana通过PromQL查询Prometheus Server中的数据绘图展示。

适用的场景

Prometheus在记录纯数字的时序数据方面表现得非常好。既适用于机器的性能数据,也适用于服务的监控数据。对于微服务,Prometheus的多维度收集和查询语言也是非常强大。

不适用的场景

Promethus的价值在于它的可靠性。Prometheus不适用于对统计或分析数据100%准确要求的场景。

部署实战

下面我会通过Docker Compose的方式部署整个Prometheus监控系统和Grafana展示数据。如果对Docker Compose还不熟悉的朋友,可以先查看我之前的介绍文章。

Prometheus的docker-compose.yml基于github的开源仓库修改。docker-compose.yml内容如下:

version: '3.1'volumes:prometheus_data: {}grafana_data: {}services:prometheus:image: prom/prometheus:v2.1.0volumes:- ./prometheus/:/etc/prometheus/- prometheus_data:/prometheuscommand:- '--config.file=/etc/prometheus/prometheus.yml'- '--storage.tsdb.path=/prometheus'- '--web.console.libraries=/usr/share/prometheus/console_libraries'- '--web.console.templates=/usr/share/prometheus/consoles'ports:- 9090:9090restart: alwaysnode-exporter:image: prom/node-exportervolumes:- /proc:/host/proc:ro- /sys:/host/sys:ro- /:/rootfs:rocommand: - '--path.procfs=/host/proc' - '--path.sysfs=/host/sys'- --collector.filesystem.ignored-mount-points- "^/(sys|proc|dev|host|etc|rootfs/var/lib/docker/containers|rootfs/var/lib/docker/overlay2|rootfs/run/docker/netns|rootfs/var/lib/docker/aufs)($$|/)"ports:- 9100:9100restart: alwaysalertmanager:image: prom/alertmanagervolumes:- ./alertmanager/:/etc/alertmanager/ports:- 9093:9093restart: alwayscommand:- '--config.file=/etc/alertmanager/config.yml'- '--storage.path=/alertmanager'grafana:image: grafana/grafanauser: "104"ports:- 3000:3000depends_on:- prometheusvolumes:- grafana_data:/var/lib/grafana- ./grafana/provisioning/:/etc/grafana/provisioning/env_file:- ./grafana/config.monitoringrestart: always

从上面的docker-compose.yml可以看出,将通过Docker Compose部署Prometheus Server,Altermanager,Grafana,和node exporter。其中node exporter负责采集机器的基础性能数据,例如CPU,MEM,DISK等等,通过暴露HTTP接口供Prometheus Server拉取数据做数据存储和清洗。Grafana负责数据的展示。Prometheus通过配置文件静态配置获取node exporter的地址:

 1 $ cat prometheus.yml
 2 # my global config
 3 global:
 4   scrape_interval:     15s # By default, scrape targets every 15 seconds.
 5   evaluation_interval: 15s # By default, scrape targets every 15 seconds.
 6   # scrape_timeout is set to the global default (10s).
 7
 8   # Attach these labels to any time series or alerts when communicating with
 9   # external systems (federation, remote storage, Alertmanager).
10   external_labels:
11       monitor: 'my-project'
12
13 # Load and evaluate rules in this file every 'evaluation_interval' seconds.
14 rule_files:
15   - 'alert.rules'
16   # - "first.rules"
17   # - "second.rules"
18
19 # alert
20 alerting:
21   alertmanagers:
22   - scheme: http
23     static_configs:
24     - targets:
25       - "alertmanager:9093"
26
27 # A scrape configuration containing exactly one endpoint to scrape:
28 # Here it's Prometheus itself.
29 scrape_configs:
30   # The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.
31
32   - job_name: 'prometheus'
33
34     # Override the global default and scrape targets from this job every 5 seconds.
35     scrape_interval: 5s
36
37     static_configs:
38          - targets: ['localhost:9090']
39
40   - job_name: 'node-exporter'
41
42     # Override the global default and scrape targets from this job every 5 seconds.
43     scrape_interval: 5s
44     static_configs:
45          - targets: ['node-exporter:9100']

其中40-45行是node-exporter的抓取地址和周期配置。因为Docker Compose会自动做服务地址解析,所以这里可以直接用node-exporter:9100作为地址。

通过Prometheus 9090端口可以查看到要采集的目标列表信息:

通过Grafana可以查看到node exporter采集上来的数据展示,其中Grafana用的看板模板是https://grafana.com/dashboards/8919

总结

文章开始分析了Prometheus开源监控系统的整体架构和特点,然后通过Docker Compose演示了整个系统的搭建。下一篇博客我将演示用Prometheus提供的Golang SDK从头开始写一个Expoter。

参考

https://prometheus.io/docs/introduction/overview/

转载于:https://www.cnblogs.com/makelu/p/11069094.html

开源监控系统Prometheus介绍相关推荐

  1. 开源监控系统 Prometheus 入门

    点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 来源 | 公众号「yangyidba」 一 简介 Pro ...

  2. 开源监控系统Prometheus——Alertmanager报警模块

    概要 Alertmanager与Prometheus是相互分离的两个部分.Prometheus服务器根据报警规则将警报发送给Alertmanager,然后Alertmanager将silencing. ...

  3. 小米开源监控系统OpenFalcon应对高并发7种手段

    2019独角兽企业重金招聘Python工程师标准>>> 小米开源监控系统OpenFalcon应对高并发7种手段 原创 2016-04-01 秦晓辉 高可用架构 编者按:本文是秦晓辉在 ...

  4. Open-Falcon 小米开源监控系统Dashboard使用操作与告警通知

    前言 上一章节我们已经完成了Open-Falcon的单机部署,这一章节主要介绍Open-Falcon的用户注册.功能使用和监控客户端配置. Open-Falcon 部署参考:CentOS-7 单机部署 ...

  5. 小米的开源监控系统open-falcon架构设计,看完明白如何设计一个好的系统

    小米的开源监控系统open-falcon架构设计,看完明白如何设计一个好的系统 小米的http://book.open-falcon.org/zh/intro/ 早期,一直在用zabbix,不过随着业 ...

  6. 10款PHP开源商城系统汇总介绍

    10款PHP开源商城系统汇总介绍 在当今经济危机的大环境下,网上购物越来越来吃香,网上开店成本低,快捷方便,出名的电子商务网站有淘宝,拍拍,Ebay或是最新的百度有啊,这些网站都提供开店的机会,如果是 ...

  7. java 开源监控_推荐一款强大的国产开源监控系统!

    项目简介 集监控点监控.日志监控.数据可视化以及监控告警为一体的国产开源监控系统,直接部署即可使用. 监控数据类型丰富,提供多种富有表现力的图表,满足对数据可视化的需要,目前支持折线图.饼图.地理位置 ...

  8. 实战!最受欢迎的企业级开源监控系统 Zabbix + Prometheus !

    我们都知道监控系统的重要意义,但往往在监控系统的选择上犹豫不决.尤其Zabbix和Prometheus的使用者,认为自己使用的监控系统更好用,但无疑,脱离实际情况讨论哪一个更好都是没有任何意义的. 很 ...

  9. 监控系统 Prometheus 的说明

    一.Prometheus 是什么? ELK Stack 日志收集和检索平台想必大家应该比较熟悉,Elasticsearch + Filebeat + Logstash + Kibana. 而 Prom ...

最新文章

  1. 第1章统计学习方法概论之1.1统计学习
  2. SAP ABAP里数据库表的Storage Parameters从哪里来的
  3. 【赠书】快速入门自动机器学习!自动机器学习(AutoML):方法、系统与挑战 图书赠送!...
  4. 判断JavaScript对象为null或者属性为空
  5. UVa 1625 Color Length
  6. SAP Cloud for Customer和Hybris Commerce的session保护机制
  7. linux系统内核参数配置优化,Linux服务器内核参数优化
  8. CPU的高速缓存存储器知识整理
  9. 【OS学习笔记】十九 保护模式六:保户模式下操作系统内核如何加载用户程序并运行
  10. 07.MyBatis中的关联查询
  11. 软件公司多注重开发不注重管理
  12. Python(2.7.6) 迭代器
  13. SPSS制作三线表【SPSS 013期】
  14. python爬取微信公众号的几种方法_一种爬取微信公众号信息的方法与流程
  15. 用免费WiFi上网软件有什么好处
  16. 取之盈:微信电脑多开代码、电脑多开微信bat文件
  17. java面试100题(应届生必备)
  18. 系统动力学专拓考试重点总结
  19. IDEA 启动项目报错 Error running 'XXXApplication': No jdk for module 'XXX'
  20. mysql 判断质数_2020-09-20:如何判断一个数是质数?

热门文章

  1. windows下执行testng用例
  2. [AT2558]Many Moves
  3. Windows 10 使用问题
  4. FreeRTOS的内存管理
  5. 在64位机器上无法调用迅雷的问题
  6. PADS无模命令总结
  7. DP-桥接模式(Bridge Pattern)
  8. iis 5.0 不能运行 asp.net 的 原因
  9. (进阶)LeetCode(119)——杨辉三角 II(JavaScript)
  10. CentOs6.x yum源停止维护,安装yum源