Postgres出口国
在本页:
简介
下面的快速入门为Postgres出口商提供了设置说明、预配置的仪表板和警报规则。在运行完这个快速开始的步骤后,你将有:
设置和配置Postgres出口商以收集Postgres指标,如每秒查询次数(QPS)和每秒获取/返回/插入/更新/删除的行数。Postgres export将这些作为普罗米修斯风格的指标公开。
配置Prometheus抓取Postgres出口商指标,并可选地将其发送到Grafana Cloud。
导入Grafana仪表板以可视化您的指标数据。
设置Prometheus警报规则,对度量数据进行警报。
指标使用
默认情况下,该出口商发布大约450个普罗米修斯时间序列。要查看此导出器默认附带的指标列表,请下载一个示例指标刮集在这里.
注意,根据其配置的不同,Postgres export收集和发布的度量指标可能比这个默认设置多得多。要了解关于配置Postgres出口商和切换其收集器的更多信息,请参阅Postgres出口商GitHub库.
除了切换Postgres exports的设置之外,您还可以通过删除不需要存储在Prometheus或Grafana Cloud中的时间序列来减少指标的使用。要了解如何做到这一点,请参见通过重新标签减少Prometheus度量的使用来自Grafana Cloud文档。
Grafana Cloud的Postgres出口商集成
如果您正在使用Grafana Cloud,您可以通过安装Postgres出口商集成来跳过本指南中的所有步骤,它旨在帮助您在一些命令和单击中启动和运行。免费注册.
要了解如何使用Postgres出口商集成设置Postgres出口商,请参阅Postgres出口商集成来自Grafana Cloud文档。
在本页:
Postgres出口商快速入门
在本指南中,您将学习如何设置和配置Postgres出口商来收集Postgres指标,如每秒查询次数(QPS)、数据库死锁和冲突,并将它们作为普罗米修斯风格的指标公开。然后进行配置普罗米修斯抓取Postgres指标,并可选地将其发送到Grafana Cloud。最后,您将设置一个预先配置和策划的Grafana集指示板而且报警规则.在本指南的最后,您将拥有可以用于可视化Postgres指标的仪表板,以及一组预先配置的警报。
如果你正在使用Grafana云,Postgres集成可以帮助您快速启动和运行。Postgres集成将Postgres出口商嵌入到Grafana云剂并且自动提供警报规则和仪表板,因此您不必执行本指南中的步骤。要了解如何使用Postgres集成设置Postgres出口商,请参阅Postgres集成来自Grafana Cloud文档。
先决条件
在你开始之前,你应该有以下可用的:
- 与Postgres出口商版本兼容的机器。要查看可用版本的列表,请参见释放.
- Postgres在您的机器上运行。要了解关于安装和运行Postgres的更多信息,请参阅Postgres安装指南.
- Prometheus在您的环境中运行或直接在机器上运行。要了解如何安装Prometheus,请参见安装来自普罗米修斯的文件。
- Grafana在您的环境中运行或直接在机器上运行。要了解如何安装Grafana,请参阅安装Grafana来自格拉弗纳的文件。
- (可选)Grafana Cloud帐号。Grafana Cloud托管Grafana和a皮质基于Prometheus度量端点。您仍然需要使用安装在您的环境中的Prometheus或Grafana云剂.要了解更多关于Grafana Cloud的信息,请参见Grafana云.
步骤1:设置Postgres出口商
在这一步中,您将在机器上设置Postgres导出器,以Prometheus格式收集和公开Postgres指标。本指南使用的是带有Postgres 13.2的Ubuntu 20.04系统。根据操作系统和Postgres版本的不同,步骤可能略有不同。
首先,登录到您的计算机并下载相关的Postgres exporters二进制文件。本指南使用linux-amd64
二进制,但你应该选择一个对应于你的系统操作系统和体系结构:
wget https://github.com/prometheus-community/postgres_exporter/releases/download/v0.9.0/postgres_exporter-0.9.0.linux-amd64.tar.gz
取代v0.9.0
使用您想要安装的版本。这个指南可能会过时,所以最好检查Postgres出口商释放页获取最新的稳定版本。
解压tarball和cd
进入目录:
Tar XVFZ postgres_export -*.linux-amd64. Tar .gz CD postgres_export -*.linux-amd64. Tar .gz
我们将运行Postgres出口商作为postgres
获取数据库指标的用户。要以非超级用户的身份获取指标,可以按照Postgres出口商Github回购.
我们需要通知出口商如何到达Postgres服务器。我们通过设置以下环境变量来实现:
出口DATA_SOURCE_NAME = ' postgresql: / / postgres: enter_password_here@postgres_hostname: 5432 / postgres吗?sslmode =禁用'
一定要更换postgres
与你将用于从Postgres获取指标的用户,enter_password_here
与您的用户的密码,和postgres_hostname
使用Postgres实例的主机名(localhost,如果您在同一台机器上)。
最后,运行export:
./postgres_export INFO[0000] Starting Server::9187 source="postgres_export .go:1850"
如果看到上面的输出,说明您成功运行了Postgres exporters。
Postgres出口商在端口上发布Prometheus格式的Postgres度量9187
.您可以使用旋度
.您需要打开一个新的SSH会话或后台Postgres exporters进程来使用旋度
.
curl http://localhost: 9187 /指标
#类型pg_exporter_scrapes_total计数器pg_exporter_scrapes_total 1 # #帮助pg_locks_count数量的锁类型pg_locks_count计pg_locks_count {datname =“postgres”=“accessexclusivelock”模式,服务器= " localhost: 5432} 0 pg_locks_count {datname =“postgres”=“accesssharelock”模式,服务器= " localhost: 5432} 1 pg_locks_count {datname =“postgres”=“exclusivelock”模式,服务器= " localhost: 5432} 0 pg_locks_count {datname =“postgres”=“rowexclusivelock”模式,服务器= " localhost: 5432} 0Pg_locks_count {datname="postgres",mode="rowsharelock",server="localhost:5432"} 0 Pg_locks_count {datname="postgres",mode="sharelock",server="localhost:5432"} 0 Pg_locks_count {datname="postgres",mode=" shareowexclusivelock ",server="localhost:5432"} 0 Pg_locks_count {datname="postgres",mode="shareupdateexclusivelock",server="localhost:5432"} 0 Pg_locks_count {datname="postgres",mode="shareupdateexclusivelock",server="localhost:5432"} 0 Pg_locks_count {datname="postgres",mode=" sharesharelock ",server="localhost:5432"} 0
如果看到上面的输出,就可以开始使用Prometheus收集Postgres指标了。
要避免从命令行运行和管理Postgres出口商,您可以创建一个systemd
服务。要了解如何做到这一点,请参见创建systemd服务来管理代理.将代理二进制文件的路径替换为Postgres exports的路径。
您可以指定——extend.query-path
标记你的路径queries.yaml
文件,您可以在其中指定自定义查询。要了解更多有关这些功能的信息,请参阅Postgres出口商GitHub仓库.
步骤2:使用Prometheus抓取Postgres出口商
现在Postgres exporters已经在您的机器上启动并运行,您可以配置一个Prometheus刮取作业来收集和存储Postgres exporters指标。
将以下刮擦作业配置添加到scrape_configs
你的prometheus.yml
配置文件:
—job_name: postgres static_configs:—targets: ['postgres_exporter_machine_IP_address:9187']
取代postgres_exporter_machine_IP_address
与运行Postgres出口商的机器的IP地址。如果你在同一台机器上运行普罗米修斯,这将是本地主机
.要了解有关配置Prometheus的更多信息,请参见配置来自普罗米修斯的文件。
如果你没有prometheus.yml
配置文件,使用您最喜欢的文本编辑器创建一个简单的配置文件。打开您喜欢的文本编辑器,并粘贴以下Prometheus配置:
global: scrape_interval: 15s scrape_configs:—job_name: postgres static_configs:—targets: ['postgres_export - machine_ip_address:9187']
这个配置告诉Prometheus每15秒清理一次所有作业。调用唯一配置的抓取作业postgres
并定义了postgres_exporter_machine_IP_address: 9187
目标。默认情况下,普罗米修斯会刮/指标
端点使用HTTP。
保存并关闭该文件。然后您可以使用以下命令运行Prometheus文件:
/ prometheus.yml /普罗米修斯——config.file =
将指标发送到Grafana Cloud
要将Postgres exports度量从Prometheus发送到Grafana Cloud,请配置remote_write
的参数prometheus.yml
配置文件。要了解更多,请参见米米修斯来自Grafana Cloud文档。要了解更多关于remote_write
参数,请参见remote_write
来自普罗米修斯的文件。
步骤3:配置仪表板
这个快速入门包含一个仪表板:
- Postgres概述
要了解如何将这些仪表板导入Grafana,请参阅导入仪表板来自格拉弗纳的文件。
你可以获取仪表盘在这里.
步骤4:配置警报
通过使用Prometheus警报规则,您可以定义当PromQL表达式在一段时间内违反某些阈值或满足指定条件时触发的警报。例如,您可以定义aHighRequestLatency
当请求延迟度量在一段时间内大于某个阈值时触发的警报。一旦触发警报条件,警报移动到等待
状态。在满足条件后的一段时间内所规定的为
参数,警报移动到发射
状态。您可以使用类似的工具配置发送警报的路由和通知Alertmanager.Alertmanager也内置在Grafana Cloud中。
您可以获取警报规则YAML文件在这里.
将警报规则加载到Prometheus中
要将警报规则加载到Prometheus中,请将以下内容添加到您的prometheus.yml
配置文件:
Rule_files: - "postgres_exporter_alerting_rules.yml"
一定要更换postgres_exporter_alerting_rules.yml
与Postgres警报规则YAML文件的路径。
将警报规则加载到Grafana Cloud中
要了解如何将警报规则加载到Grafana Cloud中,请参见普罗米修斯和洛基用cortextool统治.
结论
在这个快速入门中,您在Linux机器上安装并运行了Postgres exporters。然后将Prometheus配置为抓取Postgres exports公开的数据库和Postgres指标。您将警报规则加载到Prometheus中,最后导入Grafana仪表板以可视化Postgres指标。
如果您正在使用Grafana Cloud,您可以通过安装与Grafana Cloud Agent的Postgres集成来跳过本指南中的所有步骤。该集成将预先配置的Postgres出口商嵌入代理中,并自动提供Grafana仪表板和Prometheus警报和记录规则,因此您不必手动导入它们。要了解如何设置Postgres集成,请参阅Grafana云集成.
仪表板、记录规则和警报规则是使用Postgres exporters Mixin生成的。mixin是由主题专家策划和设计的仪表板、记录规则和警报的可重用模板。要了解更多,请参阅Postgres Mixin存储库。
在本页:
Postgres概述仪表板
该仪表板包括以下指标的面板:
- 当前每秒
- 取,返回,插入,更新,删除行
- 数据库死锁和冲突
- 缓存命中率
- 活动连接数
- 缓冲区
您可以使用下面的仪表板ID直接导入仪表板:14114
.
您可以获取仪表板JSON在这里.
此指示板是使用Postgres出口商生成的mixin.
在本页:
这个快速入门包含以下警报规则:
PostgreSQLMaxConnectionsReached
Postgres可用连接耗尽
PostgreSQLHighConnections
Postgres超过当前配置的最大Postgres连接限制的80%
PostgreSQLDown
Postgres不处理查询
PostgreSQLSlowQueries
Postgres有大量的慢速查询
PostgreSQLQPS
Postgres每秒的查询数量很高
PostgreSQLCacheHitRatio
Postgres缓存命中率低
下载以下警报规则YAML文件groups:—name: PostgreSQL rules:—alert: PostgreSQLMaxConnectionsReached expr: sum(pg_stat_activity_count) by (instance) >= sum(pg_settings_max_connections) by (instance) - sum(pg_settings_superuser_reserved_connections) by (instance) for: 1m labels: severity: email annotations: summary: "{{$labels. "实例}}已用尽Postgres连接。"实例}}超过当前配置的最大Postgres连接限制(当前值:{{$value}}s)。服务可能降级-请立即采取行动(您可能需要增加Docker映像中的max_connections并重新部署。)—alert: PostgreSQLHighConnections expr: sum(pg_stat_activity_count) by (instance) > (sum(pg_settings_max_connections) by (instance) - sum(pg_settings_superuser_reserved_connections) by (instance)) * 0.8 for: 10m labels: severity: email annotations: summary: "{{$labels. "实例}}超过了最大Postgres连接的80%。实例}}超过当前配置的最大Postgres连接限制(当前值:{{$value}}s)的80%。请检查使用率图表,确认这是正常的服务增长、滥用还是其他临时情况,或者是否需要提供新资源(或者增加限制,这很有可能)。”—alert: PostgreSQLDown expr: pg_up != 1 for: 1m labels: severity: email annotations: summary: "PostgreSQL is not processing queries: {{$labels. "实例}}"描述:"{{$labels. "instance}}正在拒绝来自出口商的查询请求,因此可能也不允许DNS请求工作。只要至少有一个节点还活着,用户服务就不会受到影响。”—alert: PostgreSQLSlowQueries expr: avg(rate(pg_stat_activity_max_tx_duration{datname!~"template.*"}[2m])) by (datname) > 2 * 60 for: 2m labels: severity: email annotations: summary: "PostgreSQL high number of slow on{{$labels.]集群}}用于数据库{{$labels。datname }} " description: "PostgreSQL high number of slow queries {{ $labels.cluster }} for database {{ $labels.datname }} with a value of {{ $value }} " - alert: PostgreSQLQPS expr: avg(irate(pg_stat_database_xact_commit{datname!~"template.*"}[5m]) + irate(pg_stat_database_xact_rollback{datname!~"template.*"}[5m])) by (datname) > 10000 for: 5m labels: severity: email annotations: summary: "PostgreSQL high number of queries per second {{ $labels.cluster }} for database {{ $labels.datname }}" description: "PostgreSQL high number of queries per second on {{ $labels.cluster }} for database {{ $labels.datname }} with a value of {{ $value }}" - alert: PostgreSQLCacheHitRatio expr: avg(rate(pg_stat_database_blks_hit{datname!~"template.*"}[5m]) / (rate(pg_stat_database_blks_hit{datname!~"template.*"}[5m]) + rate(pg_stat_database_blks_read{datname!~"template.*"}[5m]))) by (datname) < 0.98 for: 5m labels: severity: email annotations: summary: "PostgreSQL low cache hit rate on {{ $labels.cluster }} for database {{ $labels.datname }}" description: "PostgreSQL low on cache hit rate on {{ $labels.cluster }} for database {{ $labels.datname }} with a value of {{ $value }}"
此警报规则YAML文件是使用Postgres出口商生成的mixin.
在本页:
Grafana Cloud提供了一个不断扩展的集成集,可以在几分钟内快速获得可观察性堆栈并运行。内置在Grafana云代理中的Postgres集成,公开和删除基本的Postgres指标,并将它们推送到Grafana云。代理将使用嵌入式Postgres Exporter抓取指标,而Grafana Cloud将自动提供定制的Grafana仪表板和警报,以便对这些数据进行可视化和操作。
要了解更多,请查看Grafana Cloud文档.
它是如何工作的
配置、安装、连接和维护Prometheus监视组件通常涉及大量的领域知识。从设置到仪表板和警报可能需要相当长的时间。作为Grafana的创造者——以及Prometheus和Cortex的核心贡献者——我们构建了简单的集成来抽象一些工作,以便快速开始。它是如何工作的:
- 注册(或登录)一个免费Grafana云帐户.
- 选择你想要观察的目标(一个不断扩大的目录)。
- 运行一行命令安装Grafana Agent。代理嵌入abnd预配置出口商以公开默认指标,并将它们推到Grafana云指标后端。
- 瞧!您将看到定制的Grafana仪表板,并将受益于正常的缺省提醒。
寻找不同的出口商或集成?查看我们的不断增长的流行组件集成库比如MySQL, Postgres, Redis, Memcached等等。