Prometheus

Prometheus

什么是Prometheus?

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

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

有关 Prometheus 的更详细概述,请参阅 媒体部分链接的资源。

特征

普罗米修斯的主要特点是:

什么是指标?

通俗地说,指标是数字度量。时间序列意味着随时间记录更改。用户想要测量的内容因应用程序而异。对于Web服务器,它可能是请求时间,对于数据库,它可能是活动连接数或活动查询数等。

指标在理解应用程序以某种方式工作的原因方面起着重要作用。假设您正在运行一个 Web 应用程序,发现该应用程序很慢。您将需要一些信息来了解您的应用程序发生了什么。例如,当请求数很高时,应用程序可能会变慢。如果您有请求计数指标,则可以找出原因并增加处理负载的服务器数量。

组件

普罗米修斯生态系统由多个组件组成,其中许多组件是 自选:

大多数普罗米修斯组件都是用Go 编写的,使得 它们易于构建和部署为静态二进制文件。

架构

这张图说明了普罗米修斯的架构及其生态系统组成部分:

Prometheus architecture

Prometheus 直接从检测的作业中抓取指标,也可以通过 用于短期作业的中间推送网关。它存储所有刮擦的样品 在本地并对此数据运行规则以聚合和记录新时间 从现有数据中序列或生成警报。格拉法纳或 其他 API 使用者可用于可视化收集的数据。

什么时候适合?

普罗米修斯非常适合记录任何纯数字时间序列。它适合 以机器为中心的监控以及高动态监控 面向服务的体系结构。在微服务世界中,它支持 多维度数据收集和查询是特别的强项。

普罗米修斯专为可靠性而设计,成为您访问的系统 在中断期间,以便您快速诊断问题。每个普罗米修斯 服务器是独立的,不依赖于网络存储或其他远程服务。 当基础架构的其他部分损坏时,您可以依赖它,并且 您无需设置广泛的基础架构即可使用它。

什么时候不适合?

普罗米修斯重视可靠性。您可以随时查看统计信息 即使在故障条件下,也可了解您的系统。如果您需要 100% 准确性,例如对于按请求计费,普罗米修斯不是一个好的选择,因为 收集的数据可能不够详细和完整。在这样的一个 在这种情况下,您最好使用其他系统来收集和分析 数据用于计费,普罗米修斯用于其余监控。

其他

基本原理

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的查询语句,提供十分灵活的报警方式。

三大套件

Server 主要负责数据采集和存储,提供PromQL查询语言的支持。 Alertmanager 警告管理器,用来进行报警。 Push Gateway 支持临时性Job主动推送指标的中间网关。

安装 Prometheus Server

需要安装 golang, 下载github,可以从packagecloud.io下载RPM包。

创建 Prometheus Systemd 服务

启动 prometheus

web登录

要检查节点的状态,请导航到Status > Targets 要查看抓取的指标,请导航到 http://<server_IP>:9090/metrics

要检查内存统计信息,例如可用内存,输入 go_memstats_frees_total 并单击执行并在控制台选项卡上查看结果。 结果像一个楼梯的形状

Grafana

Grafana

Grafana是用于可视化大型测量数据的开源程序,它提供了强大和优雅的方式去创建、共享、浏览数据。 Dashboard中显示了你不同metric数据源中的数据。 Grafana最常用于因特网基础设施和应用分析,但在其他领域也有用到,比如:工业传感器、家庭自动化、过程控制等等。 Grafana支持热插拔控制面板和可扩展的数据源,目前已经支持Graphite、InfluxDB、OpenTSDB、Elasticsearch、Prometheus等。

安装 Grafana

下载github

Ubuntu 和 Debian

Red Hat、CentOS、RHEL 和 Fedora

独立 Linux 二进制文件

Grafana 后端在其配置文件中定义了许多配置选项(在 Linux 系统上通常位于/etc/grafana/grafana.ini)。 在此配置文件中,您可以更改默认管理员密码、http 端口、grafana 数据库(sqlite3、mysql、postgres)、身份验证选项(google、github、ldap、auth proxy)以及许多其他选项。

启动grafana

web登录

账号密码默认是 admin

左边齿轮 - Data Sources - Add data source - Prometheus Name: Prometheus URL: http://localhost:9090 Access: Server (default)

点击 Save & Test

切换到Dashboards标签 选择 Prometheus 2.0 Stats -> import

点击 Prometheus 2.0 Stats 可直接跳转到图像页面

重置密码

AlterManager

Pormetheus的警告由独立的两部分组成。

建立警告和通知的主要步骤:

PrometheusAlert 三种告警状态:Inactive、Pending、Firing

安装 AlterManager

下载github

创建 AlterManager Systemd 服务

启动alertmanager

node_exporter

node_exporter的作用是用于机器系统数据收集,Prometheus监控服务器CPU、内存、磁盘、I/O等信息,首先需要安装node_exporter。

安装 node_exporter

https://www.jianshu.com/p/7bec152d1a1f https://prometheus.io/docs/guides/node-exporter/ https://github.com/prometheus/node_exporter/releases/ https://github.com/prometheus/node_exporter/releases/download/v1.3.0/node_exporter-1.3.0.linux-amd64.tar.gz

创建Systemd服务

启动node_exporter

Node Exporter默认的抓取地址为: http://localhost:9100/metrics

配置 prometheus 抓取 Node Exporter 的数据

重启 Prometheus

访问Prometheus Web,在Status->Targets页面下,我们可以看到我们配置的两个Target,它们的State为UP。 检查Node Exporter,例如CPU,输入 node_cpu_seconds_total 并单击执行并在控制台选项卡上查看结果。

Grafana - 左边加号 - Import - Upload JSON file 添加node-exporter-server-metrics模块 https://grafana.com/grafana/dashboards/405

添加1-node-exporter-0-16-for-prometheus模块(linux监控模块如:CPU MEM 磁盘使用率等) https://grafana.com/grafana/dashboards/8919 此监控模板基于node_exporter 可以更好的展示多项基本监控项

kafka_exporter

https://github.com/danielqsj/kafka_exporter/ 下载 https://github.com/danielqsj/kafka_exporter/releases/download/v1.2.0/kafka_exporter-1.2.0.linux-amd64.tar.gz

安装 kafka_exporter

docker 方式安装 kafka-exporter

kafka Exporter默认的抓取地址为: http://localhost:9308/metrics

Grafana - 左边加号 - Import - Upload JSON file

其他

好看的模板

https://github.com/starsliao/Prometheus

安装 饼状图插件

直接安装

下载安装

均需重启

Prometheus针对nodes告警规则配置

常用监控面板

405: Node Exporter Server Metrics

3131: Kubernetes All Nodes

3146: Kubernetes Pods

8685: K8s Cluster Summary

10000: Cluster Monitoring for Kubernetes

https://github.com/starsliao/Prometheus

13105: 1 K8S for Prometheus Dashboard

8919: 1 Node Exporter for Prometheus Dashboard