使用Telegraf和InfluxDB监控您的PostgreSQL数据库

导航到


概述

本教程将具体介绍设置TelegrafInfluxDB以监控PostgreSQL的过程。对于初学者,PostgreSQL(或简称为Postgres)是一个非常流行的开源对象关系型数据库系统,最初由加州大学伯克利分校的开发者在1986年发起。它具有多版本并发控制和预写日志等重要功能,有助于确保数据可靠性。如果您对PostgreSQL不太熟悉,我建议从他们的入门教程开始。

认识到跟踪和监控数据库性能和吞吐量的重要性,PostgreSQL的制作者增加了一个统计收集器,它可以自动收集有关自身数据库活动的信息。您本质上可以直接获得所有这些出色的指标。那么让我们利用这一点,将这些指标全部暴露给Telegraf,并将它们发送到InfluxDB。

 

您需要什么

我在本教程中使用的是本地安装的InfluxDBTelegrafChronograf;每个项目的“入门”指南都非常棒且易于理解。您还需要在您的机器上安装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服务器通信。您可以可选地指定其他参数,例如usernamepassword、启用或禁用ssl-mode,如果您愿意,还可以连接到特定数据库。

如果您想在InfluxDB数据库中为服务器标签创建一个自定义名称,您可以在outputaddress中指定该名称。连接生存期决定了您希望连接保持打开的时间长度。最后,您可以列出要忽略或专门收集这些列表中数据库指标的数据库数组。对于此选项,您只能选择一项,不能两者都选。

此插件可以轻松地从已经内置的pg_stat_databasepg_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_timeblk_write_timebuffers_cleandatiddeadlockstup_insertedtup_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,提出任何问题或评论!