Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix typo: change promethues to prometheus and so on #70

Open
wants to merge 1 commit into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@
* [Exporter是什么](./exporter/what-is-prometheus-exporter.md)
* [常用Exporter](./exporter/commonly-eporter-usage.md)
* [容器监控:cAdvisor](./exporter/use-prometheus-monitor-container.md)
* [监控MySQL运行状态:MySQLD Exporter](./exporter/use-promethues-monitor-mysql.md)
* [监控MySQL运行状态:MySQLD Exporter](./exporter/use-prometheus-monitor-mysql.md)
* [网络探测:Blackbox Exporter](./exporter/install_blackbox_exporter.md)
* [使用Java自定义Exporter](./exporter/custom_exporter_with_java.md)
* [使用Client Java构建Exporter程序](./exporter/client_library_java.md)
Expand Down
4 changes: 2 additions & 2 deletions REFERENCES.md
Original file line number Diff line number Diff line change
Expand Up @@ -24,10 +24,10 @@
* https://jaxenter.com/prometheus-product-devops-mindset-130860.html
* https://www.slideshare.net/brianbrazil/so-you-want-to-write-an-exporter

### PromSQL
### PromQL

* https://www.youtube.com/watch?v=lrfTpnzq3Kw

### Exporters:
### Exporters

* https://blog.csdn.net/zhaowenbo168/article/details/53196063
2 changes: 1 addition & 1 deletion SUMMARY.md
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@
* [Exporter是什么](./exporter/what-is-prometheus-exporter.md)
* [常用Exporter](./exporter/commonly-eporter-usage.md)
* [容器监控:cAdvisor](./exporter/use-prometheus-monitor-container.md)
* [监控MySQL运行状态:MySQLD Exporter](./exporter/use-promethues-monitor-mysql.md)
* [监控MySQL运行状态:MySQLD Exporter](./exporter/use-prometheus-monitor-mysql.md)
* [网络探测:Blackbox Exporter](./exporter/install_blackbox_exporter.md)
* [使用Java自定义Exporter](./exporter/custom_exporter_with_java.md)
* [使用Client Java构建Exporter程序](./exporter/client_library_java.md)
Expand Down
2 changes: 1 addition & 1 deletion alert/prometheus-alert-rule.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# 自定义Prometheus告警规则

Prometheus中的告警规则允许你基于PromQL表达式定义告警触发条件,Prometheus后端对这些触发规则进行周期性计算,当满足触发条件后则会触发告警通知。默认情况下,用户可以通过Prometheus的Web界面查看这些告警规则以及告警的触发状态。当Promthues与Alertmanager关联之后,可以将告警发送到外部服务如Alertmanager中并通过Alertmanager可以对这些告警进行进一步的处理。
Prometheus中的告警规则允许你基于PromQL表达式定义告警触发条件,Prometheus后端对这些触发规则进行周期性计算,当满足触发条件后则会触发告警通知。默认情况下,用户可以通过Prometheus的Web界面查看这些告警规则以及告警的触发状态。当Prometheus与Alertmanager关联之后,可以将告警发送到外部服务如Alertmanager中并通过Alertmanager可以对这些告警进行进一步的处理。

## 定义告警规则

Expand Down
2 changes: 1 addition & 1 deletion exporter/SUMMARY.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
# 小结

Prometheus负责数据的统一收集并且提供统一的查询接口PromQL,而所有监控数据的产生则是由Exporter来进行实现,对于任何能够提供Promethues标准的监控样本的程序都可以称为Exporter。Exporter可以是一个单独的为了采集特定数据而构建的应用程序,也可以直接内置于特定的系统当中。
Prometheus负责数据的统一收集并且提供统一的查询接口PromQL,而所有监控数据的产生则是由Exporter来进行实现,对于任何能够提供Prometheus标准的监控样本的程序都可以称为Exporter。Exporter可以是一个单独的为了采集特定数据而构建的应用程序,也可以直接内置于特定的系统当中。
24 changes: 12 additions & 12 deletions exporter/what-is-prometheus-exporter.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,21 +12,21 @@

