Telegraf InfluxDB Input Plugin 详解:从 `/debug/vars` 采集 InfluxDB v1 与兼容端点指标
2026/9/14 10:50:06 网站建设 项目流程

Telegraf InfluxDB Input Plugin 详解:从/debug/vars采集 InfluxDB v1 与兼容端点指标

【免费下载链接】telegrafAgent for collecting, processing, aggregating, and writing metrics, logs, and other arbitrary data.项目地址: https://gitcode.com/GitHub_Trending/te/telegraf

本篇技术指南以 Telegraf 仓库中的 influxdb 输入插件文档 为核心,讲解如何通过该插件从 InfluxDB v1 服务器的/debug/vars端点(以及任何暴露 InfluxDB 格式 JSON 的 HTTP 端点)采集数据库自身的运行状态指标。读完本文,你将掌握插件的完整配置参数、底层 JSON 解析与度量生成机制、全部测量(measurement)与字段(field)语义,以及用--test模式快速验证采集效果的实战方法。

插件定位与适用场景

inputs.influxdb是 Telegraf 内置的输入插件,自Telegraf v0.2.5起提供,分类标签为datastore,支持在all(所有平台)上运行。它的核心职责是:

  • 采集给定InfluxDB v1服务器上influxdb度量(源自/debug/vars端点);
  • 额外支持从任何暴露 InfluxDB 格式 JSON 数据的 HTTP 端点采集指标,无论该端点背后是否真的连接了 Influx 数据库。

需要注意一个重要的边界:该插件面向 InfluxDB v1。若要采集InfluxDB v2 的指标,原文档给出的方案是改用 prometheus 输入插件,以 Prometheus 格式抓取 v2 的/metrics端点:

[[inputs.prometheus]] urls = ["http://localhost:8086/metrics"] metric_version = 1

插件注册入口位于 plugins/inputs/all/influxdb.go,通过import _ "github.com/influxdata/telegraf/plugins/inputs/influxdb"完成注册;插件主体实现在 plugins/inputs/influxdb/influxdb.go。

配置参数全解

