Prometheus 监控系统说明

参考:
https://prometheus.io/docs/introduction/overview/
https://github.com/prometheus/prometheus
https://www.prometheus.wang/

Prometheus 简介

Prometheus 是一个开源系统,监控和警报工具包最初构建于 SoundCloud。 自 2012 年成立以来,许多公司和组织都采用了 Prometheus,该项目具有非常活跃的开发者和用户社区。它现在是一个独立的开源项目并独立于任何公司进行维护。 为了强调这一点,并澄清项目的治理结构,Prometheus 2016年加入了 云原生计算基金会,作为继 Kubernetes 之后的第二个托管项目。

Prometheus 将其指标收集并存储为时间序列数据,即指标信息与记录的时间戳一起存储,以及称为标签的可选键值对。

prometheus的主要特点是:

一个多维 数据模型, 具有由指标名称和键/值对标识的时间序列数据
PromQL,一种 灵活的查询语言 利用这个维度
不依赖分布式存储; 单个服务器节点是自治的
时间序列收集通过 HTTP 上的拉模型发生
推送时间序列 通过中间网关支持
通过服务发现或静态配置发现目标
多种图形和仪表板支持模式

这张图说明了 Prometheus 的架构和一些 其生态系统组成部分:

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中获取到监控数据。

安装说明

prometheus-operator

参考:https://github.com/prometheus-operator/prometheus-operator

项目状态:beta,并非所有计划的特性都已完成。API、规范、状态和其他面向用户的对象可能会改变,但是以向后兼容的方式。

注:项目以前被称为coreos/prometheus-operator。

为了在Kubernetes能够方便的管理和部署Prometheus,我们使用ConfigMap管理Prometheus配置文件。每次对Prometheus配置文件进行升级时,,我们需要手动移除已经运行的Pod实例,从而让Kubernetes可以使用最新的配置文件创建Prometheus。 而如果当应用实例的数量更多时,通过手动的方式部署和升级Prometheus过程繁琐并且效率低下。

从本质上来讲Prometheus属于是典型的有状态应用,而其又包含了一些自身特有的运维管理和配置管理方式。而这些都无法通过Kubernetes原生提供的应用管理概念实现自动化。为了简化这类应用程序的管理复杂度,CoreOS率先引入了Operator的概念,并且首先推出了针对在Kubernetes下运行和管理Etcd的Etcd Operator。并随后推出了Prometheus Operator。

Prometheus Operator架构:

Prometheus Operator目前提供的️4类资源:

  • Prometheus:声明式创建和管理Prometheus Server实例;
  • ServiceMonitor:负责声明式的管理监控配置;
  • PrometheusRule:负责声明式的管理告警配置;
  • Alertmanager:声明式的创建和管理Alertmanager实例。

kube-prometheus

参考:https://github.com/prometheus-operator/kube-prometheus

kube-prometheus提供了基于Prometheus和Prometheus Operator的完整集群监控堆栈的示例配置。这包括部署多个Prometheus和Alertmanager实例、用于收集节点指标的指标导出器(如node_exporters)、将Prometheus链接到各种指标端点的抓取目标配置,以及用于通知集群中潜在问题的示例警报规则。

常用Exporter说明

监控Node

参考:https://github.com/prometheus/node_exporter

监控网络

参考:
https://github.com/prometheus/blackbox_exporter
https://github.com/prometheus/snmp_exporter

监控MySQL

参考:https://github.com/prometheus/mysqld_exporter

监控Haproxy

参考:https://github.com/prometheus/haproxy_exporter

监控Memcached

参考:https://github.com/prometheus/memcached_exporter

监控JVM

参考:https://github.com/prometheus/jmx_exporter

监控Elasticsearch

参考:https://github.com/prometheus-community/elasticsearch_exporter

监控PostgreSQL

参考:https://github.com/prometheus-community/postgres_exporter

监控MongoDB

参考:
https://github.com/dcu/mongodb_exporter
https://github.com/percona/mongodb_exporter
https://github.com/percona/grafana-dashboards

监控K8s

下表中,梳理了监控Kubernetes集群监控的各个维度以及策略:

posted @ 2021-08-16 13:32  Varden  阅读(208)  评论(0编辑  收藏  举报