python后端砖头

Prometheus

2022-02-28  本文已影响0人  想成为大师的学徒小纪

一、简介

Prometheus是一个开源系统监控和报警工具包,具有活跃的生态系统。是一个多维数据模型,其中的时间序列数据由指标名称和键/值对识别。它不依赖分布式存储,单个服务器节点是自治的。通过一个中间网关支持推送时间序列,可以通过服务发现或静态配置来发现目标,支持多种模式的图表和仪表盘制作。

Prometheus具体架构图如下:

普罗米修斯架构

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

二、词汇表

三、命令行参数

--config.file="prometheus.yml" Prometheus配置文件路径。

--web.listen-address="0.0.0.0:9090" 用于监听UI、API和遥测的地址。

--web.config.file="" [EXPERIMENTAL] 可以启用TLS或认证的配置文件的路径。

--web.read-timeout=5m 超时读取请求和关闭空闲连接之前的最大持续时间。

--web.max-connections=512 最大同时连接数。

--web.external-url=<URL> 外部可访问Prometheus所在的URL(例如,如果Prometheus通过反向代理提供服务)。用于生成返回到Prometheus本身的相对和绝对链接。如果URL有路径部分,它将用于为Prometheus服务的所有HTTP端点添加前缀。如果省略,将自动派生相关的URL组件。

--web.route-prefix=<path> Web端点的内部路线的前缀。默认为-web.external-url的路径。

--web.user-assets=<path> 静态资源目录的路径,位于 /user。

--web.enable-lifecycle 通过HTTP请求启用关闭和重新加载。

--web.enable-admin-api 启用管理控制行动的API端点。

--web.console.templates="consoles" 控制台模板目录的路径,位于/consoles。

--web.console.libraries="console_libraries" 控制台库目录的路径。

--storage.tsdb.path="data/" 指标存储的基本路径。仅用于server模式。

--storage.tsdb.retention.time= 样本在储存中保留多长时间。设置此标志后,它会覆盖“storage.tsdb.retention”。如果此标志、“storage.tsdb.retention”或“storage.tsdb.retention.size”均未设置,则保留时间默认为15d。支持的单位:y、w、d、h、m、s、ms。仅用于server模式。

--storage.tsdb.retention.size= 块存储的最大字节数。需要一个单位,支持的单位:B、KB、MB、GB、TB、PB、EB。例如:“512MB”。仅用于server模式。

--storage.tsdb.no-lockfile 不在数据目录中创建锁文件。仅用于server模式。

--storage.tsdb.allow-overlapping-blocks 允许重叠块,从而启用垂直压缩和垂直查询合并。仅用于服务器模式。

--storage.agent.path="data-agent/" 指标存储的基本路径。仅用于agent模式。

--storage.agent.wal-compression 压缩代理WAL。仅用于agent模式。

--storage.agent.retention.min-time= 当WAL被截断时,样本在被强行删除之前的最小年龄,仅用于agent模式。

--storage.agent.retention.max-time= 当WAL被截断时,样本在被强行删除之前的最大年龄,仅用于agent模式。

--storage.agent.no-lockfile 不在数据目录中创建锁文件。仅用于agent模式。

--storage.remote.flush-deadline=<duration> 在关闭或重新加载配置时等待刷新样本的时间。

--storage.remote.read-sample-limit=5e7 在单个查询中通过远程读取接口返回的最大样本总数。 0 表示没有限制。对于流式响应类型,将忽略此限制。仅用于server模式。

--storage.remote.read-concurrent-limit=10 并发远程读取调用的最大数量。 0 表示没有限制。仅用于server模式。

--rules.alert.for-outage-tolerance=1h 为恢复“for”警报状态而容忍Prometheus中断的最长时间。仅用于server模式。

--rules.alert.for-grace-period=10m 警报和恢复“for”状态之间的最短持续时间。这仅适用于配置的“for”时间大于宽限期的警报。仅用于server模式。

--rules.alert.resend-delay=1m 在向 Alertmanager 重新发送警报之前等待的最短时间。仅用于server模式。

--alertmanager.notification-queue-capacity=10000 等待Alertmanager通知的队列容量。仅用于server模式。

--query.lookback-delta=5m 在表达式评估和联合期间,检索指标的最长回溯持续时间。仅用于server模式。

--query.timeout=2m 查询在中止之前可能需要的最长时间。仅用于server模式。

--query.max-concurrency=20 并发执行的最大查询数。仅用于server模式。

--query.max-samples=50000000 单个查询可以加载到内存中的最大样本数。请注意,如果查询尝试将比这更多的样本加载到内存中,查询将失败,因此这也限制了查询可以返回的样本数量。仅用于server模式。

--enable-feature= 逗号分隔的要启用的功能名称。有效选项:agent、exemplar-storage、expand-external-labels、memory-snapshot-on-shutdown、promql-at-modifier、promql-negative-offset、remote-write-receiver。extra-scrape-metrics、new-service-discovery-manager。

--log.level=info 只记录给定严重程度或以上的信息。其中之一:[debug, info, warn, error]。