插件完整的可配置项见 sample.conf(该文件通过//go:embed内嵌进二进制,并作为SampleConfig()的返回值)。最小可用的配置如下:

# Read InfluxDB-formatted JSON metrics from one or more HTTP endpoints [[inputs.influxdb]] ## Works with InfluxDB debug endpoints out of the box, ## but other services can use this format too. ## See the influxdb plugin's README for more details. ## Multiple URLs from which to read InfluxDB-formatted JSON ## Default is "http://localhost:8086/debug/vars". urls = [ "http://localhost:8086/debug/vars" ] ## Username and password to send using HTTP Basic Authentication. # username = "" # password = "" ## Optional TLS Config # tls_ca = "/etc/telegraf/ca.pem" # tls_cert = "/etc/telegraf/cert.pem" # tls_key = "/etc/telegraf/key.pem" ## Use TLS but skip chain & host verification # insecure_skip_verify = false ## http request & header timeout timeout = "5s"

各参数说明如下:

参数类型默认值作用
urls字符串数组["http://localhost:8086/debug/vars"]一个或多个待抓取的 HTTP 端点,每个端点都会被并发请求并独立产出度量
username/password字符串发起请求时使用的 HTTP Basic Authentication 凭据
tls_ca/tls_cert/tls_key字符串可选的 TLS 配置,指向 CA 证书、客户端证书与私钥路径
insecure_skip_verify布尔false使用 TLS 时跳过证书链与主机名校验
timeout时长5sHTTP 请求及响应头的超时时间

从源码看,InfluxDB结构体(influxdb.go)将上述参数直接映射为 TOML 字段,并内嵌了tls.ClientConfig以复用 Telegraf 统一的 TLS 配置体系;init()中注册插件时把Timeout默认值设为time.Duration(time.Second * 5)。需要认证的端点会在请求上调用req.SetBasicAuth(username, password),同时所有请求都会携带User-Agent: Telegraf/<version>头(internal.Version来自编译期注入的版本号)。

与所有 Telegraf 插件一样,inputs.influxdb还支持name_overridetagsfieldpass/fielddroptagpass/tagdropalias、处理器排序等全局与插件级配置,详见 docs/CONFIGURATION.md。

采集工作原理:源码级解析流程

Gather是插件的入口(influxdb.go),其执行流程可以概括为四个阶段:

  1. 默认值兜底:若urls为空,自动回退到http://localhost:8086/debug/vars
  2. HTTP 客户端构建:基于timeout设置http.Client的整体超时,并在http.Transport上设置ResponseHeaderTimeout与 TLS 配置。客户端采用懒加载,仅构建一次。
  3. 并发抓取:对每个 URL 启动一个 goroutine 调用gatherURL,通过sync.WaitGroup等待全部完成;单点失败不会中断整体采集,而是通过acc.AddError(err)上报。
  4. 错误聚合:所有 URL 采集结束后统一返回,任一端点的错误已进入 Accumulator 的错误队列。

gatherURL(influxdb.go)则完成真正的解析工作,其关键在于手工 JSON 流式解码。源码注释解释了为什么不直接json.Unmarshalmap[string]point:一旦端点返回的任意值不是对象(例如数组、字符串),Go 解码器会报json: cannot unmarshal array into Go value of type influxdb.point,导致整个响应解析失败。因此实现采用json.Decoder逐 Token 遍历顶层对象:

  • 先确认文档根是{对象;
  • 对每个顶层键读取字符串 key(键名本身不参与度量命名);
  • 特殊结构体进行独立解码:
    • system→ 产出influxdb_system(含current_timestarteduptime);
    • memstats→ 产出influxdb_memstats(Go 内存分配器全套统计,字段见下文);
    • build→ 产出influxdb_buildbranchbuild_timecommitversion);
    • cmdline→ 产出influxdb_cmdline(命令行参数以空格拼接为value字段);
    • crypto→ 产出influxdb_cryptofipsensure_fipsimplementationpassword_hash);
  • 其余所有键一律尝试按point结构解码:pointnametagsvalues三部分组成(定义见 types.go)。若解码失败、或解码后name为空、values为空,则静默跳过——这正是插件能同时容忍“非对象值”“非 point 结构对象”的原因。
  • 每个 point 都会被打上url标签(值为本次抓取的端点地址),并以influxdb_<name>作为最终测量名写入 Accumulator。
  • 特殊计数:统计name == "shard"的 point 个数,最后产出一条无标签的influxdb测量,字段为n_shards

测试用例对以上行为给出了明确佐证:TestBasic(influxdb_test.go)验证了当 JSON 中混有数组、字符串、嵌套对象、空values的 point 时,只有合法 point 与influxdb n_shards=0被产出;TestInfluxDB/TestInfluxDB2验证了真实influx_return.json的 36 条度量产出,其中influxdb_systemuptime字段以无符号整型(u)写入;TestCloud1用真实环境的 4600+ 行/debug/vars快照(testdata/cloud1.json)与期望输出 testdata/cloud1.influx 逐条比对,覆盖了企业版扩展测量(influxdb_aeinfluxdb_clusterinfluxdb_rpc等)的解析。错误处理方面,TestErrorResponse确认非 200 响应会读取响应体(最多 1024 字节,常量maxErrorResponseBodyLength)中的{"error": "..."}字段并拼装为apiError上报。

支持的测量与字段详解

[!NOTE] 插件的测量与字段由 InfluxDB 端/debug/vars实际返回的内容动态构建,不同 InfluxDB 版本之间可能有所差异。下面以当前 InfluxDB v1 常见版本为准列出。

以下测量在源端数据存在时才会生成,且部分标注Enterprise Only的测量仅在 InfluxDB 企业版集群中出现。

influxdb_ae(企业版)

Anti-Entropy(AE)引擎统计,用于修复集群中数据不一致的分片:

  • bytesRx:数据节点接收的字节数。
  • errors:发生错误的 anti-entropy 任务总数。
  • jobs:数据节点已执行的任务总数。
  • jobsActive:当前正在执行(活跃)的任务数。

