草庐IT

windows - 使用 nxlog 使用 om_ssl 从 Windows 将日志发送到 logstash

coder 2024-06-10 原文

我一直在寻找从 Windows 发送日志的选项,我已经设置了 logstash,目前我使用 logstash-forwarder 和 ssl 加密将日志从 Linux (CentOS) 服务器发送到我的 ELK 堆栈。

出于合规原因,加密在此环境中非常重要。

我也希望在 Windows 中使用 logstash-forwarder,但是在用 Go 编译后我遇到了事件日志的问题,我发现有人说这是不可能的,因为文件锁定问题,这是人们似乎正在开发 logstash-forwarder,但我真的等不及了。

无论如何,最终我发现 nxlog 似乎能够使用 ssl 以加密格式传送日志,我找到了一个 few posts about similar topics虽然我已经了解了很多关于如何传送日志以及如何设置 nxlog 的知识,但我仍然不知道如何设置 logstash 来接受日志以便我可以处理它们。

我已经在#nxlog 和#logstash irc channel 中询问过,并在#nxlog 中得到了一些确认这是可能的,没有关于如何配置它的更多信息。

无论如何,我已经使用了为我的 logstash-forwarder 使用而创建的 crt 文件(如果需要,我会创建一个新文件,当我很高兴它能工作时)并用 pem 扩展名重命名它,我相信它应该工作因为它可以 ASCII 格式读取。我已经为 %CERTDIR% 创建了环境变量并将我的文件放在那里,我已经从我读过的其他文章中为 nxlog 编写了以下配置文件,我认为这是正确的,但我不是 100% 确定:

## This is a sample configuration file. See the nxlog reference manual about the
## configuration options. It should be installed locally and is also available
## online at http://nxlog.org/nxlog-docs/en/nxlog-reference-manual.html

## Please set the ROOT to the folder your nxlog was installed into,
## otherwise it will not start.

#define ROOT C:\Program Files\nxlog
define ROOT C:\Program Files (x86)\nxlog

Moduledir %ROOT%\modules
CacheDir %ROOT%\data
Pidfile %ROOT%\data\nxlog.pid
SpoolDir %ROOT%\data
LogFile %ROOT%\data\nxlog.log

# Enable json extension
<Extension json>
    Module xm_json
</Extension>

# Nxlog internal logs
<Input internal>
    Module im_internal
    Exec $EventReceivedTime = integer($EventReceivedTime) / 1000000; to_json();
</Input>

# Windows Event Log
<Input eventlog>
  # Uncomment im_msvistalog for Windows Vista/2008 and later
    Module im_msvistalog
  # Uncomment im_mseventlog for Windows XP/2000/2003
  # Module im_mseventlog
    Exec $EventReceivedTime = integer($EventReceivedTime) / 1000000; to_json();
</Input>

<Output sslout>
    Module          om_ssl
    Host            lumberjack.domain.com
    Port            5000
    CertFile        %CERTDIR%/logstash-forwarder.crt
    AllowUntrusted  TRUE
    OutputType      Binary
</Output>

<Route 1>
    Path     eventlog, internal => sslout
</Route>

我想知道在 logstash 中使用什么输入格式 我已经尝试使用以下配置将日志传送到 lumberjack 输入类型(使用与我的 logstash-forwarders 使用相同的配置) :

input {
  lumberjack {
    port => 5000
    type => "logs"
    ssl_certificate => "/etc/pki/tls/certs/logstash-forwarder.crt"
    ssl_key => "/etc/pki/tls/private/logstash-forwarder.key"
  }
}

但是当服务启动时,我在 nxlog 日志文件中得到以下内容:

2014-11-06 21:16:20 INFO connecting to lumberjack.domain.com:5000
2014-11-06 21:16:20 INFO nxlog-ce-2.8.1248 started
2014-11-06 21:16:21 INFO successfully connected to lumberjack.domain.com:5000
2014-11-06 21:16:22 INFO remote closed SSL socket
2014-11-06 21:16:22 INFO reconnecting in 1 seconds
2014-11-06 21:16:23 INFO connecting to lumberjack.domain.com:5000
2014-11-06 21:16:24 INFO reconnecting in 2 seconds
2014-11-06 21:16:24 ERROR couldn't connect to ssl socket on lumberjack.antmarketing.com:5000; No connection could be made because the target machine actively refused it.

当我将日志记录设置为 DEBUG 时,我看到大量日志飞速通过,但我认为关键部分是:

2014-11-06 21:20:18 ERROR Exception was caused by "rv" at om_ssl.c:532/io_err_handler(); [om_ssl.c:532/io_err_handler()] -; [om_ssl.c:501/om_ssl_connect()] couldn't connect to ssl socket on lumberjack.domain.com:5000; No connection could be made because the target machine actively refused it.

