TCollector

tcollector是一个 Client 端进程,它从本地收集器收集数据并将数据推送到 OpenTSDB。您可以在所有主机上运行它,并完成将每个主机的数据发送到 TSD 的工作。

OpenTSDB 旨在简化收集和向其中写入数据的过程。它具有一个简单的协议,即使对于 shell 脚本来说,也足够简单以开始发送数据。但是,要可靠且始终如一地执行此操作比较困难。 TSD 服务器关闭时该怎么办?您如何确保收藏家保持运转?这是 tcollector 进入的地方。

Tcollector 为您做几件事:

  • 运行所有数据收集器并收集其数据

  • 是否所有连接 Management 工作都可以将数据发送到 TSD

  • 您不必将所有这些代码都嵌入到您编写的每个收集器中

  • 对重复值进行重复数据删除

  • 为您处理所有有线协议的工作,以及将来的增强功能

Deduplication

通常,您想收集有关系统中所有内容的数据。这会生成许多数据点,其中大多数数据点不会随时间变化(如果有的话)。但是,当它们确实改变时,您需要细粒度的分辨率。 Tcollector 会为它 Management 的所有收集器记住在所有时间序列中发送的最后一个值和时间戳。如果该值在采样间隔之间没有变化,它将禁止发送该数据点。值确实发生更改(或已过 10 分钟)后,它将发送最后一个抑制值和时间戳,以及当前值和时间戳。这样,您的所有图形等都是正确的。重复数据删除通常会大大减少 TSD 需要收集的数据点数量。这样可以减少后端的网络负载和存储。但是,将来的 OpenTSDB 版本将通过使用 RLE(除其他功能外)改善存储格式,从而使其基本上可以自由存储重复值。

使用 tcollector 收集大量 Metrics

tcollector 中的收集器可以用任何语言编写。它们只需要可执行文件并将数据输出到 stdout。 Tcollector 将处理其余的工作。收集器放置在collectors目录中。 Tcollector 遍历该目录中以数字命名的每个目录,并运行每个目录中的所有收集器。如果将目录命名为60,则 tcollector 将尝试每 60 秒运行该目录中的每个收集器。支持的最短间隔是 15 秒,对于小于 15 秒的间隔,应在 0 文件夹中使用运行时间较长的收集器。每次运行收集器之后,TCollector 都会休眠 15 秒,因此 15 秒的间隔是唯一实际支持的间隔。例如,这将允许您每 15、30、45、60、75 或 90 秒运行收集器,但不能运行 80 或 55 秒。将目录0用于长期且连续运行的所有收集器。 Tcollector 将读取它们的输出,并在死亡时重新生成它们。通常,您要编写寿命长的收集器,因为这样做开销较小。 OpenTSDB 旨在为每个度量标准包含大量数据点(对于大多数度量标准,我们每 15 秒发送一次数据点)。

如果collectors目录中有任何非数字命名目录,则将忽略它们。我们为所有收集器使用的库和配置数据提供了一个libetc目录。

安装 tcollector

您需要从 GitHub 克隆 tcollector:

git clone git://github.com/OpenTSDB/tcollector.git

并编辑“ tcollector/startstop”脚本以设置以下变量:TSD_HOST=dns.name.of.tsd

为了避免必须为 tcollector 跟踪的每个 Metrics 运行mkmetric,可以使用--auto-metric标志启动 TSD。这对于快速入门很有用,但不建议长期保留此标志,以免意外创建 Metrics。

与 tcollectorBinding 在一起的收集器

以下是我们作为基本软件包的一部分包含的收集器,以及它们报告的所有度量标准名称及其含义。如果您有其他想要贡献的内容,我们很乐意听到有关它们的信息,因此我们可以参考它们,或在您的许可下将它们包含在将来的发行版中。

General collectors

0/dfstat.py

这些统计信息与/usr/bin/df util 提供的统计信息相似。

    • df.bytes.total

    • 数据总大小

    • df.bytes.used

    • bytes used

    • df.bytes.free

    • bytes free

    • df.inodes.total

    • 索引节点总数

    • df.inodes.used

    • 使用的索引节点数

    • df.inodes.free

    • 可用的 inode 数量

