我一直在寻找从Windows发布日志的选项,我已经设置了logstash,而我目前使用logstash-forwarder和sslencryption将日志从Linux(CentOS)服务器发送到我的ELK堆栈。
由于合规性的原因,在这种环境下encryption是非常重要的。
我也希望在Windows中使用logstash-forwarder,但是在编译Go之后,我遇到了运行事件日志的问题,并且我发现有些人说因文件locking问题而无法执行这个任务,logstash-forwarder人们似乎正在努力,但我不能等待。
无论如何,最终我发现nxlog似乎能够使用ssl以encryption格式发送日志,我发现了一些 关于 类似 主题的文章 ,同时我也学到了很多有关如何发送日志的方法,以及如何设置nxlog,我仍然无法设置logstash接受日志,所以我可以处理它们。
我已经在#nxlog和#logstash irc频道中提出要求,并在#nxlog中得到了一些确认,这是可能的,没有进一步的信息应该如何configuration。
无论如何,我已经创build了与我的logstash-forwarder一起使用的crt文件(如果需要的话,如果需要的话,我将创build一个新文件),并用一个pem扩展名重命名,我相信它应该可以正常工作ASCII格式可读。 我已经创build了%CERTDIR%的环境variables,并把我的文件放在那里,我已经写了下面的configuration文件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中使用什么input格式我已经尝试将日志传送到伐木工人inputtypes(使用与我的logstash-forwarders使用相同的configuration)与以下configuration:
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.
当我把日志logging转到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上使用错误的input法,但我想这也可能是我的ssl证书或configuration方式的问题。 当我从Windows机器进行连接时,我似乎没有得到正在生成的logstash服务器上的任何日志。
感谢b0ti的帮助,有一些问题,我的logstash配置崩溃的服务,但我也有问题,我的nxlog设置以及我的ssl证书正确的方式建立。
我发现这篇文章是关于创建ssl证书的, 这个文章涵盖了他们为自我签署的证书建立一个很好的方式,用作一个web服务。
nxlog最主要的问题是b0ti指出我试图用二进制发货,只有在运送到nxlog服务器时才能运行。 我也注意到,在文档中,AllowUntrusted的默认值是false,所以我只是在我开心的时候删除了它。
<Output sslout> modulee om_ssl Host lumberjack.domain.com Port 5001 CAFile %CERTDIR%\nxlog-ca.crt OutputType LineBased </Output>
创建CA密钥,并保护它,因为这需要保密(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
我已经测试了这个,它运作良好,我只需要现在设置过滤器
二进制数据格式是特定于nxlog的,只有在发送给nxlog时才应使用它。
OutputType Binary
如果这没有帮助,请检查logstash日志,因为它是关闭连接的远程端点(logstash)。