我想使用石墨从不同的服务器收集指标。默认情况下,carbon 在所有接口上监听 2003,这对我来说很好。
现在理论上任何人都可以在那里发送度量数据。是否有防止这种情况发生的标准方法(类似于 http base auth )或者我是否需要弄乱物理接口上基于 IP 的限制?
我想使用石墨从不同的服务器收集指标。默认情况下,carbon 在所有接口上监听 2003,这对我来说很好。
现在理论上任何人都可以在那里发送度量数据。是否有防止这种情况发生的标准方法(类似于 http base auth )或者我是否需要弄乱物理接口上基于 IP 的限制?
这取决于您想要“硬化”任何 Graphite 节点的程度(“Graphite”是碳中继、碳缓存、存储后端和潜在的石墨网络/api 的任何混合拓扑)。
如果您知道网络中的哪些主机应该将指标发送到 Graphite(通常是中继),您可以修改 Graphite 主机防火墙规则,以期望来自主机 IP 的明确列表或适用端口的范围。或者您可以通过防火墙或路由器在边缘网络上做类似的事情 - 我没有任何建议,因为您的问题并没有提供更全面的拓扑结构。
另一种方法是使用 AMQP 支持,让您的节点作为经过身份验证的用户将其指标发布到代理,然后让您的 Graphite 主机修改主机防火墙以仅接受来自代理的 TCP 2003 指标正在接收。这里的好处是您的石墨节点仅需要知道将来自哪些代理指标,这大大简化了任何主机防火墙规则。让节点通过轻量级服务发布指标可以更好地保护事情,因为您所关注的“信任”问题在流程的顶部得到处理,而不是指标的可能性(合法与否)到达您的 Graphite 主机(s )。RabbitMQ 是 OSS,如果您引入管理插件,则无需过多配置配置即可轻松启动和运行。它的大部分配置都是打开必要的端口进行操作。
然而,这使得 Graphite 拓扑的简单指标发布者的任务更加复杂,并为您的指标如何到达 Graphite 建立了一个发布/订阅模型(但确实带来了一个很好的附带好处,即允许传输中的指标不被可能丢失)。它还增加了另一个主机以确保在操作范围内的安全。
更进一步,您可以实现一个日志监控系统来监视 carbon-relay 的 listener.log 文件,因为它会为接收和处理的每个指标写入一行。在较高级别上,您会查看该日志以查找您期望的指标的异常。就像您有一个 server.cpu.load 指标一样,您希望看到这些指标得到处理,但发布的称为 foo.bar.value 的指标无效。作为对此类事件的响应,您可以简单地擦除 Whisper 为无效命名空间创建的相应目录(如果您使用 Whisper 进行存储)。
强化 Graphite 的 carbon-relay 和 carbon-cache 很好,而且是一件很聪明的事情,但不要忘记谁可以访问您的 Graphite webapp 或 graphite-api 以获取这些指标。