这些 Metrics 包括用每个安装点标记的时间序列以及文件系统的 fstype。该收集器会过滤掉所有 cgroup,debugfs,devtmpfs,rpc_pipefs,rootfs 文件系统,以及在/dev//sys//proc//lib/下装载的任何安装点。

使用这些标记,您可以选择仅绘制特定文件系统的图形,或绘制具有特定 fstype(例如 ext3)的所有文件系统的图形。

0/ifstat.py

这些统计资料来自/proc/net/dev

    • proc.net.bytes

    • (速率)字节 Importing/输出

    • proc.net.packets

    • (速率)数据包进/出

    • proc.net.errs

    • (速率)数据包错误 Importing/输出

    • proc.net.dropped

    • (速率)丢包进/出

这些是接口计数器,标有接口iface=direction= in 或 out。仅跟踪ethN接口。我们有意排除bondN接口,因为绑定接口仍在其子ethN接口上保留计数器,并且如果您未在iface=上选择,我们也不想重复计算一个盒子的网络流量。

0/iostat.py

数据来自/proc/diskstats

    • iostat.disk.*

    • per-disk stats

    • iostat.part.*

    • 每个分区的统计信息(请参阅以下有关不同 Metrics 的说明,具体取决于您在 2.6.25 之前还是之后的版本中拥有 2.6 内核)。

See iostats.txt

/proc/diskstats具有给定物理设备的 11 个统计信息。除了ios_in_progress,这些都是速率计数器。

.read_requests       Number of reads completed
.read_merged         Number of reads merged
.read_sectors        Number of sectors read
.msec_read           Time in msec spent reading
.write_requests      Number of writes completed
.write_merged        Number of writes merged
.write_sectors       Number of sectors written
.msec_write          Time in msec spent writing
.ios_in_progress     Number of I/O operations in progress
.msec_total          Time in msec doing I/O
.msec_weighted_total Weighted time doing I/O (multiplied by ios_in_progress)

在 2.6.25 及更高版本中,报告的分区统计信息与磁盘相同。

Note

在 2.6.25 之前的 2.6 中,分区每个分区只有 4 个统计信息

.read_issued
.read_sectors
.write_issued
.write_sectors

对于分区,这些*_issued是合并请求之前收集的计数器,因此与*_requests不同(后者是合并后的,更紧密地表示磁盘事务的实际数量)。

鉴于 diskstats 同时提供了每个磁盘和每个分区的数据,出于 TSDB 的目的,我们将它们置于不同的 Metrics 下(与相同的 Metrics 和标签不同)。否则,如果您查看给定的度量标准,则给定框的数据将被重复计算,因为给定的操作将同时增加磁盘系列和分区系列。为了解决这个问题,我们将磁盘数据输出到iostat.disk.*,将分区数据输出到iostat.part.*

0/netstat.py

套接字分配和网络统计信息。

来自/proc/net/sockstat的 Metrics。

    • net.sockstat.num_sockets

    • 分配的套接字数(仅 TCP)

    • net.sockstat.num_timewait

    • 当前处于TIME_WAIT状态的 TCP 套接字数

    • net.sockstat.sockets_inuse

    • 使用中的套接字数(TCP/UDP /原始)

    • net.sockstat.num_orphans

    • 孤立 TCP 套接字的数量(未附加到任何文件 Descriptors)

    • net.sockstat.memory

    • 为此套接字类型分配的内存(以字节为单位)

    • net.sockstat.ipfragqueues

    • 当前有片段排队 await 重组的 IP 流数