influxdb_cluster(企业版)

企业版集群数据节点的聚类特性统计:

  • copyShardReq:将一个分片从一个数据节点复制到另一个的内部请求数。
  • createIteratorReq:来自集群其他数据节点的读请求数。
  • expandSourcesReq:为匹配某正则表达式的测量而发起的远程节点请求数。
  • fieldDimensionsReq:关于本节点测量字段、类型与标签键信息的远程请求数。
  • iteratorCostReq:内部迭代器开销请求数。
  • openConnections:数据节点正在处理的开放连接数(含在单个 yamux 连接上复用的逻辑连接)。
  • removeShardReq:删除本节点分片的内部请求数(仅由influxd-ctl remove shard命令触发递增)。
  • writeShardFail:来自远程节点且失败的内部写请求总数。
  • writeShardPointsReq:来自远程节点的每次内部写请求中的点数(无论成功与否)。
  • writeShardReq:来自远程数据节点的内部写请求数(无论成功与否)。

influxdb_cq

连续查询(Continuous Queries)统计:

  • queryFail:已执行但失败的连续查询总数。
  • queryOk:成功执行的连续查询总数。

influxdb_database

数据库维度统计(database标签标识具体库):

  • numMeasurements:指定数据库当前的测量数量。
  • numSeries:指定数据库当前的序列基数。

influxdb_hh / influxdb_hh_database / influxdb_hh_processor(企业版)

Hinted Handoff(HH,提示式交接)机制用于在目标节点不可达时暂存写请求,三个测量分别从引擎整体、单数据库聚合、单队列(分片)三个粒度展开:

  • bytesRead:从 HH 队列读出并发往目标数据节点的点数所占字节。
  • bytesWritten:写入 HH 队列的总字节数。
  • queueBytes:HH 队列中剩余的总字节数。
  • queueDepth:HH 队列中的段(segment)数量(HH 队列由一串 10MB 的“段”文件构成)。
  • writeBlocked:因并发 HH 请求数超限而被阻塞的写入次数。
  • writeDropped:因写入疑似损坏而从 HH 队列丢弃的写入次数。
  • writeNodeReq:成功向目标节点写入一批数据的写请求总数。
  • writeNodeReqFail:将一批数据从 HH 队列写入目标节点失败的写请求总数。
  • writeNodeReqPoints:从 HH 队列成功写入目标节点的点数。
  • writeShardReq:进入 HH 队列的每个写批次请求总数。
  • writeShardReqPoints:进入 HH 队列的点数。

influxdb_hh_processor额外带shardIDnode标签(见 cloud1.influx 中的示例输出);influxdb_hh_node(含queueTotalSize字段)与influxdb_hh_database也按各自粒度出现。

influxdb_httpd

InfluxDB HTTP 服务器统计:

  • authFail:因需要认证但未提供或凭据错误而中止的 HTTP 请求数。
  • clientError:返回 4XX 客户端错误的 HTTP 响应数。
  • fluxQueryReq:已服务的 Flux 查询请求数。
  • fluxQueryReqDurationNs:执行 Flux 查询请求所花费的墙钟时间(纳秒)。
  • pingReq:服务/pingHTTP 端点的次数。
  • pointsWrittenDropped:被存储引擎丢弃的点数。
  • pointsWrittenFail:被/write端点接受但未能持久化的点数。
  • pointsWrittenOK:被/write端点成功接受并持久化的点数。
  • promReadReq:对 Prometheus/read端点的读请求数。
  • promWriteReq:对 Prometheus/write端点的写请求数。
  • queryReq:查询请求数。
  • queryReqDurationNs:查询请求总耗时(纳秒)。
  • queryRespBytes:查询响应返回的总字节数。
  • recoveredPanics:HTTP 处理器恢复的 panic 总数。
  • req:服务的 HTTP 请求总数。
  • reqActive:当前活跃请求数。
  • reqDurationNs:HTTP 请求内部耗时(墙钟,纳秒)。
  • serverError:因服务器错误返回的 HTTP 响应数。
  • statusReq:使用 HTTP/status端点服务的状态请求数。
  • valuesWrittenOK:被/write端点成功接受并持久化的值(字段)数量。
  • writeReq:使用/write端点服务的写请求数。
  • writeReqActive:当前活跃的写请求数。
  • writeReqBytes:写请求通过/write端点接收的行协议数据总字节数。
  • writeReqDurationNs:使用/writeHTTP 端点服务的写请求耗时(纳秒)。