我假设这表明我在 logstash 上使用了错误的输入法,但我想这也可能是我的 ssl 证书或其配置方式的问题。当我从我的 Windows 机器建立连接时,我似乎没有在正在生成的 logstash 服务器上获取任何日志。

最佳答案

感谢 b0ti 的帮助,出现了很多问题,我的 logstash 配置导致服务崩溃,但我的 nxlog 设置以及我的 ssl 证书以正确的方式设置也有问题。

我找到了 this关于创建 ssl 证书的帖子,其中涵盖了它们的设置方式,非常适合用作 Web 服务的自签名证书。

nxlog 的主要错误是 b0ti 指出我试图以二进制形式发送,而这仅在发送到 nxlog 服务器时有效。我还在文档中注意到 AllowUntrusted 的默认值是 false,所以我只需要在 ssl 正常工作时删除它。

<Output sslout>
    Module          om_ssl
    Host            lumberjack.domain.com
    Port            5001
    CAFile          %CERTDIR%\nxlog-ca.crt
    OutputType      LineBased
</Output>

创建 CA key 并保护它,因为这需要保密(cd 到/etc/pki/tls):

certtool --generate-privkey --bits 2048 --outfile private/nxlog-ca.key
chown logstash:logstash private/nxlog-ca.key
chmod 600 private/nxlog-ca.key

然后需要将自签名 CA 证书传输给您的客户:

certtool --generate-self-signed --load-privkey private/nxlog-ca.key --bits 2048 --template nxlog-ca-rules.cnf --outfile certs/nxlog-ca.crt

cnf文件是标准的,只有修改了这个选项:

# Whether this is a CA certificate or not
ca

logstash输入法:

input {
  tcp {
    port => 5001
    type => "nxlogs"
    ssl_cacert => "/etc/pki/tls/certs/nxlog-ca.crt"
    ssl_cert => "/etc/pki/tls/certs/nxlog.crt"
    ssl_key => "/etc/pki/tls/private/nxlog.key"
    ssl_enable => true
    format => 'json'
  }
}

生成私钥:

certtool --generate-privkey --bits 2048 --outfile private/nxlog.key
chown logstash:logstash private private/nxlog.key
chmod 600 private/nxlog.key

生成 CSR(证书签名请求):

certtool --generate-request --bits 2048 --load-privkey private/nxlog.key --outfile private/nxlog.csr

使用 CA 私钥签署证书

certtool --generate-certificate --bits 2048 --load-request private/nxlog.csr --outfile certs/nxlog.crt --load-ca-certificate certs/nxlog-ca.crt --load-ca-privkey private/nxlog-ca.key --template nxlog-rules.cnf

同样,对于 cnf 文件,唯一重要的标准输入部分是:

# Whether this certificate will be used to encrypt data (needed
# in TLS RSA ciphersuites). Note that it is preferred to use different
# keys for encryption and signing.
encryption_key

# Whether this certificate will be used for a TLS client
tls_www_client

我已经测试过了,效果很好,我现在只需要设置过滤器

关于windows - 使用 nxlog 使用 om_ssl 从 Windows 将日志发送到 logstash,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26789903/

