#metrics #command #command-line #line #service #bosun #scollector

bin+lib rs-collector

用 Rust 编写的与 scollector 兼容的遥测收集器

4 个版本

使用旧 Rust 2015

0.1.7 2018 年 6 月 18 日
0.1.3 2018 年 2 月 20 日
0.1.2 2017 年 9 月 18 日
0.1.1 2017 年 9 月 6 日
0.0.9 2017 年 8 月 7 日

数据库接口 中排名 1022

MIT 许可协议

135KB
2.5K SLoC

rs-collector

Release Status Linux & OS X Build Status GitHub release license Ansible Role

rs-collector 是一个兼容 Bosun 的收集器,用于各种未被 scollector 覆盖的服务,并且我们在 CenterDevice 中使用。

注意:请务必注意,尽管我们已经成功在生产系统中运行了数月的 rs-collector,但这不是一个稳定的软件。

目录 使用 DocToc 生成

收集器

  1. Galera - 收集 MySQL Galera 集群的集群状态和集群同步性能指标。
  2. HasIpAddr - 检查主机是否绑定了特定的 IPv4 地址。
  3. JVM - 收集垃圾回收统计信息。
  4. Megaraid - 收集 Megaraid 磁盘统计信息。
  5. MongoDB - 收集副本集指标。
  6. Postfix - 收集所有 postfix 队列的队列长度。
  7. rs-collector - 收集 rs-collector 的内部指标。

下面是关于收集器的详细信息。

Galera

Galera 收集器收集 MySQL Galera 集群的集群状态和集群同步性能指标。我们使用它来监视集群脑裂和一般退化情况。所有可用指标的全列表在 galera.rs 文件中的函数 metadata

Galera 收集器支持 Linux 上的 SSL 传输加密。有关启用 SSL 的示例配置,请参阅示例配置。

示例警报

alert galera.cluster.state.uuid.no.consensus {
  template = ...
  critNotification = default

  $metric = avg:galera.wsrep.cluster.state.uuid{domain=wildcard(*)}
  $q=q("$metric", "5m", "")
  $a = avg($q)
  $f = first($q)
  $q_alert = ($a - $f) != 0
  crit = $q_alert
}

alert galera.cluster.state.not.primary {
  template = ...
  critNotification = default

  $metric = sum:galera.wsrep.cluster.status{host=wildcard(*),domain=wildcard(*)}
  $q = q("$metric", "5m", "")
  $t = t(last($q), "domain")
  $q_alert = sum($t)
  $primaryValue = 0
  crit = $q_alert != $primaryValue
}

alert galera.local.state.not.synced {
  template = ...
  critNotification = default

  $metric = zimsum:5m-avg:galera.wsrep.local.state{domain=wildcard(*)}
  $q = q("$metric", "5m", "")
  $q_alert = last($q)
  $syncedValue = 12
  crit = $q_alert != $syncedValue
}

alert galera.cluster.size.degraded {
  template = ...
  critNotification = default

  $metric = avg:galera.wsrep.cluster.size{domain=wildcard(*)}
  $q = q("$metric", "5m", "")
  $q_alert = last($q)
  $critValue = 3
  crit = $q_alert != $critValue
}

HasIpAddr

《HasIpAddr》收集器根据主机是否已绑定特定的IPv4地址发送1或0,分别表示已绑定或未绑定。这在主机动态绑定或释放IPv4地址的情况下非常有用。例如,在keepalived VRRP集群中,它允许Bosun检查虚拟、高可用IP地址绑定在多少个主机上。

在我们的生产集群中,我们观察到没有任何集群成员绑定虚拟IP地址的情况。这个收集器允许我们为这种情况定义一个警报。

示例警报

alert os.net.vrrp-vip-failed {
  template = ...
  critNotification = default

  $metric = sum:os.net.has_ipv4s{ipv4=wildcard(*)}

  $q_alert = sum(t(last(q("$metric", "5m", "")), "ipv4"))

  $expected = 1
  $critValue = $expected
  crit = $q_alert != $critValue
}

JVM

《JVM》收集器收集垃圾收集统计信息,即jstat -gc为每个指定的、正在运行的JVM显示的信息。这个收集器与OpenJDK "7u51-2.4.6-1ubuntu4"和Oracle JDK "1.8.0_121"进行了测试。JVM通过匹配类名或命令行参数的正则表达式进行识别。

此收集器仅收集指定JVM的统计信息;参见图例配置。目前它不能区分同一识别JVM的多个实例。

Megaraid

《Megaraid》收集器使用MegaCLI工具收集磁盘驱动器统计信息。它收集的统计信息如下:

  • hw.storage.drivestats.mediaerrors:RAID控制器报告的设备媒体错误数。
  • hw.storage.drivestats.othererrors:RAID控制器报告的设备其他错误数。
  • hw.storage.drivestats.predfailerrors:RAID控制器认为重要的错误数。
  • hw.storage.drivestats.smartflag
  • hw.storage.drivestats.firmwarestate
  • hw.storage.drivestats.predfaileventno:最近记录的预测性故障事件的序列号。

Mongo

