我正在尝试设置 logstash 转发器,但是我在创建适当的安全通道时遇到了问题。尝试使用在 virtualbox 中运行的两台 ubuntu(服务器 14.04)机器进行配置。它们是 100% 干净的(未触及主机文件或安装除所需的 java、ngix、elasticsearch 等以外的任何其他软件包,用于 Logstash)
我不相信这是一个 logstash 问题,而是证书处理不当或在 logstash ubuntu 或转发器机器上设置不正确的东西。
我生成了密钥:
sudo openssl req -x509 -batch -nodes -newkey rsa:2048 -keyout private/logstash-forwarder.key -out certs/logstash-forwarder.crt
Run Code Online (Sandbox Code Playgroud)
我在logstash服务器上的输入conf:
input {
lumberjack {
port => 5000
type => "logs"
ssl_certificate => "/etc/pki/tls/certs/logstash-forwarder.crt"
ssl_key => "/etc/pki/tls/private/logstash-forwarder.key"
}
}
Run Code Online (Sandbox Code Playgroud)
密钥被复制到转发器主机,它具有以下配置。
{
"network": {
"servers": [ "192.168.2.107:5000" ],
"timeout": 15,
"ssl ca": "/etc/pki/tls/certs/logstash-forwarder.crt"
"ssl key": "/etc/pki/tls/certs/logstash-forwarder.key"
},
"files": [
{
"paths": [
"/var/log/syslog",
"/var/log/auth.log"
],
"fields": { "type": …Run Code Online (Sandbox Code Playgroud) 我有一个java进程,它不会因SIGTERM或SIGKILL而死亡。
logstash 2591 1 99 13:22 ? 00:01:46 /usr/bin/java -XX:+UseParNewGC -XX:+UseConcMarkSweepGC -XX:CMSInitiatingOccupancyFraction=75 -XX:+UseCMSInitiatingOccupancyOnly -XX:+DisableExplicitGC -Djava.awt.headless=true -Dfile.encoding=UTF-8 -XX:+HeapDumpOnOutOfMemoryError -Xmx1g -Xms256m -Xss2048k -Djffi.boot.library.path=/usr/share/logstash/vendor/jruby/lib/jni -Xbootclasspath/a:/usr/share/logstash/vendor/jruby/lib/jruby.jar -classpath : -Djruby.home=/usr/share/logstash/vendor/jruby -Djruby.lib=/usr/share/logstash/vendor/jruby/lib -Djruby.script=jruby -Djruby.shell=/bin/sh org.jruby.Main --1.9 /usr/share/logstash/lib/bootstrap/environment.rb logstash/runner.rb --path.settings /etc/logstash
Run Code Online (Sandbox Code Playgroud)
每次收到信号时它都会重生。
Sep 15 13:22:17 test init: logstash main process (2546) killed by KILL signal
Sep 15 13:22:17 test init: logstash main process ended, respawning
Run Code Online (Sandbox Code Playgroud)
这听起来很奇怪,但即使我重新启动服务器,它仍然没有死。
进程是通过 init 脚本使用以下命令执行的:
NAME=logstash
LS_USER=logstash
LS_OPTS="--path.settings=/etc/logstash"
LS_PIDFILE=/var/run/$NAME/$NAME.pid
LS_STDERR="/var/log/logstash/logstash.stderr"
DAEMON="/usr/share/logstash/bin/logstash"
runuser -s /bin/sh -c "exec $DAEMON ${LS_OPTS}" ${LS_USER} &>${LS_STDERR} …Run Code Online (Sandbox Code Playgroud) 在超过 12 个 centos 5.8 服务器的集群上,我使用本地 logstash 发送器部署了 logstash,该发送器将发送/var/log/*/*.log回中央 Logstash 服务器。
我们尝试使用 rsyslogd 作为托运人,但由于 rsyslogd 的 ImFile 模块中的错误,如果远程端没有回复,日志将堆积在内存中。
我们目前使用 Redis 作为传输机制,因此 logstash01 已在本地运行 redis,绑定到这些日志的 VLAN 的 IP。
所以logstash-shipper 发送到logstash01 上的redis。logstash01 发送到在单独进程中运行的 Elasticsearch。
这就是我们所看到的。Elasticsearch 有 141 个阻塞线程。跟踪 elasticsearch 父项显示:
futex(0x7f4ccd1939d0, FUTEX_WAIT, 26374, NULL
Run Code Online (Sandbox Code Playgroud)
所以.. 昨晚,一些网络服务器(其日志由 logstash 跟踪)发疯了,平均负载超过 500。
在logstash01上,有这个
Dec 19 00:44:45 logstash01 kernel: [736965.925863] Killed process 23429 (redis-server) total-vm:5493112kB, anon-rss:4248840kB, file-rss:108kB
Run Code Online (Sandbox Code Playgroud)
所以OOM杀手杀死了Redis的服务器,然后指原木堆放在内存里面是已上市的东西..而服务器上莫名其妙意味着阿帕奇获取其短裤的扭曲。(坦率地说,我不确定如何,我只是假设它拖尾了日志)。
这是我关于事件如何展开的理论:
如何获得Logstash的版本?
root@elk:/usr/share/elasticsearch# bin/logstash --help
bash: bin/logstash: No such file or directory
Run Code Online (Sandbox Code Playgroud)
我的系统上运行着 Logstash。还。
root@elk:/# logstash -V
bash: logstash: command not found
Run Code Online (Sandbox Code Playgroud)
还。
root@elk:/# ps aux | grep logstash
logstash 1725 45.3 8.5 1942860 175936 ? SNl 22:03 0:35 /usr/bin/java -XX:+UseParNewGC -XX:+UseConcMarkSweepGC -Djava.awt.headless=true -XX:CMSInitiatingOccupancyFraction=75 -XX:+UseCMSInitiatingOccupancyOnly -XX:+HeapDumpOnOutOfMemoryError -Djava.io.tmpdir=/opt/logstash -Xmx500m -Xss2048k -Djffi.boot.library.path=/opt/logstash/vendor/jruby/lib/jni -XX:+UseParNewGC -XX:+UseConcMarkSweepGC -Djava.awt.headless=true -XX:CMSInitiatingOccupancyFraction=75 -XX:+UseCMSInitiatingOccupancyOnly -XX:+HeapDumpOnOutOfMemoryError -Djava.io.tmpdir=/opt/logstash -XX:HeapDumpPath=/opt/logstash/heapdump.hprof -Xbootclasspath/a:/opt/logstash/vendor/jruby/lib/jruby.jar -classpath : -Djruby.home=/opt/logstash/vendor/jruby -Djruby.lib=/opt/logstash/vendor/jruby/lib -Djruby.script=jruby -Djruby.shell=/bin/sh org.jruby.Main --1.9 /opt/logstash/lib/bootstrap/environment.rb logstash/runner.rb agent -f /etc/logstash/conf.d -l /var/log/logstash/logstash.log
root 1777 0.0 0.0 8860 636 ? …Run Code Online (Sandbox Code Playgroud) 我目前正在研究使用logstash(或graylog2)整合来自多个服务器的日志的可能性。
我对logstash和graylog的区别还是有点困惑。到目前为止,我很欣赏 logstash 的易用性,但我很想听听其他人的经验。
此外,logstash 似乎可以获取 Windows 事件日志。是否有任何动机使用 nxLog 或 snare 来代替?许多人报告使用 nxlog 将事件转发到远处的 logstash 实例。这是推荐的方式吗?
目前,我们想从多个盒子中整合:
提前感谢您的任何反馈。
我已经在 Ubuntu 13.10 上使用logstash APT 存储库安装了 logstash 作为服务。
所以现在我可以运行:
dpkg -s logstash
Run Code Online (Sandbox Code Playgroud)
它输出:
Package: logstash
Status: install ok installed
Priority: extra
Section: default
Installed-Size: 93362
Maintainer: <jls@ds4172>
Architecture: all
Version: 1.4.0-1-c82dc09
Depends: java7-runtime-headless | java6-runtime-headless | j2re1.7
Conffiles:
/etc/default/logstash 399f19c4d762840a36f6bc056c3739b8
/etc/default/logstash-web d94db9f8dc1d4ced449175a96e8df09d
/etc/logrotate.d/logstash 9bb11b4b058868bb41c658c9c3152a83
Description: An extensible logging pipeline
License: Apache 2.0
Vendor: Elasticsearch
Homepage: http://logstash.net
Run Code Online (Sandbox Code Playgroud)
所以我看到logstash服务安装成功。
我知道运行 logstash(不是作为服务)我可以指定这样的配置:
bin/logstash -f /path/to/config-file
Run Code Online (Sandbox Code Playgroud)
但是,当我将 logstash 作为服务运行时,我将如何指定特定配置?
我已经使用命令将用户添加logstash到组中。adm$ usermod -a -G adm logstash
logstash 代理尝试读取的文件之一是/var/log/nginx/foo-access.log,它具有以下权限:
-rw-r----- 1 www-data adm 0 Jul 25 07:52 /var/log/nginx/foo-access.log
Run Code Online (Sandbox Code Playgroud)
当我sudo su logstash可以读取文件时,但是,当我$ sudo service logstash_agent restart(init 脚本以logstash用户身份运行)时,它会用以下内容填充 logstash 日志:
{:timestamp=>"2013-07-31T17:05:17.287000+0000", :message=>"failed to open /var/log/nginx/foo-access.log: Permission denied - /var/log/nginx/foo-access.log", :level=>:warn}
Run Code Online (Sandbox Code Playgroud)
我可以确认 logstash 用户在 adm 组中:
$ groups logstash
logstash : logstash adm
Run Code Online (Sandbox Code Playgroud)
此文件绝对具有正确的文件访问权限:
$ getfacl /var/log/nginx/foo-access.log
getfacl: Removing leading '/' from absolute path names
# file: var/log/nginx/foo-access.log
# owner: www-data
# …Run Code Online (Sandbox Code Playgroud) 我有一个 Raspberry Pi 2(截至 2015 年 4 月的最新 Raspbian)设置,上周在测试网络上同时运行 ElasticSearch 和 Logstash(不是一个简单的设置,但它稳定了一个多星期!)。我今天重新启动了我的机器,并且很难让事情再次运行;ES 和 LS 都将独立运行,但是当我尝试将 LS 输出推送到 ES 时,ES 实例会在没有解释的情况下死亡。我的目标是通过标准输出插件将运行数据和 LS 数据泵入 ES。
弹性搜索 [v1.5.0]
我相信这是核心问题所在。ES 可以通过启动service elasticsearch start并保持运行,可以通过 HTTP 请求访问端口 9200,并且所有生命迹象看起来都很健康。只要有东西(据我所知)尝试将数据写入索引,进程就会终止,并且调试日志 @ /var/log/elasticsearch/* 不包含任何与服务失败相关的内容。我试过通过 logstash(见下文)和 curl 插入,这两种方法都会终止 ES 进程。我正在运行的 curl 命令是curl -XPOST "http://localhost:9200/logstash-2015.04.05/records/" -d "{ \"type\" : \"specialRecord\" }".
Logstash [v1.4.2]
我目前正在使用这个简单的配置运行:
input {
stdin { }
}
output {
stdout { codec => rubydebug }
elasticsearch {
host …Run Code Online (Sandbox Code Playgroud) 以下 logstash 配置用于通过 TCP 连接将 Windows 事件日志作为 json 接受,然后经过一些过滤将结果转发到 Elastic 搜索(来源:https : //gist.github.com/robinsmidsrod/4215337):
input {
tcp {
type => "syslog"
host => "127.0.0.1"
port => 3514
}
tcp {
type => "eventlog"
host => "10.1.1.2"
port => 3515
format => 'json'
}
}
# Details at http://cookbook.logstash.net/recipes/syslog-pri/
filter {
# Incoming data from rsyslog
grok {
type => "syslog"
pattern => [ "<%{POSINT:syslog_pri}>(?:%{SYSLOGTIMESTAMP:syslog_timestamp}|%{TIMESTAMP_ISO8601:syslog_timestamp8601}) %{SYSLOGHOST:syslog_hostname} %{PROG:syslog_program}(?:\[%{POSINT:syslog_pid}\])?: %{GREEDYDATA:syslog_message}" ]
add_field => [ "received_at", "%{@timestamp}" ]
add_field => [ "received_from", "%{@source_host}" …Run Code Online (Sandbox Code Playgroud) 我在邮件列表上看到过这个问题几次,但没有一个满意的答案。
如何最好地监控管道没有卡住?客户端 -> logstash -> elasticsearch。
Logstash 尤其是 elasticsearch 容易出现资源匮乏。他们都非常擅长从他们离开的地方开始,但是人们究竟是如何观察他们的观察者的呢?
欢迎提出意见。
logstash ×10
ubuntu ×2
centos6 ×1
graylog ×1
linux ×1
logging ×1
monitoring ×1
oom-killer ×1
permissions ×1
redis ×1
ssl ×1
tls ×1
ubuntu-12.10 ×1
ubuntu-14.04 ×1