`
maosheng
  • 浏览: 565408 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

系统监控之Prometheus

阅读更多
三种主要监控方式:
1. Logging
2. Tracing
3. Metrics

MetricsLogging Tracing
CapExMediumLowHigh
OpExLowHighMedium
ReactionHighMediumLow
InvestigationLowMediumHigh


CapEx: the initial cost to start instrumenting and collecting the signals;
OpEx: the ongoing cost to run the supporting infrastructure;
Reaction: how good the system is at detecting and alerting on incidents;
Investigation: how much the system can help to triage and debug incidents.

DevOps理念:要提升必先测量

“if you can't measure it, you can't improve it”      --------Lord Kelvin


监控问题:

1.运维人员只专注系统监控(日志,负载度量),没有应用监控能力和上下文

2.开发人员只管实现功能,没有 DevOps 和度量意识

3.应用监控空白,对应用状态无感知,很多功能开发了无人用

4.业务对关键应用指标无感知,很多功能开发了无人用

监控四个黄金指标:

1. 延迟:服务请求所需耗时
例如 HTTP请求平均延迟

2.流量/吞吐: 衡量服务容量需求
例如 每秒处理HTTP请求数

3.错误:衡量错误发生的情况
例如 HTTP 500错误数

4.饱和度:衡量资源使用情况
例如 CPU/内存/磁盘使用量

Prometheus 概述

Prometheus (中文名:普罗米修斯)是由 SoundCloud 开发的开源监控报警系统和时序列数据库(TSDB)。自2012年起,许多公司及组织已经采用 Prometheus,并且该项目有着非常活跃的开发者和用户社区。现在已经成为一个独立的开源项目。Prometheus 在2016加入 CNCF ( Cloud Native Computing Foundation ), 作为在 kubernetes 之后的第二个由基金会主持的项目。Prometheus 的实现参考了Google内部的监控实现,与源自Google的Kubernetes结合起来非常合适。它针对大规模的集群环境设计了拉取式的数据采集方式,只需要在应用里面实现一个metrics接口,然后把这个接口告诉Prometheus就可以完成数据采集了。

Prometheus基本原理是通过HTTP协议周期性抓取被监控组件的状态,这样做的好处是任意组件只要提供HTTP接口就可以接入监控系统,不需要任何SDK或者其他的集成过程。

Prometheus应该是为数不多的适合Docker、Mesos、Kubernetes环境的监控系统之一。近几年随着k8s的流行,Prometheus成为了一个越来越流行的监控工具。

node-exporter组件负责收集节点上的metrics监控数据,并将数据推送给Prometheus, Prometheus负责存储这些数据,grafana将这些数据通过网页以图形的形式展现给用户。

作为新一代的监控框架,Prometheus 具有以下特点:

1> 多维数据模型(时序列数据由metric名和一组key/value组成)
2> 非常高效的存储,平均一个采样数据占~3.5bytes左右,320万的时间序列,每30秒采样,保持60天,消耗磁盘大概228G
3> 在多维度上灵活的查询语言( PromQL )
4> 不依赖分布式存储,单主节点工作
5> 通过基于HTTP的pull方式采集时序数据
6> 可以通过push gateway进行时序列数据推送(pushing)
7> 可以通过服务发现或者静态配置去获取要采集的目标服务器
8> 多种可视化图表及仪表盘支持

Prometheus 相关组件:

1) Prometheus server 主要负责数据采集和存储,定期从静态配置的 targets 或者服务发现(主要是DNS、consul、k8s、mesos等)的 targets 拉取数据,提供PromQL查询语言的支持
2) 客户端sdk,用来构造应用或 exporter 代码,官方提供的客户端类库有go、java、scala、python、ruby,其他还有很多第三方开发的类库,支持nodejs、php、erlang等
3) Push Gateway 支持 Job 主动推送指标的中间网关
4) exporters 支持其他数据源的指标导入到Prometheus,支持数据库、硬件、消息中间件、存储系统、http服务器、jmx等
5) alertmanager 是独立于Prometheus的一个组件,可以支持Prometheus的查询语句,提供十分灵活的报警方式。
6) 可视化的dashboard ,主要通过grafana来实现webui展示

Prometheus配置运行

Prometheus 也是通过定义配置文件,来给prometheus本身规定需要监控的项目和被监控节点,prometheus.yml配置文件:

global:
  scrape_interval:     15s
  evaluation_interval: 15s

rule_files:
  # - "first.rules"
  # - "second.rules"

scrape_configs:
  - job_name: prometheus
    static_configs:
      - targets: ['localhost:9090']
  - Job_name: ‘job_name’
    static_configs:
      -targets: [‘localhost:9100’,’192.168.1.180:9100’]

配置文件中配置的三个模块:global,rule_files,和scrape_configs

global 模块是prometheus的全局配置:

scrape_interval:表示 prometheus 抓取指标数据的频率,默认是15s,我们可以覆盖这个值
evaluation_interval:用来控制评估规则的频率,prometheus 使用规则产生新的时间序列数据或者产生警报

rule_files 模块制定了规则所在的位置,prometheus 可以根据这个配置加载规则,用于生成新的时间序列数据或者报警信息,当前我们没有配置任何规则。

scrape_configs模块 用于控制 prometheus 监控哪些资源。由于 prometheus 通过 HTTP 的方式来暴露的它本身的监控数据,prometheus 也能够监控本身的健康情况。在默认的配置里有一个单独的 job,叫做prometheus,它采集 prometheus 服务本身的时间序列数据。这个 job 包含了一个单独的、静态配置的目标:监听 localhost 上的9090端口。prometheus 默认会通过目标的/metrics路径采集 metrics。所以,默认的 job 通过 URL:http://localhost:9090/metrics采集 metrics。收集到的时间序列包含 prometheus 服务本身的状态和性能。如果我们还有其他的资源需要监控的话,直接配置在该模块下面就可以了。

Prometheus本身是一个以进程方式启动,之后以多进程和多线程实现监控数据收集、计算、查询、更新、存储的这样一个C/S模型运行模式。

#./prometheus --web.listen-address=0.0.0.0:9090 --web.read-timeout=5m --web.max-connection=10 --storage.tsdb.retention=15d  --storage.tsdb.path=/data/prometheus/  --query.max-concurrency=20 --query.timeout=3m

--web.read-timeout=5m         请求链接的最大等待时间
--web.max-connection          最大链接数
--storage.tsdb.retention=15d 数据保留期限的设置,企业中设置15天为宜
--storage.tsdb.path               数据存储路径
--query.max-concurrency     最大并发查询用户数量
--query.timeout                     查询timout设置时间   


Prometheus的数据模型

Prometheus从根本上所有的存储都是按时间序列去实现的,相同的metrics(指标名称) 和label(一个或多个标签) 组成一条时间序列,不同的label表示不同的时间序列。为了支持一些查询,有时还会临时产生一些时间序列存储。

metrics name&label指标名称和标签:

每条时间序列是由唯一的“指标名称”和一组”标签(key=value)”的形式组成。

指标名称:一般是给监测对像起一名字,例如http_requests_total这样,它有一些命名规则,可以包字母数字_之类的的。通常是以应用名称开头_监测对像_数值类型_单位这样。例如:push_total、userlogin_mysql_duration_seconds、app_memory_usage_bytes。

标签:就是对一条时间序列不同维度的识别了,例如一个http请求用的是POST还是GET,它的endpoint是什么,这时候就要用标签去标记了。最终形成的标识便是这样了:http_requests_total{method=”POST”,endpoint=”/api/tracks”}。

记住,针对http_requests_total这个metrics name无论是增加标签还是删除标签都会形成一条新的时间序列。

查询语句就可以跟据上面标签的组合来查询聚合结果了。

如果以传统数据库的理解来看这条语句,则可以考虑http_requests_total是表名,标签是字段,而timestamp是主键,还有一个float64字段是值了。(Prometheus里面所有值都是按float64存储)。

Prometheus metrics四种数据类型

1.Counter(计数器):
Counter用于累计值,例如记录请求次数、任务完成数、错误发生次数。一直增加,不会减少。重启进程后,会被重置。

例如:http_response_total{method=”GET”,endpoint=”/api/tracks”} 100,10秒后抓取http_response_total{method=”GET”,endpoint=”/api/tracks”} 100。

2.Gauge(仪表盘):
Gauge常规数值,用于反应该样本的当前状态,例如 温度变化、内存使用变化、磁盘使用率。可变大,可变小。重启进程后,会被重置。

例如:memory_usage_bytes{host=”master-01″} 100 < 抓取值、memory_usage_bytes{host=”master-01″} 30、memory_usage_bytes{host=”master-01″} 50、memory_usage_bytes{host=”master-01″} 80 < 抓取值。

3.Histogram(直方图):
Histogram(直方图)可以理解为柱状图的意思,常用于跟踪事件发生的规模,通过分桶(bucket)方式统计样本分布,例如:请求耗时、响应大小。它特别之处是可以对记录的内容进行分组,提供count和sum全部值的功能。

例如:{小于10=5次,小于20=1次,小于30=2次},count=7次,sum=7次的求和值。

4.Summary(摘要/汇总):
Summary根据样本统计出百分位,常用于跟踪事件发生的规模,例如:请求耗时、响应大小。同样提供 count 和 sum 全部值的功能。

例如:count=7次,sum=7次的值求值。

它提供一个quantiles的功能,可以按%比划分跟踪的结果。例如:quantile取值0.95,表示取采样值里面的95%数据。









分享到:
评论

相关推荐

    kubernetes部署监控系统prometheus和grafana(亲测可用)

    kubernetes部署监控系统prometheus和grafana(亲测可用) 参考资料:https://blog.csdn.net/qq_36963950/article/details/125698022

    深入浅出开源监控系统Prometheus

    通常一个监控系统主要包含采集(信息源:log、metrics)、上报(协议:http、tcp)、聚合、存储、可视化以及告警等等。其中采集上报主要是客户端的核心功能,一般有定期外围探测的(早期的Nagios、Zabbix)、AOP方式...

    Prometheus监控系统(训练营).pdf

    Prometheus监控系统(训练营).

    Grafana监控系统之Prometheus+Grafana监控系统搭建

    本文将深入探讨如何搭建和配置Grafana监控系统,重点是与Prometheus的集成。 **Grafana概述** Grafana是一个强大的可视化平台,允许用户创建、共享和展示来自多个数据源的实时仪表板。它提供了丰富的图表类型和...

    Prometheus监控系统.pdf

    总之,Prometheus监控系统因其高效的数据处理能力、灵活的查询语言、简便的服务发现和监控功能以及简洁的架构设计,在现代监控场景中扮演着越来越重要的角色,特别是在微服务和容器化技术快速发展的当下,Prometheus...

    应用程序监控方案(Prometheus)

    应用程序监控方案 Prometheus 是一个开源监控系统,前身是 SoundCloud 的警告工具包。该项目的开发人员和用户社区非常活跃,越来越多的开发人员和用户参与到该项目中。目前它是一个独立的开源项目,且不依赖与任何...

    prometheus监控.ppt

    分享Prometheus监控,讲讲入门安装,服务器监控,容器监控,k8s监控等等,有兴趣可以下载

    kubernetes部署监控系统prometheus和grafana

    Prometheus是一款时间序列数据库和监控系统,设计用于抓取、存储和查询各种应用和服务的指标数据。在Kubernetes中,Prometheus可以通过Service Discovery机制自动发现并监控新创建的Pods,收集如CPU使用率、内存使用...

    服务监控系统Prometheus.zip

    Prometheus 是一款强大的开源服务监控系统,用于收集、存储、警报和分析应用程序及基础设施的度量指标。它被广泛应用于微服务架构中,能够帮助开发者和运维人员深入理解系统的健康状况和性能。 1. 高维度数据模型:...

    Prometheus 监控

    Prometheus是一款开源的系统监控和报警工具,由SoundCloud公司于2012年创建,并逐渐发展成为云原生计算基金会(CNCF)的重要项目之一。Prometheus以其强大的时间序列数据库、灵活的查询语言以及丰富的生态而广受赞誉...

    Prometheus监控系统工具全家桶+课件pdf.zip

    《Prometheus监控系统工具全家桶全面解析》 在IT运维领域,监控系统是不可或缺的一环,它能够实时地反映系统的运行状态,及时发现并解决潜在问题。Prometheus作为一款流行的开源监控解决方案,因其强大的功能和灵活...

    prometheus+granfana企业级监控实战v5.pdf

    Prometheus 是一个开源的监控系统,提供了强大的监控和报警功能。它可以实时地监控系统的性能和状态,并提供了灵活的报警机制。Grafana 是一个开源的数据可视化平台,提供了丰富的图表和仪表盘功能,可以实时地监控...

    用Prometheus细化Nginx监控

    Prometheus,作为流行的开源监控系统和时间序列数据库,是实现这一目标的理想工具。本文将详细介绍如何利用Prometheus来细化Nginx的监控。 首先,我们要了解Prometheus的基本工作原理。Prometheus通过HTTP抓取目标...

    prometheus监控docker容器详细资料—超详细,超全面(带文档和相关软件包)

    - 监控Prometheus自身:确保监控系统本身也受到监控。 这个压缩包可能包含了Prometheus 2.35.0版本的安装包、配置示例、Docker容器监控的文档以及如何在Linux环境下部署和使用Prometheus的详细步骤。通过学习这些...

    Prometheus+Grafana+node+mysql+tomcat部署监控系统.docx

    Prometheus + Grafana+mysql_exporter + node_exporter + tomcat_exporter+jmx_exporter + nginx-vts-exporter+redis_exporter + alertmanager+《部署实时监控系统》 一、Prometheus介绍 3 二、Prometheus架构概览 ...

    Prometheus企业级监控平台.pptx

    公司内部prometheus监控平台分享ppt,其中包含常规项的监控实例,另外有go,python项目的埋点监控实例详解

    prometheus监控平台

    Prometheus是一款开源的系统监控和警报工具,它在IT行业中广泛用于收集、存储和分析时间序列数据。作为Google的Borgmon项目的后代,Prometheus由Uber开发并最终成为Cloud Native Computing Foundation(CNCF)的旗舰...

    Prometheus监控的搭建文档.docx

    Prometheus 是一个开源的监控系统,可以对业务进行埋点、应用监控和系统监控。其主要特点是简单易用、资源占用少、支持多种语言客户端等。下面是 Prometheus 的功能和架构介绍。 Prometheus 功能 Prometheus 可以...

Global site tag (gtag.js) - Google Analytics