Kubernetes 和 PostgreSQL 集成

强大的性能和简单的集成,由 InfluxData 构建的开源数据连接器 Telegraf 提供支持。

info

这不是实时大规模查询的推荐配置。 为了查询和压缩优化、高速摄取和高可用性,您可能需要考虑 Kubernetes 和 InfluxDB

50 亿+

Telegraf 下载量

#1

时间序列数据库
来源:DB Engines

10 亿+

InfluxDB 下载量

2,800+

贡献者

目录

强大的性能,无限的扩展

收集、组织和处理大量高速数据。 当您将任何数据视为时间序列数据时,它都会更有价值。 借助 InfluxDB,这是 #1 的时间序列平台,旨在与 Telegraf 一起扩展。

查看入门方法

输入和输出集成概述

此插件通过与 Kubelet API 通信来捕获 Kubernetes Pod 和容器的指标。

Telegraf PostgreSQL 插件允许您高效地将指标写入 PostgreSQL 数据库,同时自动管理数据库架构。

集成详情

Kubernetes

Kubernetes 输入插件与 Kubelet API 接口,以收集在单个主机上运行的 Pod 和容器的指标,理想情况下作为 Kubernetes 安装中 DaemonSet 的一部分。 通过在集群内的每个节点上运行,它从本地运行的 kubelet 收集指标,确保数据反映环境的实时状态。 作为一个快速发展的项目,Kubernetes 经常更新,此插件遵循主要云提供商支持的版本,在有限的时间跨度内保持跨多个版本的兼容性。 值得注意的是潜在的高基数序列,这可能会给数据库带来负担; 因此,建议用户实施过滤技术和保留策略来有效管理此负载。 配置选项提供了插件行为的灵活定制,以便无缝集成到不同的设置中,从而增强其在监控 Kubernetes 环境中的实用性。

PostgreSQL

PostgreSQL 插件使用户能够将指标写入 PostgreSQL 数据库或兼容数据库,通过自动更新缺失的列,为架构管理提供强大的支持。 该插件旨在促进与监控解决方案的集成,允许用户高效地存储和管理时间序列数据。 它为连接设置、并发和错误处理提供可配置的选项,并支持高级功能,例如用于标签和字段的 JSONB 存储、外键标记、模板化架构修改以及通过 pguint 扩展支持无符号整数数据类型。

配置

Kubernetes

[[inputs.kubernetes]]
  ## URL for the kubelet, if empty read metrics from all nodes in the cluster
  url = "http://127.0.0.1:10255"

  ## Use bearer token for authorization. ('bearer_token' takes priority)
  ## If both of these are empty, we'll use the default serviceaccount:
  ## at: /var/run/secrets/kubernetes.io/serviceaccount/token
  ##
  ## To re-read the token at each interval, please use a file with the
  ## bearer_token option. If given a string, Telegraf will always use that
  ## token.
  # bearer_token = "/var/run/secrets/kubernetes.io/serviceaccount/token"
  ## OR
  # bearer_token_string = "abc_123"

  ## Kubernetes Node Metric Name
  ## The default Kubernetes node metric name (i.e. kubernetes_node) is the same
  ## for the kubernetes and kube_inventory plugins. To avoid conflicts, set this
  ## option to a different value.
  # node_metric_name = "kubernetes_node"

  ## Pod labels to be added as tags.  An empty array for both include and
  ## exclude will include all labels.
  # label_include = []
  # label_exclude = ["*"]

  ## Set response_timeout (default 5 seconds)
  # response_timeout = "5s"

  ## Optional TLS Config
  # tls_ca = /path/to/cafile
  # tls_cert = /path/to/certfile
  # tls_key = /path/to/keyfile
  ## Use TLS but skip chain & host verification
  # insecure_skip_verify = false

PostgreSQL