--log.format=logfmt 日志信息的输出格式。其中之一:[logfmt, json]。

四、配置文件详解

通用占位符定义如下:

全局配置区域:

global:
  # 默认情况下抓取目标的频率。
  [ scrape_interval: <duration> | default = 1m ]

  # 抓取请求超时时间
  [ scrape_timeout: <duration> | default = 10s ]

  # 评估规则的频率
  [ evaluation_interval: <duration> | default = 1m ]

  # 与任何时间序列或警报通信时添加的标签
  # 外部系统(federation, remote storage, Alertmanager).
  external_labels:
    [ <labelname>: <labelvalue> ... ]

  # PromQL查询记录到的文件。
  # 重新加载配置将重新打开文件。
  [ query_log_file: <string> ]

# 规则文件指定的globs列表,从中读取规则和警报
# 所有匹配的文件
rule_files:
  [ - <filepath_glob> ... ]

# 抓取配置列表
scrape_configs:
  [ - <scrape_config> ... ]

# 警报指定与警报管理器相关的设置
alerting:
  alert_relabel_configs:
    [ - <relabel_config> ... ]
  alertmanagers:
    [ - <alertmanager_config> ... ]

# 与远程写入功能相关的设置
remote_write:
  [ - <remote_write> ... ]

# 与远程读取功能相关的设置
remote_read:
  [ - <remote_read> ... ]

# 运行时可重新加载的存储相关设置
storage:
  [ - <exemplars> ... ]

scrape_config部分指定了一组描述如何抓取它们的目标和参数,目标可以通过static_configs参数静态配置或使用支持的服务发现机制之一动态发现。

# 默认情况下,分配给抓取指标的任务名称
job_name: <job_name>

# 从任务中抓取目标的频率
[ scrape_interval: <duration> | default = <global_config.scrape_interval> ]

# 抓取此任务时的每次抓取超时时间
[ scrape_timeout: <duration> | default = <global_config.scrape_timeout> ]

# 从目标获取指标的HTTP资源路径
[ metrics_path: <path> | default = /metrics ]

# Honor_labels控制Prometheus如何处理标签之间的冲突
# 抓取的数据中已经存在,而Prometheus则会附上标签
# 服务器端(“job”和“instance”标签、手动配置的目标标签以及由服务发现实现生成的标签)
#
# 如果honor_labels被设置为"true",标签冲突的解决方式是保留抓取数据中的标签值,而忽略冲突的服务器端标签
#
# 如果honor_labels设置为"false",标签冲突的解决方法是将抓取数据中的冲突标签重命名为 "exported_<original-label>" (例如 "exported_instance", "exported_job"),然后附加服务器端标签。
#
# 将Honor_labels设置为“true”对于联邦和抓取Pushgateway等用例很有用,在这些用例中应保留目标中指定的所有标签
#
# 请注意,任何全局配置的“external_labels”都不受此设置的影响。在与外部系统通信时,它们总是仅在时间序列还没有给定标签时才应用,否则将被忽略
[ honor_labels: <boolean> | default = false ]

# Honor_timestamps控制Prometheus是否遵守抓取数据中存在的时间戳
#
# 如果Honor_timestamps设置为“true”,则将使用目标公开的指标的时间戳
#
# 如果Honor_timestamps设置为“false”,则目标公开的指标时间戳将被忽略
[ honor_timestamps: <boolean> | default = true ]

# 配置用于请求的协议方案
[ scheme: <scheme> | default = http ]

# 可选的HTTP URL参数
params:
  [ <string>: [<string>, ...] ]

# 使用配置的用户名和密码在每个抓取请求上设置`Authorization`标头
# password和password_file是互斥的
basic_auth:
  [ username: <string> ]
  [ password: <secret> ]
  [ password_file: <string> ]

# 使用配置的凭据在每个抓取请求上设置`Authorization`标头
authorization:
  # 设置请求的认证类型
  [ type: <string> | default: Bearer ]
  # 设置请求的凭据。它与`credentials_file`互斥
  [ credentials: <secret> ]
  # 设置请求凭证的文件路径。它与`credentials`相互排斥
  [ credentials_file: <filename> ]

# 可选的OAuth 2.0配置
# 不能与basic_auth或authorization同时使用
oauth2:
  [ <oauth2> ]

# 配置抓取请求是否遵循HTTP 3xx重定向
[ follow_redirects: <bool> | default = true ]

# 配置抓取请求的TLS设置
tls_config:
  [ <tls_config> ]

# 可选的代理URL
[ proxy_url: <string> ]

# Azure服务发现配置列表
azure_sd_configs:
  [ - <azure_sd_config> ... ]

# Consul服务发现配置列表
consul_sd_configs:
  [ - <consul_sd_config> ... ]

# DigitalOcean服务发现配置列表
digitalocean_sd_configs:
  [ - <digitalocean_sd_config> ... ]

# Docker服务发现配置列表
docker_sd_configs:
  [ - <docker_sd_config> ... ]

# Docker Swarm服务发现配置列表
dockerswarm_sd_configs:
  [ - <dockerswarm_sd_config> ... ]