来自/proc/net/netstat(netstat -s命令)的 Metrics。

    • net.stat.tcp.abort

    • 内核必须中止的连接数。<code> type = memory</code>尤其糟糕,内核由于孤立套接字过多而不得不放弃连接。其他类型是正常的(例如超时)

    • net.stat.tcp.abort.failed

    • 内核由于甚至没有足够的内存来重置连接而失败中止连接的次数(错误)

    • net.stat.tcp.congestion.recovery

    • 内核检测到虚假重传并能够恢复部分或全部 CWND 的次数

    • net.stat.tcp.delayedack

    • 发送的不同类型的延迟 ACK 数。

    • net.stat.tcp.failed_accept

    • 3WHS 之后必须断开连接的次数。 reason=full_acceptq表示应用程序接受连接的速度不够快。您也应该看到 SYN cookie

    • net.stat.tcp.invalid_sack

    • 我们看到的 diff 类型的无效 SACK 数量。 (需要 Linux v2.6.24-rc1 或更高版本)

    • net.stat.tcp.memory.pressure

    • 套接字进入“内存压力”模式的次数(不太好)。

    • net.stat.tcp.memory.prune

    • 套接字由于内存不足(坏)而不得不丢弃接收到的数据的次数

    • net.stat.tcp.packetloss.recovery

    • 根据恢复类型(例如快速重传与 SACK)从数据包丢失中恢复的次数

    • net.stat.tcp.receive.queue.full

    • 由于套接字的接收队列已满,必须丢弃接收到的数据包的次数。 (需要 Linux v2.6.34-rc2 或更高版本)

    • net.stat.tcp.reording

    • 我们检测到重新排序的次数以及如何

    • net.stat.tcp.syncookies

    • SYN Cookie(均已发送 K 个)

0/nfsstat.py

这些统计资料来自/proc/net/rpc/nfs

    • nfs.client.rpc.stats

    • RPC 统计信息计数器

它标记了操作类型( type =)。有 3 种操作:authrefrsh-刷新身份验证信息的次数,calls-进行呼叫的次数,以及retrans-重传的次数

    • nfs.client.rpc

    • RPC 呼叫计数器

它标记了执行操作的 NFS 服务器的版本(version=)和操作名称(op=)

有关操作的说明,请参见相应的 RFC:NFS 版本。 3 RFC1813,NFS 版本。 4 RFC3530,NFS 版本。 4.1 RFC5661

0/procnettcp.py

这些统计资料全部来自/proc/net/tcp{,6}。 (请注意,如果启用了 IPv6,某些 IPv4 连接似乎已放入/proc/net/tcp6)。收集器在两次间隔之间睡眠 60 秒。部分原因是较旧内核的内核性能问题,部分是由于具有许多 TCP 连接的系统,此收集器有时可能需要 5 分钟或更长时间才能运行一个时间间隔,因此数据点的频率可能会因系统而异。

    • proc.net.tcp

    • TCP 连接数

对于收集器的每次运行,我们对每个连接进行分类并生成小计。 TSD 将在显示图形时自动总计这些总计,但是您可以向下钻取每个可能的总计或特定总计。每个连接都使用user=username标记进行细分(带有我们关注的固定用户列表,或者如果不在列表中,则将其置于“其他”之下)。它还用state=分解为状态(构建,time_wait 等)。它也可以通过\ service =</code>(http,mysql,memcache 等)分解为服务。请注意,一旦关闭连接,Linux 似乎会忘记谁打开/处理了连接。例如,对于 time_wait 中的连接,它们将始终显示 user = root。该收集器确实会生成大量数据点,因为点数为(S (U 1) V),其中 S = TCP 状态数,U =您跟踪的用户数和 V =服务数(端口集合)。重复数据删除程序确实可以很好地消除这种情况,因为通常只看到 10 个 TCP 状态中的 3 个。在典型的服务器上,每个间隔可以减少到 10 个以下的值。

0/procstats.py

来自/proc的其他统计信息。

    • proc.stat.cpu

    • (速率)CPU 计数器(jiffies),由 cpu 类型(类型=用户,nice,系统,空闲,iowait,irq,softirq 等)标记。作为一种速率,每个主机最多应聚合大约 100 * numcpu。最好将其视为 type = *或也许 type ={user|nice|system|iowait|irq}

    • proc.stat.intr

    • (速率)中断数

    • proc.stat.ctxt

    • (速率)上下文切换数