# Publishes metrics to a postgresql database
[[outputs.postgresql]]
  ## Specify connection address via the standard libpq connection string:
  ##   host=... user=... password=... sslmode=... dbname=...
  ## Or a URL:
  ##   postgres://[user[:password]]@localhost[/dbname]?sslmode=[disable|verify-ca|verify-full]
  ## See https://postgresql.ac.cn/docs/current/libpq-connect.html#LIBPQ-CONNSTRING
  ##
  ## All connection parameters are optional. Environment vars are also supported.
  ## e.g. PGPASSWORD, PGHOST, PGUSER, PGDATABASE
  ## All supported vars can be found here:
  ##  https://postgresql.ac.cn/docs/current/libpq-envars.html
  ##
  ## Non-standard parameters:
  ##   pool_max_conns (default: 1) - Maximum size of connection pool for parallel (per-batch per-table) inserts.
  ##   pool_min_conns (default: 0) - Minimum size of connection pool.
  ##   pool_max_conn_lifetime (default: 0s) - Maximum age of a connection before closing.
  ##   pool_max_conn_idle_time (default: 0s) - Maximum idle time of a connection before closing.
  ##   pool_health_check_period (default: 0s) - Duration between health checks on idle connections.
  # connection = ""

  ## Postgres schema to use.
  # schema = "public"

  ## Store tags as foreign keys in the metrics table. Default is false.
  # tags_as_foreign_keys = false

  ## Suffix to append to table name (measurement name) for the foreign tag table.
  # tag_table_suffix = "_tag"

  ## Deny inserting metrics if the foreign tag can't be inserted.
  # foreign_tag_constraint = false

  ## Store all tags as a JSONB object in a single 'tags' column.
  # tags_as_jsonb = false

  ## Store all fields as a JSONB object in a single 'fields' column.
  # fields_as_jsonb = false

  ## Name of the timestamp column
  ## NOTE: Some tools (e.g. Grafana) require the default name so be careful!
  # timestamp_column_name = "time"

  ## Type of the timestamp column
  ## Currently, "timestamp without time zone" and "timestamp with time zone"
  ## are supported
  # timestamp_column_type = "timestamp without time zone"

  ## Templated statements to execute when creating a new table.
  # create_templates = [
  #   '''CREATE TABLE {{ .table }} ({{ .columns }})''',
  # ]

  ## Templated statements to execute when adding columns to a table.
  ## Set to an empty list to disable. Points containing tags for which there is no column will be skipped. Points
  ## containing fields for which there is no column will have the field omitted.
  # add_column_templates = [
  #   '''ALTER TABLE {{ .table }} ADD COLUMN IF NOT EXISTS {{ .columns|join ", ADD COLUMN IF NOT EXISTS " }}''',
  # ]

  ## Templated statements to execute when creating a new tag table.
  # tag_table_create_templates = [
  #   '''CREATE TABLE {{ .table }} ({{ .columns }}, PRIMARY KEY (tag_id))''',
  # ]

  ## Templated statements to execute when adding columns to a tag table.
  ## Set to an empty list to disable. Points containing tags for which there is no column will be skipped.
  # tag_table_add_column_templates = [
  #   '''ALTER TABLE {{ .table }} ADD COLUMN IF NOT EXISTS {{ .columns|join ", ADD COLUMN IF NOT EXISTS " }}''',
  # ]

  ## The postgres data type to use for storing unsigned 64-bit integer values (Postgres does not have a native
  ## unsigned 64-bit integer type).
  ## The value can be one of:
  ##   numeric - Uses the PostgreSQL "numeric" data type.
  ##   uint8 - Requires pguint extension (https://github.com/petere/pguint)
  # uint64_type = "numeric"

  ## When using pool_max_conns>1, and a temporary error occurs, the query is retried with an incremental backoff. This
  ## controls the maximum backoff duration.
  # retry_max_backoff = "15s"

  ## Approximate number of tag IDs to store in in-memory cache (when using tags_as_foreign_keys).
  ## This is an optimization to skip inserting known tag IDs.
  ## Each entry consumes approximately 34 bytes of memory.
  # tag_cache_size = 100000

  ## Enable & set the log level for the Postgres driver.
  # log_level = "warn" # trace, debug, info, warn, error, none

输入和输出集成示例