# DNS服务发现配置列表
dns_sd_configs:
  [ - <dns_sd_config> ... ]

# EC2服务发现配置列表
ec2_sd_configs:
  [ - <ec2_sd_config> ... ]

# Eureka服务发现配置列表
eureka_sd_configs:
  [ - <eureka_sd_config> ... ]

# 文件服务发现配置列表
file_sd_configs:
  [ - <file_sd_config> ... ]

# GCE服务发现配置列表
gce_sd_configs:
  [ - <gce_sd_config> ... ]

# Hetzner服务发现配置列表
hetzner_sd_configs:
  [ - <hetzner_sd_config> ... ]

# HTTP服务发现配置列表
http_sd_configs:
  [ - <http_sd_config> ... ]

# Kubernetes服务发现配置列表
kubernetes_sd_configs:
  [ - <kubernetes_sd_config> ... ]

# Kuma服务发现配置列表
kuma_sd_configs:
  [ - <kuma_sd_config> ... ]

# Lightsail服务发现配置列表
lightsail_sd_configs:
  [ - <lightsail_sd_config> ... ]

# Linode服务发现配置列表
linode_sd_configs:
  [ - <linode_sd_config> ... ]

# Marathon服务发现配置列表
marathon_sd_configs:
  [ - <marathon_sd_config> ... ]

# AirBnB的Nerve服务发现配置列表
nerve_sd_configs:
  [ - <nerve_sd_config> ... ]

# OpenStack服务发现配置列表
openstack_sd_configs:
  [ - <openstack_sd_config> ... ]

# PuppetDB服务发现配置列表
puppetdb_sd_configs:
  [ - <puppetdb_sd_config> ... ]

# Scaleway服务发现配置列表
scaleway_sd_configs:
  [ - <scaleway_sd_config> ... ]

# Zookeeper Serverset服务发现配置列表
serverset_sd_configs:
  [ - <serverset_sd_config> ... ]

# Triton服务发现配置列表
triton_sd_configs:
  [ - <triton_sd_config> ... ]

# Uyuni服务发现配置列表
uyuni_sd_configs:
  [ - <uyuni_sd_config> ... ]

# 此任务的标记静态配置目标的列表
static_configs:
  [ - <static_config> ... ]

# 目标重新标记配置列表
relabel_configs:
  [ - <relabel_config> ... ]

# 指标重新标记配置列表
metric_relabel_configs:
  [ - <relabel_config> ... ]

# 大于这么多字节的未压缩响应正文将导致抓取失败。0表示没有限制。示例:100MB
# 这是一项实验性功能,将来可能会更改或删除
[ body_size_limit: <size> | default = 0 ]
# Per-scrape限制被接受的抓取样品数量
# 如果在指标重新标记后存在超过此数量的样本,则整个抓取将被视为失败。0表示没有限制
[ sample_limit: <int> | default = 0 ]

# Per-scrape限制被样本可接受的标签数量
# 如果在指标重新标记后存在超过此数量的标签,则整个抓取将被视为失败。0表示没有限制
[ label_limit: <int> | default = 0 ]

# Per-scrape限制被样本可接受的标签名称长度
# 如果标签名称在指标重新标记后长于此数字,则整个抓取将被视为失败。0表示没有限制
[ label_name_length_limit: <int> | default = 0 ]

# Per-scrape限制被样本可接受的标签值长度
# 如果在指标重新标记后标签值长于此数字,则整个抓取将被视为失败。0表示没有限制
[ label_value_length_limit: <int> | default = 0 ]

# Per-scrape配置限制将被接受的唯一目标的数量。如果在目标重新标记后存在超过此数量的目标,Prometheus会将目标标记为失败而不抓取它们
# 0表示没有限制。这是一个实验性功能,将来可能会改变
[ target_limit: <int> | default = 0 ]

五、部署流程

六、修改访问路径前缀

七、开启用户认证功能

Prometheus自身支持basic验证和TLS(将来可能会改变),也可以通过nginx开启basic验证。

1、Prometheus自带basic验证

2、通过nginx开启basic验证

八、使用exporter监控指标

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

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

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

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

九、Grafana监控可视化

Prometheus UI提供了快速验证PromQL以及临时可视化支持的能力,而在大多数场景下引入监控系统通常还需要构建可以长期使用的监控数据可视化面板(Dashboard)。这时用户可以考虑使用第三方的可视化工具如Grafana,Grafana是一个开源的可视化平台,并且提供了对Prometheus的完整支持。

1、安装

2、使用

十、Alertmanager警报管理

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

Alertmanager 处理客户端应用程序(例如 Prometheus 服务器)发送的警报。 它负责对它们进行重复数据删除、分组和路由到正确的接收器集成,例如Email、PagerDuty 或 OpsGenie。 它还负责警报的静音和抑制。

1、安装

2、设置邮件警报

3、设置钉钉、飞书报警

报警全家桶https://github.com/feiyu563/PrometheusAlert

上一篇 下一篇

猜你喜欢

热点阅读