我知道我可以使用脚本来做到这一点,但我想知道是否有一种“现成的”软件可以让我配置我想要(定期)从中获取的主机(和文件路径)?
我计划设置 LogStash 来解析日志(并将它们发送到集中日志存储),但 LogStash 将解析的许多日志都驻留在远程主机上的文件中。如果已经存在为此量身定制的软件,那么这将真正简化配置日志文件检索的工作。
答案1
您似乎想要的是一个称为“日志传送器”的组件(不要与数据库复制混淆)。Logstash 本身就提供了一个;它被称为“代理”,并且是用 Java 编写的。如果您不想在所有服务器上安装 [特定版本的] Java(这是一个相当合理的反对意见),那么有很多替代方案。
原木运输船具有一些共同的特性,您可以对它们进行比较:
- 它们通常可以(接近)实时地跟踪文件,通过轮询(常见)或使用 inotify;
- 它们通常能很好地应对日志轮换事件;
- 它们通常会用多种语言中的一种来实现;
- 他们将能够从(许多)各种来源读取信息,包括各种类型的数据库或 Windows 事件日志;
- 通常有商业支持选项以及免费选项;免费版本的商业版本可能提供更多输入选项;
- 它们在跨平台可用性方面有所不同;
- 不同平台的许可证成本可能有很大差异(例如 Windows 上的 rsyslog 与 Linux 上的 rsyslog)
- 可扩展性和占用空间差异很大;
- 他们可能(不)能够通过 SSL 传输日志;
- 如果接收器不可用,它们可能(不能)缓冲事件;
- 他们可能(不)能够转换/过滤消息;
- 他们的脚本编写能力水平不同;
Logstash Book 列出了一些;例如 lumberjack(用 Go 编写,未被我的操作系统打包),还有很多其他的。
rsyslog 也可以从文件中读取,但是 Windows 的许可成本可能会让您望而却步;但如果您有一个恰好安装了 rsyslog 的 RHEL/Centos/其他设备,这将很有用(出于可支持性的原因,作为一个设备,您通常没有安装任何您喜欢的程序的自由)。
我目前正在使用 nxlog,它是用 C 编写的;它相当小,没有烦人的运行时或构建依赖项;至少可以在 Linux 和 Windows 上运行;移植得相当好;易于在没有提供软件包的平台上构建;有相当好的文档(但可以更好);反应灵敏的开发人员;提供商业支持;可以通过 SSL 传输;从大量不同的输入中读取,包括文件、系统日志、Windows 事件日志等;进行一些处理,包括应用一堆标签以供稍后在 logstash 中处理;输出到一大堆不同的东西(我将我的发送到一个中央日志服务器,它缓冲、写入磁盘、旋转文件,还将数据发送到 Logstash 以供 Elastic Search 提取)
Nxlog 并不完美;它有许多错误,特别是在配置解析方面(注意缺少分号),当您想要尝试执行更复杂的事情时,配置的语义可能会有点混乱。我遇到了至少一个内存泄漏,还有一个问题需要我暂时实现一些挂起进程检测,但除此之外,到目前为止,我对我们迄今为止在舰队中使用 nxlog 仍然相当满意,我们正在推动很多数据通过它。
但是,既然您明确提到使用 SSH(这是真正的要求吗?),您可以设置文件的授权密钥 scp,然后让 logstash 在本地对其进行馈送;并且(假设您每次都重新调用 logstash)利用 logstash 记录它在文件中的位置的能力。不过要注意一件事,您可能不希望更改 inode,因此请使用“... > file.txt”覆盖文件,这将替换内容,但不会替换文件本身。但是,这可能会因日志轮换而受阻。您确实需要远程计算机上的日志发送器。如果要求对环境进行最少的接触,则使用 rsyslog 会很有用,尽管您无法通过 SSL 进行传输(尽管 rsyslog 的更新版本可能允许这样做)。
希望这对你有帮助,卡梅伦