See http://www.linuxhowtos.org/System/procstat.htm

    • proc.meminfo.*

    • 来自/proc/meminfo的内存使用情况统计信息。见Linux 内核文档

    • proc.loadavg.*

    • /proc/loadavg中的 1 分钟,5 分钟,15 分钟,可运行,total_threadsMetrics

    • proc.uptime.total

    • (速率)自启动以来的秒数

    • proc.uptime.now

    • (速率)自引导以来系统已空闲的秒数

    • proc.kernel.entropy_avail

    • Importing 池中可用的熵量(以位为单位)(加密强度高且支持/dev/random的熵)。在进行 SSL 解包的前端服务器上观察此值,如果该值太低,则 SSL 性能将受到影响

    • sys.numa.zoneallocs

    • 是否从首选节点(type=hit)分配的页数(type=miss)

    • sys.numa.foreign_allocs

    • 该节点分配的页面数,因为首选节点没有可用页面来容纳请求

    • sys.numa.allocation

    • 在此节点上执行的进程的本地(type=local)或远程(type=remote)分配的页面数

    • sys.numa.interleave

    • 交错策略成功分配的页面数

0/smart-stats.py

来自 SMART 磁盘的统计信息。

    • smart.raw_read_error_rate

    • 与从磁盘表面读取数据时发生的硬件读取错误率有关的数据。原始值对于不同的供应商具有不同的结构,通常作为十进制数没有意义。 (特定于供应商)

    • smart.throughput_performance

    • 硬盘驱动器的整体吞吐性能

    • smart.spin_up_time

    • 主轴旋转的平均时间(从零 RPM 到完全运行[毫秒])

    • smart.start_stop_count

    • 主轴启动/停止周期的计数

    • smart.reallocated_sector_ct

    • 重新分配的扇区数

    • smart.seek_error_rate

    • 磁头的寻道误差率。 (特定于供应商)

    • smart.seek_time_performance

    • 磁头寻道操作的平均性能

    • smart.power_on_hours

    • Boot 状态下的小时数,显示 Boot 状态下的小时总数(或分钟或秒)。 (特定于供应商)

    • smart.spin_retry_count

    • 重试旋转启动尝试的次数

    • smart.recalibration_retries

    • 请求重新校准的计数(在第一次尝试失败的情况下)

    • smart.power_cycle_count

    • 完整的硬盘电源开/关次数

    • smart.soft_read_error_rate

    • 报告给 os 的未更正的读取错误

    • smart.program_fail_count_chip

    • 自从部署驱动器以来,Flash 程序操作失败的总数

    • smart.erase_fail_count_chip

    • "Pre-Fail" Attribute

    • smart.wear_leveling_count

    • 在单个闪存块上执行的最大擦除操作数

    • smart.used_rsvd_blk_cnt_chip

    • 芯片已使用的保留块数

    • smart.used_rsvd_blk_cnt_tot

    • “失败前”属性(至少 HP 设备)

    • smart.unused_rsvd_blk_cnt_tot

    • “失败前”属性(至少三星设备)

    • smart.program_fail_cnt_total

    • 自从部署驱动器以来,Flash 程序操作失败的总数

    • smart.erase_fail_count_total

    • "Pre-Fail" Attribute

    • smart.runtime_bad_block

    • 所有读取/编程/擦除失败的总数

    • smart.end_to_end_error

    • 通过驱动器的缓存 RAM(至少是惠普)到媒体的数据路径中发生的奇偶校验错误的计数

    • smart.reported_uncorrect

    • 使用硬件 ECC 无法恢复的错误计数

    • smart.command_timeout

    • 由于 HDD 超时而中止的操作计数

    • smart.high_fly_writes

    • HDD 生产商实施了一个 Fly Height Monitor,该监视器试图通过检测记录头何时飞出其正常工作范围来为写操作提供额外的保护。如果遇到不安全的飞行高度条件,则写入过程将停止,并且信息将被重写或重新分配到硬盘驱动器的安全区域。此属性指示在驱动器的使用寿命内检测到的这些错误的计数

    • smart.airflow_temperature_celsius

    • Airflow temperature

    • smart.g_sense_error_rate

    • 由外部引起的冲击和振动导致的错误计数

    • smart.power-off_retract_count

    • 磁头从介质中装入的次数

    • smart.load_cycle_count

    • 进入头部着陆区位置的装载/卸载循环计数

    • smart.temperature_celsius

    • 当前内部温度

    • smart.hardware_ecc_recovered

    • 使用硬件 ECC 恢复的错误计数

    • smart.reallocated_event_count

    • 重新 Map 操作数。此属性的原始值显示尝试将数据从重新分配的扇区传输到备用区域的总次数

    • smart.current_pending_sector

    • “不稳定”扇区的数量(由于不可恢复的读取错误,正在 await 重新 Map)

    • smart.offline_uncorrectable

    • 读/写扇区时不可纠正错误的总数

    • smart.udma_crc_error_count

    • 由 ICRC(接口循环冗余校验)确定的通过接口电缆进行数据传输的错误计数

    • smart.write_error_rate

    • 写入扇区时的错误总数

    • smart.media_wearout_indicator

    • 归一化值 100(SSD 是新的),并且下降到最小值 1

    • smart.transfer_error_rate

    • 数据传输期间链接重置的次数

    • smart.total_lba_writes

    • 书面 LBA 总数

    • smart.total_lba_read

    • 读取的 LBA 总数

