以下 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 和 elasticsearch 是否对我们的用例有用。我拥有的是一个包含多个条目的日志文件,其形式为
<root>
<entry>
<fieldx>...</fieldx>
<fieldy>...</fieldy>
<fieldz>...</fieldz>
...
<fieldarray>
<fielda>...</fielda>
<fielda>...</fielda>
...
</fieldarray>
</entry>
<entry>
...
</entry>
...
<root>
Run Code Online (Sandbox Code Playgroud)
每个entry元素将包含一个日志事件。(如果您有兴趣,该文件实际上是一个 Tempo Timesheets(一个 Atlassian JIRA 插件)工作日志导出。)
是否可以在不编写自己的编解码器的情况下将此类文件转换为多个日志事件?
我正在考虑在我的 prod 服务器上运行 logstash(简单安装。http: //logstash.net/docs/1.1.13/tutorials/getting-started-simple)并设置 kibana 来访问日志。
我关心的是:如何保护我的 prod 日志(尤其是由 logstash 运行的 elasticsearch),并限制对安全区域或某些 ips 的访问?
谢谢你的帮助
我无法在grok 调试器中解析以下 nginx 错误日志消息。我有一种感觉,我应该使用一个愚蠢的技巧,但无法弄清楚它可能是什么。
2015/03/20 23:35:52 [错误] 8#0: *10241823 在记录请求时测试“/www”存在失败(2:没有这样的文件或目录),客户端:201.45.203.78,服务器:$domain,请求:“GET /ritikapuri_”
到目前为止,这是我的 Grok 模式:
(?<timestamp>%{YEAR}[./]%{MONTHNUM}[./]%{MONTHDAY} %{TIME}) \[%{LOGLEVEL:severity}\] %{POSINT:pid}#%{NUMBER}: %{GREEDYDATA:errormessage} client: %{IP:client}
Run Code Online (Sandbox Code Playgroud)
这种模式让我进入“服务器”部分,但我似乎无法解析其余部分,我不清楚为什么。
如果我使用另一个 %{GREEDYDATA} 模式来获取日志的末尾,它有时不会解析与上述不匹配的日志并给我一个 _grokparsefailure。
最好的方法是使用 if 语句来捕获 nginx 中日志消息的不同变体吗?
我已经遵循了包括这个在内的方法,但无法让它们工作。
我的用户经常要求我负责知道事件是否没有发生。
我总是不得不使用 cron'ed shell 脚本和大量日期边缘案例测试来构建自定义和脆弱的解决方案。
集中式日志记录应该提供一种更好、更易于维护的方式来掌握过去 N 小时内未发生的事情。像logstash通知和nagios警报之类的东西。
toppledwagon 的回答非常有帮助。o O(灯泡。)我现在有十几个批处理作业正在检查新鲜度。我想彻底公正地回答他,并跟进我如何实施他的想法。
我将 jenkins 配置为发出系统日志,logstash 捕获它们并通过 nsca 将状态更新发送到 nagios。我还使用 check_mk 使所有内容保持干燥并在 nagios 中组织起来。
:::ruby
filter {
if [type] == "syslog" {
grok {
match => [ "message", '%{SYSLOGBASE} job="%{DATA:job}"(?: repo="%{DATA:repo}")?$',
"message", "%{SYSLOGLINE}" ]
break_on_match => true
}
date { match => [ "timestamp", "MMM d HH:mm:ss", "MMM dd HH:mm:ss" ] }
}
}
Run Code Online (Sandbox Code Playgroud)
神奇之处在于 grok 的 match 参数中的那对双模式以及 break_on_match => true。Logstash 将依次尝试每个模式,直到其中一个匹配。
我们使用 logstash …
我想在我的 Windows 服务器上设置对系统资源的监控。我注意到 Linux 中的一个常见配置是使用 collectd 守护程序来获取系统指标信息。从收集到的数据可以通过logstash 读取,最终放入Elastic Search 中用Kibana 查看。
这很好,并且在 Linux 世界中运行良好。但是我坚持使用 Windows 服务器,我需要一些关于最佳工具的建议来实现类似的工作流程。作为一个侧节点,我已经在使用 Nxlog 将 IIS 日志发送到 logstash。
我的要求是将 subversion 日志(即用户名、修订号...)发送到 logstash 进行解析(然后将其存储在弹性搜索中,最后通过 kibana 显示)。因为 subversion 使用自己的基于文件的数据库(FSFS)而不是纯文本文件,我有两个选择
我还考虑过提交后脚本,每当任何用户签入时,它都会触发它,然后将日志存储在文本文件中,但与第 1 点相同。
任何帮助/想法都非常感谢
编辑正如我在第 3 点中提到的,我们编写了这个小的 post-commit,这样每当用户签入时,我们就可以将元数据保存在某个文件中,然后通过 syslog 我们可以将此日志传输到 logstash 服务器。这种方法的最大缺点之一是我正在处理 TB 数据和每分钟 15+ 次签入,这个文件变得非常大(我们可以使用 logrotate)但同时面临锁定条件问题(因为多个用户尝试签入并写入同一个文件)这最终会导致竞争条件并使情况更糟。在下面粘贴提交后钩子,以便对其他人有用
#!/bin/sh
REPOS="$1"
REV="$2"
LOG="/tmp/svn.log"
var1=/usr/bin/svnlook info -r $REV $REPOS | tr '\n' '|'`
var2=/usr/bin/svnlook changed -r $REV $REPOS | tr '\n' ' '`
echo "r${REV}|${var1}|${var2}\n" | tee -a ${LOG} 2>&1
echo " " | tee -a ${LOG} 2>&1
Run Code Online (Sandbox Code Playgroud) 我试图让 Logstash 在 10 分钟内收到超过 1000 个项目后才提醒我。我需要 Hipchat 和 PagerDuty 中的警报。
我的配置看起来合理,但没有按预期工作。
filter {
if my_filtering_conditional_that_is_100%_correct {
throttle {
before_count => 1000
period => 600
add_tag => ["PD"]
key => "string"
}
clone {
add_tag => ["Count"]
}
}
if "Count" in [tags] {
throttle {
before_count => 1000
period => 600
add_tag => ["HC"]
key => "string"
}
}
}
output {
if "PD" in [tags] {
pagerduty {
event_type => trigger
incident_key => "logstash/Logstash"
service_key => Pagerduty_API_key
workers …Run Code Online (Sandbox Code Playgroud) 我习惯于使用 rsyslog 将我的日志从服务器发送到远程 Logstash,配置文件大致如下(通常更具体,以防止发送太多日志):
*.* @192.168.5.5:5000
Run Code Online (Sandbox Code Playgroud)
我现在开始在没有运行 syslog 而是使用 journald 的服务器上工作。是否有与 Syslog 类似的使用 journald 将日志发送到 Logstash 的方法,还是需要更多工作?我在网上找不到很多关于 Logstash 和 journald 使用的信息。