zoukankan      html  css  js  c++  java
  • 什么是prometheus?

      导航:这里主要是列出一个prometheus一些系统的学习过程,最后按照章节顺序查看,由于写作该文档经历了不同时期,所以在文中有时出现

    的云环境不统一,但是学习具体使用方法即可,在最后的篇章,有一个完整的腾讯云的实战案例。

      1.什么是prometheus?

      2.Prometheus安装

      3.Prometheus的Exporter详解

      4.Prometheus的PromQL

      5.Prometheus告警处理

      6.Prometheus的集群与高可用

      7.Prometheus服务发现

      8.kube-state-metrics 和 metrics-server

      9.监控kubernetes集群的方式

      10.prometheus operator

      11.Prometheus实战之联邦+高可用+持久

      12.Prometheus实战之配置汇总

      13.Grafana简单用法

      14.Grafana SQL汇总

      15.prometheus SQL汇总

      参考:

      https://prometheus.io/docs/prometheus/latest/configuration/configuration/#kubernetes_sd_config

      https://yunlzheng.gitbook.io/prometheus-book/part-iii-prometheus-shi-zhan/readmd/use-prometheus-monitor-kubernetes

      https://www.bookstack.cn/read/prometheus_practice/introduction-README.md

      https://www.kancloud.cn/huyipow/prometheus/521184

      https://www.qikqiak.com/k8s-book/docs/

     

    1.什么是Prometheus

      Prometheus是由 SoundCloud 开源监控告警解决方案,从 2012 年开始编写代码,再到 2015 年 github 上开源以来,已经吸引了 9k+ 关注,以及很多大公司的使用;2016 年 Prometheus 成为继 k8s 后,第二名 CNCF(Cloud Native Computing Foundation) 成员。

      作为新一代开源解决方案,很多理念与 Google SRE 运维之道不谋而合。

     

    1.1 主要功能

    • 多维数据模型(时序由 metric 名字和 k/v 的 labels 构成)。
    • 灵活的查询语句(PromQL)。
    • 无依赖存储,支持 local 和 remote 不同模型。
    • 采用 http 协议,使用 pull 模式,拉取数据,简单易懂。
    • 监控目标,可以采用服务发现或静态配置的方式。
    • 支持多种统计数据模型,图形化友好。

     

    1.2 核心组件

      Prometheus Server

      Prometheus Server是Prometheus组件中的核心部分,负责实现对监控数据的获取,存储以及查询。 Prometheus Server可以通过静态配置管理监控目标,也可以配合使用Service Discovery的方式动态管理监控目标,并从这些监控目标中获取数据。其次Prometheus Server需要对采集到的监控数据进行存储,Prometheus Server本身就是一个时序数据库,将采集到的监控数据按照时间序列的方式存储在本地磁盘当中。最后Prometheus Server对外提供了自定义的PromQL语言,实现对数据的查询以及分析。

      Prometheus Server内置的Express Browser UI,通过这个UI可以直接通过PromQL实现数据的查询以及可视化。

      Prometheus Server的联邦集群能力可以使其从其他的Prometheus Server实例中获取数据,因此在大规模监控的情况下,可以通过联邦集群以及功能分区的方式对Prometheus Server进行扩展。

     

      Exporters

      Exporter将监控数据采集的端点通过HTTP服务的形式暴露给Prometheus Server,Prometheus Server通过访问该Exporter提供的Endpoint端点,即可获取到需要采集的监控数据。

      一般来说可以将Exporter分为2类:

      直接采集:这一类Exporter直接内置了对Prometheus监控的支持,比如cAdvisor,Kubernetes,Etcd,Gokit等,都直接内置了用于向Prometheus暴露监控数据的端点。

      间接采集:间接采集,原有监控目标并不直接支持Prometheus,因此我们需要通过Prometheus提供的Client Library编写该监控目标的监控采集程序。例如: Mysql Exporter,JMX Exporter,Consul Exporter等。

     

      AlertManager

      在Prometheus Server中支持基于PromQL创建告警规则,如果满足PromQL定义的规则,则会产生一条告警,而告警的后续处理流程则由AlertManager进行管理。在AlertManager中我们可以与邮件,Slack等等内置的通知方式进行集成,也可以通过Webhook自定义告警处理方式。AlertManager即Prometheus体系中的告警处理中心。

     

      PushGateway

      由于Prometheus数据采集基于Pull模型进行设计,因此在网络环境的配置上必须要让Prometheus Server能够直接与Exporter进行通信。 当这种网络需求无法直接满足时,就可以利用PushGateway来进行中转。可以通过PushGateway将内部网络的监控数据主动Push到Gateway当中。而Prometheus Server则可以采用同样Pull的方式从PushGateway中获取到监控数据。

     

    1.3 基础架构图

      从这个架构图,也可以看出 Prometheus 的主要模块包含, Server, Exporters, Pushgateway, PromQL, Alertmanager, WebUI 等。

      它大致使用逻辑是这样:

    1.Prometheus server 定期从静态配置的 targets 或者服务发现的 targets 拉取数据。

    2.当新拉取的数据大于配置内存缓存区的时候,Prometheus 会将数据持久化到磁盘(如果使用 remote storage 将持久化到云端)。

    3.Prometheus 可以配置 rules,然后定时查询数据,当条件触发的时候,会将 alert 推送到配置的 Alertmanager。

    4.Alertmanager 收到警告的时候,可以根据配置,聚合,去重,降噪,最后发送警告。

    5.可以使用 API, Prometheus Console 或者 Grafana 查询和聚合数据。

      注意

    • Prometheus 的数据是基于时序的 float64 的值,如果你的数据值有更多类型,无法满足。
    • Prometheus 不适合做审计计费,因为它的数据是按一定时间采集的,关注的更多是系统的运行瞬时状态以及趋势,即使有少量数据没有采集也能容忍,但是审计计费需要记录每个请求,并且数据长期存储,这个 Prometheus 无法满足,可能需要采用专门的审计系统。

     

    2.为什么选择 Prometheus

      在前言中,简单介绍了我们选择 Prometheus 的理由,以及使用后给我们带来的好处。

      在这里主要和其他监控方案对比,方便大家更好的了解 Prometheus。

     

    2.1 Prometheus vs Zabbix

    • Zabbix 使用的是 C 和 PHP, Prometheus 使用 Golang, 整体而言 Prometheus 运行速度更快一点。
    • Zabbix 属于传统主机监控,主要用于物理主机,交换机,网络等监控,Prometheus 不仅适用主机监控,还适用于 Cloud, SaaS, Openstack,Container 监控。
    • Zabbix 在传统主机监控方面,有更丰富的插件。
    • Zabbix 可以在 WebGui 中配置很多事情,但是 Prometheus 需要手动修改文件配置。

     

    2.2 Prometheus vs Graphite

    • Graphite功能较少,它专注于两件事,存储时序数据, 可视化数据,其他功能需要安装相关插件,而 Prometheus 属于一站式,提供告警和趋势分析的常见功能,它提供更强的数据存储和查询能力。
    • 在水平扩展方案以及数据存储周期上,Graphite 做的更好。

     

    2.3 Prometheus vs InfluxDB

    • InfluxDB是一个开源的时序数据库,主要用于存储数据,如果想搭建监控告警系统, 需要依赖其他系统。
    • InfluxDB在存储水平扩展以及高可用方面做的更好, 毕竟核心是数据库。

     

    2.4 Prometheus vs OpenTSDB

    • OpenTSDB是一个分布式时序数据库,它依赖 Hadoop 和 HBase,能存储更长久数据, 如果你系统已经运行了 Hadoop 和 HBase, 它是个不错的选择。
    • 如果想搭建监控告警系统,OpenTSDB 需要依赖其他系统。

     

    2.5 Prometheus vs Nagios

    • Nagios数据不支持自定义 Labels, 不支持查询,告警也不支持去噪,分组, 没有数据存储,如果想查询历史状态,需要安装插件。
    • Nagios 是上世纪 90 年代的监控系统,比较适合小集群或静态系统的监控,显然 Nagios 太古老了,很多特性都没有,相比之下Prometheus 要优秀很多。

     

    2.6 Prometheus vs Sensu

    • Sensu广义上讲是 Nagios 的升级版本,它解决了很多 Nagios 的问题,如果你对 Nagios 很熟悉,使用 Sensu 是个不错的选择。
    • Sensu 依赖 RabbitMQ 和 Redis,数据存储上扩展性更好。

     

    2.7 总结

    • Prometheus属于一站式监控告警平台,依赖少,功能齐全。
    • Prometheus支持对云或容器的监控,其他系统主要对主机监控。
    • Prometheus数据查询语句表现力更强大,内置更强大的统计函数。
    • Prometheus在数据存储扩展性以及持久性上没有 InfluxDB,OpenTSDB,Sensu 好。

     

    作者:小家电维修

    相见有时,后会无期。

  • 相关阅读:
    解决Tomcat请求中文乱码的问题
    Bootstrap 兼容 IE
    Spring+MyBatis多数据源配置实现
    年度总结与计划
    AJAX 提交表单以及文件上传
    移动端Web开发调试工具:Chrome DevTools
    SpringMVC 之 @ResponseBody 和 @RequestBody
    goland快键键防忘
    MySQL日志文件影响数据库的各种类型活动
    何为云计算
  • 原文地址:https://www.cnblogs.com/lizexiong/p/15576632.html
Copyright © 2011-2022 走看看