《Mongo》收集器收集MongoDB连接、操作计数器、副本集和集群指标。我们使用它来检查集群脑裂和一般退化情况。所有可用指标的全列表可在mongo.rs中的函数metadata中找到。

对于连接和操作统计,以下指标很有帮助:

  • mongo.connections.current收集从客户端到数据库服务器的传入连接数。此数字包括当前shell会话。考虑connections.available的值以增加此数据的上下文。此值将包括所有传入连接,包括任何shell连接或其他服务器(如副本集成员或mongos实例)的连接。
  • mongo.connections.available收集可用的未使用传入连接数。将此值与connections.current的值结合使用,以了解数据库的连接负载,并参阅UNIX ulimit设置文档以获取有关系统阈值的信息。
  • mongo.connections.totalCreated计算已创建到服务器的所有传入连接数。此数字包括后来已关闭的连接。
  • mongo.opcounters.insert收集自mongod实例上次启动以来接收到的插入操作总数。
  • mongo.opcounters.query收集自mongod实例上次启动以来接收到的查询总数。
  • mongo.opcounters.update收集自mongod实例上次启动以来接收到的更新操作总数。
  • mongo.opcounters.delete 用于收集自 mongod 实例上次启动以来的删除操作总数。
  • mongo.opcounters.getmore 用于收集自 mongod 实例上次启动以来的“getmore”操作总数。即使查询次数较低,此计数器也可能很高。从副节点发送 getMore 操作是复制过程的一部分。
  • mongo.opcounters.command 用于收集自 mongod 实例上次启动以来向数据库发出的命令总数。 mongo.opcounters.command 计算所有命令,但不是写入命令:插入、更新和删除。

对于副本集和集群监控,以下两个指标很有帮助

  • mongo.replicasets.members.mystate 从每个副本集成员收集 "myState" 变量。这允许计算特定副本集是否处于正常状态。
  • mongo.replicasets.oplog_lag.[min,avg,max] 收集副本集主节点与对应从节点之间的最小、平均和最大 oplog 复制延迟。这些值仅在当前活动的主节点上测量。

示例警报

alert mongo.replicaset.state.unexpected {
  template = ...
  critNotification = default

  $metric = sum:mongo.replicasets.members.mystate{host=wildcard(*),replicaset=wildcard(*)}
  $q = q("$metric", "5m", "")
  $t = t(last($q), "replicaset")
  $q_alert = sum($t)
  $critValue = 5
  crit = $q_alert != $critValue
}

Postfix

Postfix 收集器收集关于 Postfix 队列的指标。这有助于监控队列随时间填充和清空的情况,以及检查队列是否完全清空,以便在邮件投递停滞时发出警报。所有可用指标的完整列表在 postfix.rs 中的功能 metadata

示例警报

alert postfix.mailqueue.deferred.too.long {
  template = ...
  critNotification = default
  warnNotification = default

  $metric = sum:5m-min:postfix.queues.deferred{domain=wildcard(*)}
  $q = q("$metric", "5m", "")
  $t = t(last($q), "domain")
  $q_alert = sum($t)
  warn = $q_alert
}

alert postfix.mailqueue.deferred.unchanged {
  template = ...
  warnNotification = default

  $period = 4h
  $metric = postfix.queues.deferred{domain=wildcard(*)}
  $q_min = q("min:$metric", "$period", "")
  $q_max = q("max:$metric", "$period", "")

  $min_queue_len = min($q_min)
  $max_queue_len = max($q_max)

  $q_alert = $min_queue_len > 0 && $max_queue_len == $min_queue_len
  warn = $q_alert
}

rs-collector 内部指标

  • rs-collector.stats.rss 收集 rs-collector 消耗的常驻集大小(物理内存),以 KB 计算;仅在 Linux 上受支持。
  • rs-collector.stats.samples 收集发送的样本数。
  • rs-collector.versio 收集 rs-collector 的版本 'x.y.z',作为 x * 1.000.0000 + y * 1000 + z。

这些指标还可以用于检查 rs-collector 的活动性并作为心跳。

配置

请参阅此 示例

安装

Ubuntu [x86_64 和 Raspberry Pi]

请添加我的 PackageCloud 开源存储库,并通过 apt 安装 rs-collector

curl -s https://packagecloud.io/install/repositories/lukaspustina/opensource/script.deb.sh | sudo bash
sudo apt-get install rs-collector

Linux 二进制文件 [x86_64 和 Raspberry Pi]

GitHub 发布页面 上有可用的二进制文件。这些二进制文件在 Ubuntu 上编译。

macOS

请使用 Homebrew 在您的系统上安装 rs-collector

brew install lukaspustina/os/rs-collector

源代码

请通过 rustup 安装 Rust,然后运行

cargo install rs-collector

Ansible

Ansible Galaxy Ansible Galaxy 上也有可用的 Ansible 角色可自动安装 rs-collector

已知问题

  • 一般:在 chan::tick 中有轻微的内存泄漏 -- 参见 路线图

  • JVM:不区分通过配置分配名称相同的 JVM,即同一 Java 应用程序的多实例。

路线图

请参阅 待办事项

依赖关系

~38MB
~769K SLoC