>[info]**官网:**[https://prometheus.io/](https://prometheus.io/) **GitHub:**[https://github.com/prometheus](https://github.com/prometheus) [TOC] ## 一、介绍 ELK主要收集分析预警的是我们平台系统中各个服务的业务日志,一般通过日志组件(log4j 、log4j2 、logback)来收集并写入文本。但是对于系统本身以及一些应用软件的监控预警,这套方案显然是不合适的,这里推荐一下GPE三剑客;基本上主流的中间件和应用都能监控,并且大多数都是代码无入侵的。 Grafana、Prometheus、Exporter(一系列插件),自定义的三剑客,当然了为了使得整合监控程序更加流畅完整,我们加入了注册中心Consul做服务发现,实现动态添加服务,使用邮件、钉钉以及webhook实现异常告警。 * Prometheus:是一个开源的服务监控系统,它通过HTTP协议从远程的机器收集数据并存储在本地的时序数据库上。 * Grafana:是一个开箱即用的可视化工具,具有功能齐全的度量仪表盘和图形编辑器,有灵活丰富的图形化选项,可以混合多种风格,支持多个数据源特点。 * Exporter:是一系列的插件和外部进程,支持黑盒获取metrics(代码无入侵) ![](https://img.kancloud.cn/79/32/7932077d6686570fb995fa77606f3701_1454x934.png) >工作流程: >1. Exporter组件获取服务器或者系统软件的metrics >2. Prometheus拉取Exporter的metrics到本地存储 >3. Grafana配置Prometheus数据源获取其采集数据结合自定义面板实现监控大屏 >4. Grafana通过设置Alerting实现监控预警 * Prometheus(普罗米修斯)是由SoundCloud开发的开源监控报警系统和时序列数据库(TSDB)。Prometheus使用Go语言开发,是Google BorgMon监控系统的开源版本。 2016年由Google发起Linux基金会旗下的原生云基金会(Cloud Native Computing Foundation), 将Prometheus纳入其下第二大开源项目。 Prometheus目前在开源社区相当活跃。 Prometheus和Heapster(Heapster是K8S的一个子项目,用于获取集群的性能数据。)相比功能更完善、更全面。Prometheus性能也足够支撑上万台规模的集群。 * 与其他监控系统相比,Prometheus的主要特点是: * 多维度数据模型。 * 灵活的查询语言。 * 不依赖分布式存储,单个服务器节点是自主的。 * 通过基于HTTP的pull方式采集时序数据。 * 可以通过中间网关进行时序列数据推送。 * 通过服务发现或者静态配置来发现目标服务对象。 * 支持多种多样的图表和界面展示,比如Grafana等。 ## 二、Prometheus架构 ![](https://img.kancloud.cn/96/46/9646a00c84c30af8c25b960dc59bf02a_1351x811.png) ![](https://img.kancloud.cn/90/3e/903ea3074b12d059dfeac3ba3d094078_1426x801.png) * 它的服务过程是这样的Prometheus daemon负责定时去目标上抓取metrics(指标) 数据,每个抓取目标需要暴露一个http服务的接口给它定时抓取。 * Prometheus:支持通过配置文件、文本文件、zookeeper、Consul、DNS SRV lookup等方式指定抓取目标。支持很多方式的图表可视化,例如十分精美的Grafana,自带的Promdash,以及自身提供的模版引擎等等,还提供HTTP API的查询方式,自定义所需要的输出。 * Alertmanager:是独立于Prometheus的一个组件,可以支持Prometheus的查询语句,提供十分灵活的报警方式。 * PushGateway:这个组件是支持Client主动推送metrics到PushGateway,而Prometheus只是定时去Gateway上抓取数据。 * 大多数Prometheus组件都是用Go编写的,它们可以轻松地构建和部署为静态二进制文件。访问[prometheus.io](https://prometheus.io/)以获取完整的文档,示例和指南。 ## 三、基本原理 Prometheus的基本原理是通过HTTP协议周期性抓取被监控组件的状态,任意组件只要提供对应的HTTP接口就可以接入监控。不需要任何SDK或者其他的集成过程。这样做非常适合做虚拟化环境监控系统,比如VM、Docker、Kubernetes等。输出被监控组件信息的HTTP接口被叫做exporter 。目前互联网公司常用的组件大部分都有exporter可以直接使用,比如Varnish、Haproxy、Nginx、MySQL、Linux系统信息(包括磁盘、内存、CPU、网络等等)。 ## 四、服务过程 * Prometheus Daemon负责定时去目标上抓取metrics(指标)数据,每个抓取目标需要暴露一个http服务的接口给它定时抓取。Prometheus支持通过配置文件、文本文件、Zookeeper、Consul、DNS SRV Lookup等方式指定抓取目标。Prometheus采用PULL的方式进行监控,即服务器可以直接通过目标PULL数据或者间接地通过中间网关来Push数据。 * Prometheus在本地存储抓取的所有数据,并通过一定规则进行清理和整理数据,并把得到的结果存储到新的时间序列中。 * Prometheus通过PromQL和其他API可视化地展示收集的数据。Prometheus支持很多方式的图表可视化,例如Grafana、自带的Promdash以及自身提供的模版引擎等等。Prometheus还提供HTTP API的查询方式,自定义所需要的输出。 * PushGateway支持Client主动推送metrics到PushGateway,而Prometheus只是定时去Gateway上抓取数据。 * Alertmanager是独立于Prometheus的一个组件,可以支持Prometheus的查询语句,提供十分灵活的报警方式。