Prometheus社区提供了丰富的Exporter实现,涵盖了从基础设施,中间件以及网络等各个方面的监控功能。这些Exporter可以实现大部分通用的监控需求。下表列举一些社区中常用的Exporter:

| 范围 | 常用Exporter |
|------ |-------------|
| 数据库 | MySQL Exporter, Redis Exporter, MongoDB Exporter, MSSQL Exporter等|
| 硬件 | Apcupsd Exporter,IoT Edison Exporter, IPMI Exporter, Node Exporter等 |
| 消息队列| Beanstalkd Exporter, Kafka Exporter, NSQ Exporter, RabbitMQ Exporter等 |
| 存储| Ceph Exporter, Gluster Exporter, HDFS Exporter, ScaleIO Exporter等|
| HTTP服务 | Apache Exporter, HAProxy Exporter, Nginx Exporter等|
| API服务| AWS ECS Exporter, Docker Cloud Exporter, Docker Hub Exporter, GitHub Exporter等 |
| 日志 | Fluentd Exporter, Grok Exporter等 |
| 监控系统 | Collectd Exporter, Graphite Exporter, InfluxDB Exporter, Nagios Exporter, SNMP Exporter等 |
| 其它| Blockbox Exporter, JIRA Exporter, Jenkins Exporter, Confluence Exporter等|
| 范围 | 常用Exporter |
| -------- | ----------------------------------------------------------------------------------------- |
| 数据库 | MySQL Exporter, Redis Exporter, MongoDB Exporter, MSSQL Exporter等 |
| 硬件 | Apcupsd Exporter,IoT Edison Exporter, IPMI Exporter, Node Exporter等 |
| 消息队列 | Beanstalkd Exporter, Kafka Exporter, NSQ Exporter, RabbitMQ Exporter等 |
| 存储 | Ceph Exporter, Gluster Exporter, HDFS Exporter, ScaleIO Exporter等 |
| HTTP服务 | Apache Exporter, HAProxy Exporter, Nginx Exporter等 |
| API服务 | AWS ECS Exporter, Docker Cloud Exporter, Docker Hub Exporter, GitHub Exporter等 |
| 日志 | Fluentd Exporter, Grok Exporter等 |
| 监控系统 | Collectd Exporter, Graphite Exporter, InfluxDB Exporter, Nagios Exporter, SNMP Exporter等 |
| 其它 | Blockbox Exporter, JIRA Exporter, Jenkins Exporter, Confluence Exporter等 |

* 用户自定义的

除了直接使用社区提供的Exporter程序以外,用户还可以基于Prometheus提供的Client Library创建自己的Exporter程序,目前Promthues社区官方提供了对以下编程语言的支持:Go、Java/Scala、Python、Ruby。同时还有第三方实现的如:Bash、C++、Common Lisp、Erlang,、Haskeel、Lua、Node.js、PHP、Rust等。
除了直接使用社区提供的Exporter程序以外,用户还可以基于Prometheus提供的Client Library创建自己的Exporter程序,目前Prometheus社区官方提供了对以下编程语言的支持:Go、Java/Scala、Python、Ruby。同时还有第三方实现的如:Bash、C++、Common Lisp、Erlang,、Haskeel、Lua、Node.js、PHP、Rust等。

## Exporter的运行方式

