目标
中央存储和分析性能数字的方法:
- CPU负载
- 内存使用
- ...
当前策略
我想实现这样的设置:
- 收集
- 日志存储
- 弹性搜索
- 木花
就像这里解释的那样: https ://mtalavera.wordpress.com/2015/02/16/monitoring-with-collectd-and-kibana/
问题:远程主机无法推送数据
约束:
- 我们只有
ssh
从中央服务器到远程主机。 ssh
由于网络设置,从远程主机到中央服务器不起作用(遗憾的是我无法更改)。- 网络流量跨越多个非公共网络。每月两次无法访问主机,因为管理员使用防火墙规则。我不想松开一条线。这就是为什么我想将日志存储在远程主机上并获取(压缩)数据。
解决方案?
如何每小时获取数据?
对于上面列出的问题,您需要在远程端缓冲统计信息,以免丢失任何内容。
有很多方法可以做到这一点,但没有一种方法过于简单,并且需要进行大量测试以确保它们是可行的。它们都涉及在本地写入
collectd
's 输出,然后使用某种方法在中央服务器上获取该输出。我没有测试以下任何内容,所以有些可能根本不起作用。
没有特别容易或复杂的顺序:
Socket/Network Output to Script
Write
Collectd
的输出到套接字或 IP/端口,其中 PHP/Perl/Python/Bash 脚本正在侦听将命令写入文件。然后,这些文件可以被中央服务器推送/拉取,并由 Logstash 摄取。
优点:捕获输出的简单脚本;使用的标准 Linux 命令
缺点:如果您要获取大量统计信息,则无法扩展;需要维护脚本;不确定 LS 是否会处理普通协议
Redis/AMQP/Kafka/MongoDB将输出 写入
Collectd
可能的“缓冲区”之一。它们各自的工作方式略有不同,并且具有不同的部署选项,因此我将留给您找出最好的方法,因为这超出了这个问题的范围。也就是说,它们中的任何一个都应该工作。然后,您需要一种方法将数据从缓冲解决方案返回到中央服务器。应用程序本机复制/镜像/集群或每隔 X 间隔运行以传送数据(在任一端运行)的脚本是两种可能性。
优点:非常灵活的部署选项;应该可以很好地扩展;使用众所周知的工具/程序
缺点:缓冲区程序可能需要大量资源,或安装许多软件包
套接字/网络输出到 Logstash 这与选项 1 几乎相同,但不是将
collectd
输出输出到脚本/程序,而是将其写入每个远程主机上的本地 Logstash 实例。Logstash 然后会在本地写入 CSV/JSON,您可以使用任何方法将这些文件返回到中央服务器,包括 LS 本身。
优点:用于整个解决方案的单一工具集;提供一种在边缘转换数据的方法,然后集中摄取;移动部件很少 缺点:所有远程主机上都需要 Java/LS
除了每个选项的优点/缺点之外,所有选项的一个共同缺点是您需要找到一种方法来维护所有服务器上的一致配置。如果您有很多远程节点(或者通常只有很多节点),您可能已经有一个配置管理系统,这将是微不足道的。
编辑:Achtung!警告!
请使用它
docker-compose
而不是我链接的那个(它确实需要docker
并且compose
也许machine
但它为你做了更多,你将不得不更少地挣扎。还
因此,从这里开始对工作系统有一个很好的概述。他们已经为您完成了一些工作,因此您只需担心与配置和部署有关的问题。
即使你最终没有使用 Docker,这仍然会让你走上成功的道路,并有额外的好处向你展示它是如何组合在一起的。
首先获取 Vagrant 并构建带有 vagrant 的 Vagrant 映像
如果你不知道 Vagrant 是什么,那就太好了。这是一个允许人们共享整套虚拟机和配置器的程序,这样您就可以只定义一个虚拟机及其配置,而不是共享整个虚拟机,而且它“正常工作”。感觉很神奇,但它实际上只是可靠的系统工作。
你需要安装 Vagrant 才能使用它。去做就对了!然后,您不必安装
docker
,因为它将在 Vagrant VM 上运行。您有四种使用方式的选择,但首先,使用粗体命令准备 Vagrant....
vagrant up
确定您需要运行哪些程序
您的选择是:
还有其他配置可用,但仅用于测试。
开演时间
现在是配置 Logstash 的时候了,这确实是唯一具有复杂行为的部分。
Logstash 配置文件是以纯文本文件结尾,
conf
并且可以选择使用 atar
或 gunzip组合在一起gz
。您可以通过以下两种方式之一获取配置文件:
LOGSTASH_CONFIG_URL
指向您的配置的 url,并且 **如果您的 url 错误或有问题并且无法从 url 获取配置,它会退回到 knonw网址或其他以下是使用 Internet 上的配置运行时的样子:
作者
docker
警告你:注意:默认的 logstash conf是什么?
回想一下,当您没有为所需的环境变量输入正确的 URL 时,您会得到该文件
LOGSTASH_CONFIG_URL
这是输入部分:
超越默认
logstash
在网站上阅读更多信息。现在
logstash
有将数据推送到input
. 插件完全按照您的预期变化;这里有一些:s3
来自亚马逊(文件系统事件)stdin
从logstash
(默认,读取stdin
缓冲区)http
从logstash
(你的猜测)示例:UDP 套接字
UDP
是一种无连接的快速协议,运行在L4
(传输)底层,支持多路复用,处理故障,一般是记录数据传输的不错选择。你选择你想要的端口;其他选项取决于您在做什么。
TCP 的工作方式相同。
udp { 端口 => 9999 编解码器 => json buffer_size => 1452 }
collectd
示例 2:来自过滤和输出的 UDP 套接字过滤就是一个很好的例子: 也就是说,它真的很长,我认为它确实有用
编辑3:我可能不应该为你做你的工作,但没关系。
collectd
像任何优秀的软件一样,封装了某些丑陋或难以让用户处理的方面,并试图让你更容易,因为它看起来就像你正在发送数据(在这种情况下是一个元组)而不是用序列化来愚弄。你的例子:
我不会花时间弄清楚你是如何形成它的。如果您能够使用 CPU 插件获取该数据,那就太好了。我将复制并粘贴我在网上找到的一个,以方便我使用。
就是说,想一想……只要一点点,就不会痛了。
您会看到下面加载了 CPU 插件。
您看到文件中的接口
collectd
太小conf
而无法指定字段。因此,如果您只是这样做,它会起作用,但是您将获得比 CPU 负载更多的数据。
这就是您可以使用过滤器的地方。但我认为你也可以在 Kibana 中做到这一点。所以我宁愿不要浪费时间写一个你a)不需要的过滤器,b)如果你花一些时间就可以轻松编写。
你的logstash配置
来自 collectd 的 aaron 的更新