influxdb_memstats

Go 运行时内存分配器统计(对应/debug/vars中的memstats对象,字段名与原文档保持一致的大驼峰命名,经插件原样透传):

  • Alloc:堆对象已分配字节数。
  • BuckHashSys:profile bucket 哈希表占用的内存字节数。
  • Frees:堆对象释放的累计次数。
  • GCCPUFraction:自 InfluxDB 启动以来垃圾回收(GC)占用的可用 CPU 时间比例。
  • GCSys:GC 元数据占用的内存字节数。
  • HeapAlloc:已分配的堆对象字节数。
  • HeapIdle:空闲(未使用)span 的字节数。
  • HeapInuse:使用中 span 的字节数。
  • HeapObjects:已分配的堆对象数量。
  • HeapReleased:归还给操作系统的物理内存字节数。
  • HeapSys:从操作系统获得的堆内存字节数。
  • LastGC:上一次 GC 完成的时间。
  • Lookups:运行时执行的指针查找次数。
  • MCacheInuse:已分配的 mcache 结构字节数。
  • MCacheSys:为 mcache 结构从操作系统获得的内存字节数。
  • MSpanInuse:已分配的 mspan 结构字节数。
  • MSpanSys:为 mspan 结构从操作系统获得的内存字节数。
  • Mallocs:堆对象分配的累计次数。
  • NextGC:下一轮 GC 的目标堆大小。
  • NumForcedGC:应用主动调用 GC 函数强制的 GC 周期数。
  • NumGC:已完成的 GC 周期数。
  • OtherSys:杂项堆外运行时分配的内存字节数。
  • PauseTotalNs:自程序启动以来 GC stop-the-world 暂停的累计纳秒数。
  • StackInuse:栈 span 的字节数。
  • StackSys:从操作系统获得的栈内存字节数。
  • Sys:从操作系统获得的内存总字节数。
  • TotalAlloc:为堆对象分配的累计字节数。

插件在产出该测量时还额外生成了两个派生字段:pause_ns(取最近一次 GC 暂停时长,即PauseNs[(NumGC+255)%256]),以及上述字段对应的下划线小写变体(allocheap_allocgc_cpu_fraction等),参见 influxdb.go。这正是示例输出中出现alloc=...而非Alloc的原因。

influxdb_queryExecutor

查询执行器统计:

  • queriesActive:当前正在处理的活跃查询数。
  • queriesExecuted:已执行(启动)的查询数。
  • queriesFinished:已执行完成的查询数。
  • queryDurationNs:已执行查询的总耗时(纳秒)。
  • recoveredPanics:查询执行器恢复的 panic 数。

influxdb_rpc(企业版)

集群 RPC 调用统计:

  • idleStreams:所有存活 TCP 连接上空闲的多路复用流数量。
  • liveConnections:当前到其他节点的存活 TCP 连接数。
  • liveStreams:所有存活 TCP 连接上当前存活的多路复用流数量。
  • rpcCalls:向远程节点发起的 RPC 调用总数。
  • rpcFailures:未恢复的 RPC 失败总数。
  • rpcReadBytes:RPC 读取的总字节数。
  • rpcRetries:至少重试过一次的 RPC 调用数。
  • rpcWriteBytes:RPC 写入的总字节数。
  • singleUse:通过Dial打开的单次使用连接总数。
  • singleUseOpen:当前打开的单次使用连接数。
  • totalConnections:已建立的 TCP 连接总数。
  • totalStreams:已建立的流总数。