Expand Down
30 changes: 15 additions & 15 deletions grafana/templating.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
1 - (avg(irate(node_cpu{mode='idle'}[5m])) without (cpu))
```

该表达式会返回当前Promthues中存储的所有时间序列,每一台主机都会有一条单独的曲线用于体现其CPU使用率的变化情况:
该表达式会返回当前Prometheus中存储的所有时间序列,每一台主机都会有一条单独的曲线用于体现其CPU使用率的变化情况:

![主机CPU使用率](./static/grafana_templating_variables_example.png)

Expand Down Expand Up @@ -34,13 +34,13 @@

用户需要指定变量的名称,后续用户就可以通过$variable_name的形式引用该变量。Grafana目前支持6种不同的变量类型,而能和Prometheus一起工作的主要包含以下5种类型:

|类型|工作方式|
|-|--|
|Query|允许用户通过Datasource查询表达式的返回值动态生成变量的可选值|
|Interval|该变量代表时间跨度,通过Interval类型的变量,可以动态改变PromQL区间向量表达式中的时间范围。如rate(node_cpu[2m])|
|Datasource|允许用户动态切换当前Dashboard的数据源,特别适用于同一个Dashboard展示多个数据源数据的情况|
|Custom|用户直接通过手动的方式,定义变量的可选值|
|Constant|常量,在导入Dashboard时,会要求用户设置该常量的值|
| 类型 | 工作方式 |
| ---------- | -------------------------------------------------------------------------------------------------------------- |
| Query | 允许用户通过Datasource查询表达式的返回值动态生成变量的可选值 |
| Interval | 该变量代表时间跨度,通过Interval类型的变量,可以动态改变PromQL区间向量表达式中的时间范围。如rate(node_cpu[2m]) |
| Datasource | 允许用户动态切换当前Dashboard的数据源,特别适用于同一个Dashboard展示多个数据源数据的情况 |
| Custom | 用户直接通过手动的方式,定义变量的可选值 |
| Constant | 常量,在导入Dashboard时,会要求用户设置该常量的值 |

Label属性用于指定界面中变量的显示名称,Hide属性则用于指定在渲染界面时是否隐藏该变量的下拉框。

Expand Down Expand Up @@ -74,12 +74,12 @@ localhost:9100

使用Query类型的变量能够根据允许用户能够根据时间序列的特征维度对数据进行过滤。在定义Query类型变量时,除了使用PromQL查询时间序列以过滤标签的方式以外,Grafana还提供了几个有用的函数:

|函数|作用|
|--|---|
|label_values(label)|返回Promthues所有监控指标中,标签名为label的所有可选值|
|label_values(metric, label)|返回Promthues所有监控指标metric中,标签名为label的所有可选值|
|metrics(metric)|返回所有指标名称满足metric定义正则表达式的指标名称|
|query_result(query)|返回prometheus查询语句的查询结果|
| 函数 | 作用 |
| --------------------------- | ------------------------------------------------------------- |
| label_values(label) | 返回Prometheus所有监控指标中,标签名为label的所有可选值 |
| label_values(metric, label) | 返回Prometheus所有监控指标metric中,标签名为label的所有可选值 |
| metrics(metric) | 返回所有指标名称满足metric定义正则表达式的指标名称 |
| query_result(query) | 返回prometheus查询语句的查询结果 |

例如,当需要监控Prometheus所有采集任务的状态时,可以使用如下方式,获取当前所有采集任务的名称:

Expand Down Expand Up @@ -112,7 +112,7 @@ regex:/.*node="(.*?)".*/

![使用变量获取当前所有可选任务](./static/grafana_templating_repeat_var.png)

通过使用label_values函数,获取到当前Promthues监控指标up中所有可选的job标签的值:
通过使用label_values函数,获取到当前Prometheus监控指标up中所有可选的job标签的值:

```
label_values(up, job)
Expand Down
2 changes: 1 addition & 1 deletion grafana/use_singlestat_panel.md
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ node_load1{instance="localhost:9100"}

如果希望能够显示当前时间序列的样本值变化情况,则可以启用Spark lines配置。启用之后,Singlestat面板中除了会显示当前的最新样本值以外,也会同时将时间序列中的数据已趋势图的形式进行展示。

