使用Telegraf和InfluxDB监控您的PostgreSQL数据库
作者:Margo Schaedel / 产品,用例,开发者
2018年7月20日
导航到
概述
本教程将具体介绍设置Telegraf和InfluxDB以监控PostgreSQL的过程。对于初学者,PostgreSQL(或简称为Postgres)是一个非常流行的开源对象关系型数据库系统,最初由加州大学伯克利分校的开发者在1986年发起。它具有多版本并发控制和预写日志等重要功能,有助于确保数据可靠性。如果您对PostgreSQL不太熟悉,我建议从他们的入门教程开始。
认识到跟踪和监控数据库性能和吞吐量的重要性,PostgreSQL的制作者增加了一个统计收集器,它可以自动收集有关自身数据库活动的信息。您本质上可以直接获得所有这些出色的指标。那么让我们利用这一点,将这些指标全部暴露给Telegraf,并将它们发送到InfluxDB。
您需要什么
我在本教程中使用的是本地安装的InfluxDB、Telegraf和Chronograf;每个项目的“入门”指南都非常棒且易于理解。您还需要在您的机器上安装PostgreSQL。如果您没有现成的示例应用程序和数据库,可以克隆此仓库以跟进——它只是一个简单的Node/Express应用程序,用于在PostgreSQL中存储调色板——请务必遵循README上的说明以使应用程序工作。
编辑您的Telegraf配置
首先,Telegraf GitHub页面提供了许多输入和输出插件,适用于各种用例——其中之一包括PostgreSQL输入插件。如果我们正确配置了Telegraf配置文件中的此插件,我们应该会自动看到指标被发送到InfluxDB中的默认telegraf.autogen
数据库。
让我们试试。
导航到您的Telegraf配置文件,并找到[[inputs.postgresql]]
部分。如果您使用的是Mac OS,并且使用Homebrew安装了InfluxDB和Telegraf,则此路径/usr/local/etc/telegraf.conf
应可带您访问默认配置文件。否则,请随意参考Telegraf文档以获取更多信息。
# # Read metrics from one or many postgresql servers
# [[inputs.postgresql]]
# ## specify address via a url matching:
# ## postgres://[pqgotest[:password]]@localhost[/dbname]\
# ## ?sslmode=[disable|verify-ca|verify-full]
# ## or a simple string:
# ## host=localhost user=pqotest password=... sslmode=... dbname=app_production
# ##
# ## All connection parameters are optional.
# ##
# ## Without the dbname parameter, the driver will default to a database
# ## with the same name as the user. This dbname is just for instantiating a
# ## connection with the server and doesn't restrict the databases we are trying
# ## to grab metrics for.
# ##
# address = "host=localhost user=postgres sslmode=disable"
# ## A custom name for the database that will be used as the "server" tag in the
# ## measurement output. If not specified, a default one generated from
# ## the connection address is used.
# # outputaddress = "db01"
#
# ## connection configuration.
# ## maxlifetime - specify the maximum lifetime of a connection.
# ## default is forever (0s)
# max_lifetime = "0s"
#
# ## A list of databases to explicitly ignore. If not specified, metrics for all
# ## databases are gathered. Do NOT use with the 'databases' option.
# # ignored_databases = ["postgres", "template0", "template1"]
#
# ## A list of databases to pull metrics about. If not specified, metrics for all
# ## databases are gathered. Do NOT use with the 'ignored_databases' option.
# # databases = ["app_production", "testing"]
这是默认配置文件的外观。如您所见,要遵循的说明相当简单。您绝对需要指定要连接的地址,以便Telegraf可以与您的PostgreSQL服务器通信。您可以可选地指定其他参数,例如username
、password
、启用或禁用ssl-mode
,如果您愿意,还可以连接到特定数据库。
如果您想在InfluxDB数据库中为服务器标签创建一个自定义名称,您可以在outputaddress
中指定该名称。连接生存期决定了您希望连接保持打开的时间长度。最后,您可以列出要忽略或专门收集这些列表中数据库指标的数据库数组。对于此选项,您只能选择一项,不能两者都选。
此插件可以轻松地从已经内置的pg_stat_database
和pg_stat_bgwriter
视图中提取postgresql的指标。查看文档以了解提取的确切指标。让我们将地址值更改为列出我们的主机为localhost的字符串,如下所示
address = "host=localhost"
唯一要确保的另一件事是您的数据输出将被发送到InfluxDB。如果滚动到outputs.influxdb
部分,您可以编辑URL以包括InfluxDB的默认端口8086
# Configuration for influxdb server to send metrics to
[[outputs.influxdb]]
## The full HTTP or UDP URL for your InfluxDB instance.
##
## Multiple urls can be specified as part of the same cluster,
## this means that only ONE of the urls will be written to each interval.
# urls = ["udp://127.0.0.1:8089"] # UDP endpoint example
urls = ["https://127.0.0.1:8086"] # required
## The target database for metrics (telegraf will create it if not exists).
database = "telegraf" # required
## Name of existing retention policy to write to. Empty string writes to
## the default retention policy.
retention_policy = ""
## Write consistency (clusters only), can be: "any", "one", "quorum", "all"
write_consistency = "any"
## Write timeout (for the InfluxDB client), formatted as a string.
## If not provided, will default to 5s. 0s means no timeout (not recommended).
timeout = "5s"
# username = "telegraf"
# password = "metricsmetricsmetricsmetrics"
## Set the user agent for HTTP POSTs (can be useful for log differentiation)
# user_agent = "telegraf"
## Set UDP payload size, defaults to InfluxDB UDP Client default (512 bytes)
# udp_payload = 512
## Optional SSL Config
# ssl_ca = "/etc/telegraf/ca.pem"
# ssl_cert = "/etc/telegraf/cert.pem"
# ssl_key = "/etc/telegraf/key.pem"
## Use SSL but skip chain & host verification
# insecure_skip_verify = false
## HTTP Proxy Config
# http_proxy = "http://corporate.proxy:3128"
## Optional HTTP headers
# http_headers = {"X-Special-Header" = "Special-Value"}
## Compress each HTTP request payload using GZIP.
# content_encoding = "gzip"
重新启动Telegraf和Chronograf,导航到Chronograf的默认端口(8888),在菜单的数据探索器部分,您应该在默认的telegraf.autogen
数据库下看到名为postgresql
的度量。您还应该在字段列中看到大量指标,包括blk_read_time
、blk_write_time
、buffers_clean
、datid
、deadlocks
、tup_inserted
和tup_deleted
等,仅举几个例子。要了解这些字段的精确含义,请查看此参考页面。
或者,您可以使用CLI从InfluxDB查询数据。在您的终端中,键入influx
以访问Influx外壳。命令SHOW DATABASES
将为您列出数据库,然后使用USE [databasename]
,然后使用SHOW MEASUREMENTS
将列出与特定数据库关联的度量名称。然后您可以运行各种查询语句,如下所示
SELECT mean("xact_commit") AS "mean_xact_commit" FROM "telegraf"."autogen"."postgresql" WHERE time > now() - 5m AND "db"='palette_picker'
或者
SELECT * FROM "telegraf"."autogen"."postgresql" WHERE time > now() - 1m AND "db"='palette_picker'
试试看吧!如果您过于热衷于查询并在任何时间需要终止一个查询,只需运行KILL QUERY [qid]
即可,这可以通过SHOW QUERIES
命令找到。
在生产中监控PostgreSQL
如果您想在生产中监控您的PostgreSQL数据库,这很简单。只需更新Telegraf配置文件,并使用正确的地址信息。以下是我更新的Telegraf配置文件中的地址,以从同一示例应用(调色板选择器)的Heroku实例监控Postgresql。我能在我的Heroku仪表板页面上找到所有这些凭证。查看一下
address = "host=ec2-204-236-239-225.compute-1.amazonaws.com user=username password=password dbname=databasename"
(出于安全考虑,此处已更改用户名、密码和数据库名称)
很简单,对吧?
下一步
希望这份指南已经帮助您了解到使用Telegraf和InfluxDB监控PostgreSQL数据库是多么简单。在下一篇文章中,我们将讨论在评估Postgres数据库健康状况时需要关注的一些关键指标。您可以通过Twitter联系我们@influxDB和@mschae16,提出任何问题或评论!