Metrics 的描述可以在聪明。维基百科上的文章找到。理解/查找度量标准的最佳方法是查看生产者的规格。

Other collectors

0/couchbase.py

来自 couchbase(面向文档的 NoSQL 数据库)的统计信息。

所有 Metrics 均标有相关存储区的名称(bucket=)。存储桶是 Couchbase 服务器群集内物理资源的逻辑分组。群集中的多个 Client 端应用程序可以使用它们。存储桶提供了一种用于组织,Management 和分析数据存储资源的安全机制。

有关 Metrics 的描述,请参考以下文档:Cbstats documentation

0/elasticsearch.py

来自 Elastic Search(搜索和分析引擎)的统计信息。

有关 Metrics 的描述,请参考以下文档:ElasticSearch 集群 API

0/hadoop_datanode_jmx.py

来自 Hadoop 的统计信息(用于分布式处理的框架),DataNode 统计信息。

默认情况下,收集器会禁用以下 Metrics:修订,hdfsUser,hdfsDate,hdfsUrl,日期,hdfsRevision,用户,hdfsVersion,URL,版本,NamenodeAddress,Version,RpcPort,HttpPort,CurrentThreadCpuTime,CurrentThreadUserTime,StorageInfo,VolumeInfo。

有关 Metrics 的描述,请参考以下文档:HBase metrics

0/haproxy.py

来自 Haproxy 的统计信息(TCP/HTTP 负载平衡器)。

    • haproxy.current_sessions

    • 当前会话数

    • haproxy.session_rate

    • 每秒新会话数

所有 Metrics 都标记有服务器(server=)和群集(cluster=)。

有关度量标准描述,请参见以下文档:Haproxy configuration#9.2.Unix Socket 命令

0/hbase_regionserver_jmx.py

来自 Hadoop 的统计信息(用于分布式处理的框架),RegionServer 统计信息。

默认情况下,收集器会禁用以下度量标准:修订,hdfsUser,hdfsDate,hdfsUrl,日期,hdfsRevision,用户,hdfsVersion,URL,版本,版本,RpcPort,HttpPort,HeapMemoryUsage,NonHeapMemoryUsage。

有关 Metrics 的描述,请参考以下文档:HBase metrics

0/mongo.py

来自 Mongo 的统计信息(文档 NoSQL 数据库)。

有关 Metrics 的描述,请参考以下文档:Mongo DB 服务器状态

0/mysql.py

来自 MySQL(关系数据库)的统计信息。

有关度量标准描述,请参考以下文档:InnoDB Innodb monitors,Global Show status,Engine Show engine,Slave 显示奴隶状态,Process 列表显示流程清单

0/postgresql.py

PostgreSQL(关系数据库)的统计信息。

有关 Metrics 的描述,请参考以下文档:PostgreSQL 监视统计信息

0/redis-stats.py

来自 Redis(键值存储)的统计信息。

有关 Metrics 的描述,请参考以下文档:Redis 信息命令

0/riak.py

Riak 的统计信息(文档 NoSQL 数据库)。

有关 Metrics 的描述,请参考以下文档:Riak statistics

0/varnishstat.py

来自 Varnish(HTTP 加速器)的统计信息。

默认情况下,所有收集的 Metrics 都可以通过编辑收集器的“ vstats”数组来更改。

有关度量标准的描述,请参考以下文档:运行“ varnishstat -l”列出可用的度量标准。

0/zookeeper.py

Zookeeper 的统计信息(集中式服务,用于分布式同步)。

有关 Metrics 的描述,请参考以下文档:ZookeeperManagement 员命令