除了通过数字大小反应当前状态以外,在某些场景下我们可能更关心的是这些数字表示的意义。例如,在Promthues监控服务的健康状态时,在样本数据中会通过0表示不健康,1表示健康。 但是如果直接将0或1显示在面板中,那么可视化效果将缺乏一定的可读性。
除了通过数字大小反应当前状态以外,在某些场景下我们可能更关心的是这些数字表示的意义。例如,在Prometheus监控服务的健康状态时,在样本数据中会通过0表示不健康,1表示健康。 但是如果直接将0或1显示在面板中,那么可视化效果将缺乏一定的可读性。

为了提升数字的可读性,可以在Singlestat Panel中可以通过**Value Mappings**定义值的映射关系。Siglesta支持值映射(value to text)和区间映射(range to text)两种方式。 如下所示:

Expand Down
4 changes: 2 additions & 2 deletions ha/READMD.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,11 @@

Prometheus内置了一个基于本地存储的时间序列数据库。在Prometheus设计上,使用本地存储可以降低Prometheus部署和管理的复杂度同时减少高可用(HA)带来的复杂性。 在默认情况下,用户只需要部署多套Prometheus,采集相同的Targets即可实现基本的HA。同时由于Promethus高效的数据处理能力,单个Prometheus Server基本上能够应对大部分用户监控规模的需求。

当然本地存储也带来了一些不好的地方,首先就是数据持久化的问题,特别是在像Kubernetes这样的动态集群环境下,如果Promthues的实例被重新调度,那所有历史监控数据都会丢失。 其次本地存储也意味着Prometheus不适合保存大量历史数据(一般Prometheus推荐只保留几周或者几个月的数据)。最后本地存储也导致Prometheus无法进行弹性扩展。为了适应这方面的需求,Prometheus提供了remote_write和remote_read的特性,支持将数据存储到远端和从远端读取数据。通过将监控与数据分离,Prometheus能够更好地进行弹性扩展。
当然本地存储也带来了一些不好的地方,首先就是数据持久化的问题,特别是在像Kubernetes这样的动态集群环境下,如果Prometheus的实例被重新调度,那所有历史监控数据都会丢失。 其次本地存储也意味着Prometheus不适合保存大量历史数据(一般Prometheus推荐只保留几周或者几个月的数据)。最后本地存储也导致Prometheus无法进行弹性扩展。为了适应这方面的需求,Prometheus提供了remote_write和remote_read的特性,支持将数据存储到远端和从远端读取数据。通过将监控与数据分离,Prometheus能够更好地进行弹性扩展。

除了本地存储方面的问题,由于Prometheus基于Pull模型,当有大量的Target需要采样本时,单一Prometheus实例在数据抓取时可能会出现一些性能问题,联邦集群的特性可以让Prometheus将样本采集任务划分到不同的Prometheus实例中,并且通过一个统一的中心节点进行聚合,从而可以使Prometheuse可以根据规模进行扩展。

除了讨论Prometheus自身的高可用,Alertmanager作为Promthues体系中的告警处理中心,本章的最后部分会讨论如何实现Alertmanager的高可用部署。
除了讨论Prometheus自身的高可用,Alertmanager作为Prometheus体系中的告警处理中心,本章的最后部分会讨论如何实现Alertmanager的高可用部署。

本章的主要内容:
* Prometheus本地存储机制
Expand Down
2 changes: 1 addition & 1 deletion ha/SUMMARY.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
# 小结

Prometheus的简单性贯穿于整个Prometheus的使用过程中,无论是单机部署还是集群化部署,简单性一致是Prometheus设计的基本原则。这本章中,我们系统学习了如果实现Prometheus下各个中间的高可用部署方式,同时给出了集中常用的高可用方案,读者可以根据自己的实际需求来选择如何部署自己的Promethues集群
Prometheus的简单性贯穿于整个Prometheus的使用过程中,无论是单机部署还是集群化部署,简单性一致是Prometheus设计的基本原则。这本章中,我们系统学习了如果实现Prometheus下各个中间的高可用部署方式,同时给出了集中常用的高可用方案,读者可以根据自己的实际需求来选择如何部署自己的Prometheus集群
16 changes: 8 additions & 8 deletions ha/alertmanager-high-availability.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@