influxdb_runtime

Go 内存分配器记录的 memstat 子集(注意其字段沿用原文档/源端的大驼峰命名,与influxdb_memstats的下划线变体不同):

  • Alloc:当前已分配的堆对象字节数。
  • Frees:已释放(存活)堆对象的累计数量。
  • HeapAlloc:所有堆对象的字节数。
  • HeapIdle:空闲堆对象字节数。
  • HeapInUse:使用中 span 的字节数。
  • HeapObjects:已分配的堆对象数量。
  • HeapReleased:归还给操作系统的物理内存字节数。
  • HeapSys:从操作系统获得的堆内存字节数,衡量为堆预留的虚拟地址空间。
  • Lookups:运行时执行的指针查找次数,主要用于调试运行时内部。
  • Mallocs:堆对象分配总数(存活对象总数即Frees)。
  • NumGC:完成的 GC 周期数。
  • NumGoroutine:Go 协程总数。
  • PauseTotalNs:GC 暂停的总时长(纳秒)。
  • Sys:从操作系统获得的内存总字节数,衡量 Go 运行时为堆、栈及其他内部数据结构预留的虚拟地址空间。
  • TotalAlloc:为堆对象分配的字节总数(对象被释放时该统计不下降)。

influxdb_shard

分片级统计(databaseidengineindexTypepathretentionPolicywalPath等标签标注具体分片):

  • diskBytes:分片大小(字节),包含数据目录与 WAL 目录。
  • fieldsCreate:已创建的字段数量。
  • indexType:索引类型inmemtsi1
  • n_shards:指定数据库中的分片总数。
  • seriesCreate:已创建的序列数量。
  • writeBytes:写入分片的字节数。
  • writePointsDropped:写入中被丢弃的点请求数。
  • writePointsErr:因错误未能写入的点请求数。
  • writePointsOk:成功写入的点数。
  • writeReq:写请求总数。
  • writeReqErr:因错误失败的写请求总数。
  • writeReqOk:成功的写请求总数。

influxdb_subscriber

订阅统计:

  • createFailures:创建失败的订阅数。
  • pointsWritten:成功写入订阅者的总点数。
  • writeFailures:写入订阅者失败的批次总数。

influxdb_tsm1_cache

TSM 缓存统计:

  • cacheAgeMs:采样时刻距缓存上次快照的时长(毫秒)。
  • cachedBytes:已写入快照的总字节数。
  • diskBytes:磁盘快照大小(字节)。
  • memBytes:内存缓存大小(字节)。
  • snapshotCount:当前活跃快照的层(数量)。
  • WALCompactionTimeMs:压缩快照期间持有提交锁的时长(毫秒)。
  • writeDropped:因超时被丢弃的写入总数。
  • writeErr:失败的写入总数。
  • writeOk:成功的写入总数。

influxdb_tsm1_engine

TSM 存储引擎统计,覆盖 cache 压缩与 TSM full/level 1/2/3/optimize 各档位压缩的耗时(纳秒)、错误数、队列深度与活跃/累计次数:

  • cacheCompactionDuration/cacheCompactionErr/cacheCompactions/cacheCompactionsActive
  • tsmFullCompactionDuration/tsmFullCompactionErr/tsmFullCompactionQueue/tsmFullCompactions/tsmFullCompactionsActive
  • tsmLevel1CompactionDuration/tsmLevel1CompactionErr/tsmLevel1CompactionQueue/tsmLevel1Compactions/tsmLevel1CompactionsActive
  • tsmLevel2CompactionDuration/tsmLevel2CompactionErr/tsmLevel2CompactionQueue/tsmLevel2Compactions/tsmLevel2CompactionsActive
  • tsmLevel3CompactionDuration/tsmLevel3CompactionErr/tsmLevel3CompactionQueue/tsmLevel3Compactions/tsmLevel3CompactionsActive
  • tsmOptimizeCompactionDuration/tsmOptimizeCompactionErr/tsmOptimizeCompactionQueue/tsmOptimizeCompactions/tsmOptimizeCompactionsActive