Kubernetes

  1. 动态资源分配监控: 通过利用 Kubernetes 插件,团队可以为各种 Pod 和容器的资源使用模式设置警报。 这种主动监控方法能够自动扩展资源以响应特定阈值,从而帮助优化性能,同时最大限度地降低高峰使用期间的成本。

  2. 多租户资源隔离分析: 使用 Kubernetes 的组织可以利用此插件跟踪每个命名空间的资源消耗。 在多租户场景中,了解不同团队的资源分配和使用情况对于确保公平访问和性能保证至关重要,从而带来更好的资源管理策略。

  3. 实时健康状况仪表板: 将 Kubernetes 插件捕获的数据集成到 Grafana 等可视化工具中,以创建实时仪表板。 这些仪表板提供对 Kubernetes 环境整体健康状况和性能的洞察,使团队能够快速识别和纠正集群、Pod 和容器之间的问题。

  4. 自动化事件响应工作流程: 通过将 Kubernetes 插件与警报管理系统相结合,团队可以根据实时指标自动化事件响应程序。 如果 Pod 的资源使用量超过预定义的限制,自动化工作流程可以触发补救措施,例如重新启动 Pod 或重新分配资源,所有这些都有助于提高系统弹性。

PostgreSQL

  1. 使用复杂查询进行实时分析: 利用 PostgreSQL 插件将来自各种来源的指标存储在 PostgreSQL 数据库中,从而可以使用复杂查询进行实时分析。 这种设置可以帮助数据科学家和分析师发现模式和趋势,因为他们可以在多个表之间操作关系数据,同时利用 PostgreSQL 强大的查询优化功能。 具体而言,用户可以使用跨不同指标表的 JOIN 操作创建复杂的报告,从而揭示通常会隐藏在嵌入式系统中的见解。

  2. 与 TimescaleDB 集成以进行时间序列数据处理: 在 TimescaleDB 实例中利用 PostgreSQL 插件,以高效处理和分析时间序列数据。 通过实施超表,用户可以在时间维度上实现更高的话题性能和分区。 此集成允许用户在处理大量时间序列数据的同时运行分析查询,同时保留 PostgreSQL SQL 查询的全部功能,从而确保指标分析的可靠性和效率。

  3. 数据版本控制和历史分析: 实施使用 PostgreSQL 插件的策略来维护指标的不同版本。 用户可以设置不可变的数据表结构,其中保留旧版本的表,从而方便历史分析。 这种方法不仅提供了对数据演变的洞察,而且还有助于遵守数据保留策略,确保数据集的历史完整性保持不变。

  4. 用于不断发展的指标的动态架构管理: 使用插件的模板功能来创建动态变化的架构,以响应指标变化。 此用例允许组织在指标发展时调整其数据结构,添加必要的字段并确保遵守数据完整性策略。 通过利用模板化的 SQL 命令,用户无需手动干预即可扩展其数据库,从而促进敏捷数据管理实践。

反馈

感谢您成为我们社区的一份子! 如果您有任何一般性反馈或在这些页面上发现任何错误,我们欢迎并鼓励您提出意见。 请在 InfluxDB 社区 Slack 中提交您的反馈。

强大的性能,无限的扩展

收集、组织和处理大量高速数据。 当您将任何数据视为时间序列数据时,它都会更有价值。 借助 InfluxDB,这是 #1 的时间序列平台,旨在与 Telegraf 一起扩展。

查看入门方法

相关集成

HTTP 和 InfluxDB 集成

HTTP 插件从一个或多个 HTTP(S) 端点收集指标。 它支持各种身份验证方法和数据格式的配置选项。

查看集成

Kafka 和 InfluxDB 集成

此插件从 Kafka 读取消息,并允许基于这些消息创建指标。 它支持各种配置,包括不同的 Kafka 设置和消息处理选项。

查看集成

Kinesis 和 InfluxDB 集成

Kinesis 插件允许从 AWS Kinesis 流中读取指标。 它支持多种输入数据格式,并为可靠的消息处理提供 DynamoDB 的检查点功能。

查看集成