![Alertmanager成为单点](./static/prom-ha-with-single-am.png)

为了提升Promthues的服务可用性,通常用户会部署两个或者两个以上的Promthus Server,它们具有完全相同的配置包括Job配置,以及告警配置等。当某一个Prometheus Server发生故障后可以确保Promthues持续可用
为了提升Prometheus的服务可用性,通常用户会部署两个或者两个以上的Prometheus Server,它们具有完全相同的配置包括Job配置,以及告警配置等。当某一个Prometheus Server发生故障后可以确保Prometheus持续可用

同时基于Alertmanager的告警分组机制即使不同的Prometheus Sever分别发送相同的告警给Alertmanager,Alertmanager也可以自动将这些告警合并为一个通知向receiver发送。

Expand Down Expand Up @@ -44,7 +44,7 @@ Gossip是分布式系统中被广泛使用的协议,用于实现分布式节
* Silence设置同步:Alertmanager启动阶段基于Pull-based从集群其它节点同步Silence状态,当有新的Silence产生时使用Push-based方式在集群中传播Gossip信息。
* 通知发送状态同步:告警通知发送完成后,基于Push-based同步告警发送状态。Wait阶段可以确保集群状态一致。

Alertmanager基于Gossip实现的集群机制虽然不能保证所有实例上的数据时刻保持一致,但是实现了CAP理论中的AP系统,即可用性和分区容错性。同时对于Prometheus Server而言保持了配置了简单性,Promthues Server之间不需要任何的状态同步。
Alertmanager基于Gossip实现的集群机制虽然不能保证所有实例上的数据时刻保持一致,但是实现了CAP理论中的AP系统,即可用性和分区容错性。同时对于Prometheus Server而言保持了配置了简单性,Prometheus Server之间不需要任何的状态同步。

## 搭建本地集群环境

Expand Down Expand Up @@ -201,7 +201,7 @@ curl -XPOST -d"$alerts1" http://localhost:9095/api/v1/alerts

### 多实例Prometheus与Alertmanager集群

由于Gossip机制的实现,在Promthues和Alertmanager实例之间不要使用任何的负载均衡,需要确保Promthues将告警发送到所有的Alertmanager实例中
由于Gossip机制的实现,在Prometheus和Alertmanager实例之间不要使用任何的负载均衡,需要确保Prometheus将告警发送到所有的Alertmanager实例中

```
alerting:
Expand All @@ -213,7 +213,7 @@ alerting:
- 127.0.0.1:9095
```

创建Promthues集群配置文件/etc/prometheus/prometheus-ha.yml,完整内容如下:
创建Prometheus集群配置文件/etc/prometheus/prometheus-ha.yml,完整内容如下:

```
global:
Expand Down Expand Up @@ -265,9 +265,9 @@ groups:

本示例部署结构如下所示:

![Promthues与Alertmanager HA部署结构](./static/promethues-alertmanager-ha.png)
![Prometheus与Alertmanager HA部署结构](./static/prometheus-alertmanager-ha.png)

创建prometheus.procfile文件,创建两个Promthues节点,分别监听9090和9091端口:
创建prometheus.procfile文件,创建两个Prometheus节点,分别监听9090和9091端口:

```
p1: prometheus --config.file=/etc/prometheus/prometheus-ha.yml --storage.tsdb.path=/data/prometheus/ --web.listen-address="127.0.0.1:9090"
Expand All @@ -276,13 +276,13 @@ p2: prometheus --config.file=/etc/prometheus/prometheus-ha.yml --storage.tsdb.pa
node_exporter: node_exporter -web.listen-address="0.0.0.0:9100"
```

使用goreman启动多节点Promthues
使用goreman启动多节点Prometheus

```
goreman -f prometheus.procfile -p 8556 start
```

Promthues启动完成后,手动拉高系统CPU使用率:
Prometheus启动完成后,手动拉高系统CPU使用率:

```
cat /dev/zero>/dev/null
Expand Down
Loading