influxdb_tsm1_filestore

TSM 文件存储统计:

  • diskBytes:TSM 文件存储占用的磁盘字节数。
  • numFiles:TSM 文件存储中的文件总数。

influxdb_tsm1_wal

TSM 预写日志(WAL)统计:

  • currentSegmentDiskBytes:当前段磁盘大小(字节)。
  • oldSegmentDiskBytes:旧段磁盘大小(字节)。
  • writeErr:因错误失败的写入数。
  • writeOK:成功的写入数。

influxdb_write

写入路径统计:

  • pointReq:请求写入的总点数。
  • pointReqHH(企业版):本节点接收后进入目标节点 hinted handoff 的总点数。
  • pointReqLocal(企业版):尝试写入本机(local)节点分片的点请求数。
  • pointReqRemote(企业版):本节点接收但需转发到远程节点分片的点数。
  • pointsWrittenOK:写入/write端点并成功持久化的点数。
  • req:请求写入的批次总数。
  • subWriteDrop:未能发送到订阅分发器的批次总数。
  • subWriteOk:成功发送到订阅分发器的批次总数。
  • valuesWrittenOK:写入/write端点并成功持久化的值(字段)数量。
  • writeDrop:因时间戳不匹配任何现有保留策略而丢弃的点写入请求总数。
  • writeError:因写入本地或远程分片失败而未能成功写入的点批次总数。
  • writeOk:以请求的一致性级别写入的批次总数。
  • writePartial(企业版):写入至少一个节点但未达到请求一致性级别的批次总数。
  • writeTimeout:未在默认写超时时间内完成的写请求总数。

多端点配置与并行采集

插件天然支持在urls中配置多个端点,例如监控同一集群的多台 InfluxDB 节点:

[[inputs.influxdb]] urls = [ "http://127.0.0.1:8086/debug/vars", "http://192.168.2.1:8086/debug/vars" ]

每个端点都会被独立、并发地请求(Gather中对每个 URL 启动 goroutine),产出的每条度量都会携带对应的url标签(源码在 influxdb.go 中将url写入 point 标签,特殊结构体同样带url标签),因此可以方便地在查询时按来源节点区分、聚合或告警。对于“InfluxDB 格式端点”而言,只要 JSON 顶层是对象且内部结构符合{name, tags, values}的 point 约定,任何服务都可以接入,这与是否真实关联 Influx 数据库无关。

实战验证:--test模式快速出图

配置完成后,可以用 Telegraf 的--test模式在不落库的情况下单次抓取并打印度量,快速验证插件工作是否正常(以下示例来自原文档):

telegraf --config ~/ws/telegraf.conf --input-filter influxdb --test

输出形如:

influxdb_database,database=_internal,host=tyrion,url=http://localhost:8086/debug/vars numMeasurements=10,numSeries=29 1463590500247354636 influxdb_httpd,bind=:8086,host=tyrion,url=http://localhost:8086/debug/vars req=7,reqActive=1,reqDurationNs=14227734 1463590500247354636 influxdb_measurement,database=_internal,host=tyrion,measurement=database,url=http://localhost:8086/debug/vars numSeries=1 1463590500247354636 influxdb_memstats,host=tyrion,url=http://localhost:8086/debug/vars alloc=7642384i,buck_hash_sys=1463471i,frees=1169558i,gc_sys=653312i,gc_cpu_fraction=0.00003825652361068311,heap_alloc=7642384i,heap_idle=9912320i,heap_inuse=9125888i,heap_objects=48276i,heap_released=0i,heap_sys=19038208i,last_gc=1463590480877651621i,lookups=90i,mallocs=1217834i,mcache_inuse=4800i,mcache_sys=16384i,mspan_inuse=70920i,mspan_sys=81920i,next_gc=11679787i,num_gc=141i,other_sys=1244233i,pause_total_ns=24034027i,stack_inuse=884736i,stack_sys=884736i,sys=23382264i,total_alloc=679012200i 1463590500277918755 influxdb_shard,database=_internal,engine=tsm1,host=tyrion,id=4,path=/Users/sparrc/.influxdb/data/_internal/monitor/4,retentionPolicy=monitor,url=http://localhost:8086/debug/vars fieldsCreate=65,seriesCreate=26,writePointsOk=7274,writeReq=280 1463590500247354636 influxdb_subscriber,host=tyrion,url=http://localhost:8086/debug/vars pointsWritten=7274 1463590500247354636 influxdb_tsm1_cache,database=_internal,host=tyrion,path=/Users/sparrc/.influxdb/data/_internal/monitor/1,retentionPolicy=monitor,url=http://localhost:8086/debug/vars WALCompactionTimeMs=0,cacheAgeMs=2809192,cachedBytes=0,diskBytes=0,memBytes=0,snapshotCount=0 1463590500247354636 influxdb_tsm1_filestore,database=_internal,host=tyrion,path=/Users/sparrc/.influxdb/data/_internal/monitor/2,retentionPolicy=monitor,url=http://localhost:8086/debug/vars diskBytes=52907 1463590500247354636 influxdb_tsm1_wal,database=_internal,host=tyrion,path=/Users/sparrc/.influxdb/wal/_internal/monitor/3,retentionPolicy=monitor,url=http://localhost:8086/debug/vars currentSegmentDiskBytes=0,oldSegmentsDiskBytes=65651 1463590500247354636 influxdb_write,host=tyrion,url=http://localhost:8086/debug/vars pointReq=7274,pointReqLocal=7274,req=280,subWriteOk=280,writeOk=280 1463590500247354636 influxdb_shard,host=tyrion n_shards=4i 1463590500247354636

从输出可以看到几个值得留意的实现细节:

  • influxdb_memstatsallocgc_cpu_fraction等为插件生成的下划线小写字段,其中pause_ns是最近一次 GC 暂停时长;
  • 所有测量都带url标签,部分还带有databasebindpathretentionPolicyengineid等维度标签;
  • 末尾的influxdb n_shards=4i是无标签汇总测量,用于快速了解分片总量;
  • 整数型字段以i后缀标识,浮点与布尔、字符串字段按各自类型透传(TestBasic中已验证b: trues: "string"f: 0.5等类型的保留)。

错误处理与边界行为

插件对异常情况有清晰的兜底策略,全部可在 influxdb.go 及测试中确认:

  • 非 200 状态码gatherURL调用readResponseError构造apiError,尽力从响应体(最多 1024 字节)中解析{"error": "..."}字段拼入错误信息(influxdb.go)。TestErrorResponse验证了 401 响应能正确提取unable to parse authentication credentials
  • JSON 根非对象:直接返回document root must be a JSON object错误。
  • 部分字段损坏:单个特殊结构体解码失败会被continue跳过,不影响同一响应中其他度量的产出。
  • 请求失败与超时timeout同时作用于整体客户端与响应头等待;单 URL 失败通过acc.AddError上报,不影响其余 URL 的并发采集。
  • --test或真实采集均不落库修改:插件只读端点数据,对 InfluxDB 仅发起 GET 请求。

延伸阅读

  • 插件文档与示例配置:plugins/inputs/influxdb/README.md、plugins/inputs/influxdb/sample.conf
  • 插件核心实现:plugins/inputs/influxdb/influxdb.go、数据结构定义 plugins/inputs/influxdb/types.go
  • 单元测试与真实快照:plugins/inputs/influxdb/influxdb_test.go、plugins/inputs/influxdb/testdata/cloud1.json、plugins/inputs/influxdb/testdata/cloud1.influx
  • 插件注册入口:plugins/inputs/all/influxdb.go
  • InfluxDB v2 指标采集请参考 prometheus 输入插件;插件通用配置(别名、标签、字段过滤、顺序控制等)见 docs/CONFIGURATION.md

【免费下载链接】telegrafAgent for collecting, processing, aggregating, and writing metrics, logs, and other arbitrary data.项目地址: https://gitcode.com/GitHub_Trending/te/telegraf

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询