有关windows - 使用 nxlog 使用 om_ssl 从 Windows 将日志发送到 logstash的更多相关文章

  1. ruby - 如何使用 Nokogiri 的 xpath 和 at_xpath 方法 - 2

    我正在学习如何使用Nokogiri,根据这段代码我遇到了一些问题:require'rubygems'require'mechanize'post_agent=WWW::Mechanize.newpost_page=post_agent.get('http://www.vbulletin.org/forum/showthread.php?t=230708')puts"\nabsolutepathwithtbodygivesnil"putspost_page.parser.xpath('/html/body/div/div/div/div/div/table/tbody/tr/td/div

  2. ruby - 使用 RubyZip 生成 ZIP 文件时设置压缩级别 - 2

    我有一个Ruby程序,它使用rubyzip压缩XML文件的目录树。gem。我的问题是文件开始变得很重,我想提高压缩级别,因为压缩时间不是问题。我在rubyzipdocumentation中找不到一种为创建的ZIP文件指定压缩级别的方法。有人知道如何更改此设置吗?是否有另一个允许指定压缩级别的Ruby库? 最佳答案 这是我通过查看ruby​​zip内部创建的代码。level=Zlib::BEST_COMPRESSIONZip::ZipOutputStream.open(zip_file)do|zip|Dir.glob("**/*")d

  3. ruby - 为什么我可以在 Ruby 中使用 Object#send 访问私有(private)/ protected 方法? - 2

    类classAprivatedeffooputs:fooendpublicdefbarputs:barendprivatedefzimputs:zimendprotecteddefdibputs:dibendendA的实例a=A.new测试a.foorescueputs:faila.barrescueputs:faila.zimrescueputs:faila.dibrescueputs:faila.gazrescueputs:fail测试输出failbarfailfailfail.发送测试[:foo,:bar,:zim,:dib,:gaz].each{|m|a.send(m)resc

  4. ruby-on-rails - 使用 Ruby on Rails 进行自动化测试 - 最佳实践 - 2

    很好奇,就使用ruby​​onrails自动化单元测试而言,你们正在做什么?您是否创建了一个脚本来在cron中运行rake作业并将结果邮寄给您?git中的预提交Hook?只是手动调用?我完全理解测试,但想知道在错误发生之前捕获错误的最佳实践是什么。让我们理所当然地认为测试本身是完美无缺的,并且可以正常工作。下一步是什么以确保他们在正确的时间将可能有害的结果传达给您? 最佳答案 不确定您到底想听什么,但是有几个级别的自动代码库控制:在处理某项功能时,您可以使用类似autotest的内容获得关于哪些有效,哪些无效的即时反馈。要确保您的提

  5. ruby - 在 Ruby 中使用匿名模块 - 2

    假设我做了一个模块如下:m=Module.newdoclassCendend三个问题:除了对m的引用之外,还有什么方法可以访问C和m中的其他内容?我可以在创建匿名模块后为其命名吗(就像我输入“module...”一样)?如何在使用完匿名模块后将其删除,使其定义的常量不再存在? 最佳答案 三个答案:是的,使用ObjectSpace.此代码使c引用你的类(class)C不引用m:c=nilObjectSpace.each_object{|obj|c=objif(Class===objandobj.name=~/::C$/)}当然这取决于

  6. ruby - 使用 ruby​​ 和 savon 的 SOAP 服务 - 2

    我正在尝试使用ruby​​和Savon来使用网络服务。测试服务为http://www.webservicex.net/WS/WSDetails.aspx?WSID=9&CATID=2require'rubygems'require'savon'client=Savon::Client.new"http://www.webservicex.net/stockquote.asmx?WSDL"client.get_quotedo|soap|soap.body={:symbol=>"AAPL"}end返回SOAP异常。检查soap信封,在我看来soap请求没有正确的命名空间。任何人都可以建议我

  7. ruby - 在 Ruby 程序执行时阻止 Windows 7 PC 进入休眠状态 - 2

    我需要在客户计算机上运行Ruby应用程序。通常需要几天才能完成(复制大备份文件)。问题是如果启用sleep,它会中断应用程序。否则,计算机将持续运行数周,直到我下次访问为止。有什么方法可以防止执行期间休眠并让Windows在执行后休眠吗?欢迎任何疯狂的想法;-) 最佳答案 Here建议使用SetThreadExecutionStateWinAPI函数,使应用程序能够通知系统它正在使用中,从而防止系统在应用程序运行时进入休眠状态或关闭显示。像这样的东西:require'Win32API'ES_AWAYMODE_REQUIRED=0x0

  8. python - 如何使用 Ruby 或 Python 创建一系列高音调和低音调的蜂鸣声? - 2

    关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭4年前。Improvethisquestion我想在固定时间创建一系列低音和高音调的哔哔声。例如:在150毫秒时发出高音调的蜂鸣声在151毫秒时发出低音调的蜂鸣声200毫秒时发出低音调的蜂鸣声250毫秒的高音调蜂鸣声有没有办法在Ruby或Python中做到这一点?我真的不在乎输出编码是什么(.wav、.mp3、.ogg等等),但我确实想创建一个输出文件。

  9. ruby-on-rails - 'compass watch' 是如何工作的/它是如何与 rails 一起使用的 - 2

    我在我的项目目录中完成了compasscreate.和compassinitrails。几个问题:我已将我的.sass文件放在public/stylesheets中。这是放置它们的正确位置吗?当我运行compasswatch时,它不会自动编译这些.sass文件。我必须手动指定文件:compasswatchpublic/stylesheets/myfile.sass等。如何让它自动运行?文件ie.css、print.css和screen.css已放在stylesheets/compiled。如何在编译后不让它们重新出现的情况下删除它们?我自己编译的.sass文件编译成compiled/t

  10. ruby - 使用 ruby​​ 将 HTML 转换为纯文本并维护结构/格式 - 2

    我想将html转换为纯文本。不过,我不想只删除标签,我想智能地保留尽可能多的格式。为插入换行符标签,检测段落并格式化它们等。输入非常简单,通常是格式良好的html(不是整个文档,只是一堆内容,通常没有anchor或图像)。我可以将几个正则表达式放在一起,让我达到80%,但我认为可能有一些现有的解决方案更智能。 最佳答案 首先,不要尝试为此使用正则表达式。很有可能你会想出一个脆弱/脆弱的解决方案,它会随着HTML的变化而崩溃,或者很难管理和维护。您可以使用Nokogiri快速解析HTML并提取文本:require'nokogiri'h

随机推荐