首先,我对 logstash 完全是个新手。尽管我已经设法实现了一些基本的日志记录(尝试解析没有 COMBINEDAPACHELOG 构建的 apache 日志文件)。但是,我遇到了以下错误,只要 /var/log/auth.log 收到更新(追加行),该错误就会在我的终端上发送垃圾邮件。Logstash 版本 1.4.2。操作系统 Ubuntu 服务器 14.04
无法刷新传出项目 {:outgoing_count=>1, :exception=>#, :backtrace=>["/opt/logstash-1.4.2/lib/logstash/outputs/elasticsearch/protocol.rb:225:in `build_request'", "/opt/logstash-1.4.2/lib/logstash/outputs/elasticsearch/protocol.rb:205:in `bulk'", "org/jruby/RubyArray.java:1613:in `each'", "/opt/logstash-1.4.2/lib/logstash/outputs/elasticsearch/protocol.rb:204:in `bulk'", "/opt/logstash-1.4.2/lib/logstash/outputs/elasticsearch.rb:315:in `flush'", “/opt/logstash-1.4.2/vendor/bundle/jruby/1.9/gems/stud-0.0.17/lib/stud/buffer.rb:219:in `buffer_flush'”, “org/jruby/RubyHash.java:1339:in `each'”, “/opt/logstash-1.4.2/vendor/bundle/jruby/1.9/gems/stud-0.0.17/lib/stud/buffer.rb:216:in `buffer_flush'”, “/opt/logstash-1.4.2/vendor/bundle/jruby/1.9/gems/stud-0.0.17/lib/stud/buffer.rb:159:in `buffer_receive'”, “/opt/logstash-1.4.2/lib/logstash/outputs/elasticsearch.rb:311:在`receive'中”,“/opt/logstash-1.4.2/lib/logstash/outputs/base.rb:86:在`handle'中”,“(eval):130:在`initialize'中”,“org/jruby/RubyProc.java:271:在`call'中”,“/opt/logstash-1.4.2/lib/logstash/pipeline.rb:266:在`output'中”,“/opt/logstash-1.4.2/lib/logstash/pipeline.rb:225:在`outputworker'中”,“/opt/logstash-1.4.2/lib/logstash/pipeline.rb:152:在`start_outputs'中”],:level =>:warn}
去弄清楚这里发生了什么,我唯一知道的是它锁定了任何其他日志文件的日志记录过程。
大家知道我做错了什么或导致这种情况的原因吗?除此之外,我还有几个问题,这些问题在底部。
附加信息:
配置文件
输入 { #阿帕奇 文件 { 类型 => “apache-access” 路径 => “/var/log/apache2/access.log” } 文件 { 类型 => “apache-error” 路径 => “/var/log/apache2/error.log” } #Linux 文件 { 类型 => “身份验证” 路径 => “/var/log/auth.log” } #nginx 文件 { 类型 => “nginx-access” 路径 => “/var/log/nginx/access.log” } 文件 { 类型 => “nginx-error” 路径 => “/var/log/nginx/error.log” } } 筛选 { 如果 [类型] == “apache-access” { 格罗克 { 匹配 => [ “消息”, “%{HTTP_ACC}” ] } } 如果 [类型] == “apache-error” { 格罗克 { 匹配 => [ “消息”, “%{APA_ERR}” ] } } 如果 [类型] == “身份验证” { 格罗克 { 匹配 => [ “消息”, “%{AUTH_LOG}” ] } } 如果 [类型] == “nginx-access” { 格罗克 { 匹配 => [ “消息”, “%{HTTP_ACC}” ] } } 如果 [类型] == “nginx-error” { 格罗克 { 匹配 => [ “消息”, “%{NGINX_ERR}” ] } } } 输出 { elasticsearch { 嵌入 => true } }
grok 模式是默认模式 + 下面的自定义模式。groks 是使用以下方式创建的
https://grokdebug.herokuapp.com/
http://grokconstructor.appspot.com/do/match
错误 Groks 并不完美。Grok 在运行时解析错误,因此它们对于 Kibana 中的可视化没有用处。请参阅模式下方的演示日志,了解应与之匹配的示例。
#APACHE 错误 APA_ERR_TS \[%{DAY:dayOfTheWeek} %{MONTH:month} %{MONTHDAY:day} %{HOUR:hour}:%{MINUTE:min}:%{SECOND:sec}\.%{INT:microsec} %{YEAR:year}\] APA_ERR_LOGCODE \[%{GREEDYDATA:源}:%{LOGLEVEL:日志级别}\] APA_ERR_PID_TID \[pid %{INT:进程ID}:tid %{INT:线程ID}\] APA_ERR %{APA_ERR_TS} %{APA_ERR_LOGCODE} %{APA_ERR_PID_TID} %{GREEDYDATA:logMessage} #APACHE 和 NGINX ACCESS(在我的服务器上,它们共享相同的结构,而不是日志文件) HTTP_SOURCE %{IPORHOST:客户端ID} %{USER:ident} %{USER:auth} HTTP_TS %{MONTHDAY:天}/%{MONTH:月}/%{YEAR:年}:%{HOUR:小时}:%{MINUTE:分钟}:%{SECOND:秒} HTTP_REQ_INFO "%{WORD:action} %{NOTSPACE:request} HTTP/%{NUMBER:httpver}" %{NUMBER:httpCode} (?:%{NUMBER:fileSizeInBytes}|-) HTTP_ACC %{HTTP_SOURCE} \[%{HTTP_TS} %{ISO8601_TIMEZONE:UTC}\] %{HTTP_REQ_INFO} "%{GREEDYDATA:referrer}" "%{GREEDYDATA:clientInfo}" #认证日志 AUTH_LOG_TS %{MONTH:月} %{MONTHDAY:天} %{HOUR:小时}:%{MINUTE:分钟}:%{SECOND:秒} AUTH_LOG_TYPE %{NOTSPACE:type}(\[%{INT:pid}\])?: AUTH_LOG %{AUTH_LOG_TS} %{HOST:主机名} %{AUTH_LOG_TYPE} %{GREEDYDATA:logMessage} #NGINX 错误 NGINX_ERR_TS %{YEAR:年}/%{MONTHNUM:月}/%{MONTHDAY:天} %{HOUR:小时}:%{MINUTE:分钟}:%{SECOND:秒} NGINX_ERR %{NGINX_ERR_TS} \[%{LOGLEVEL:日志级别}\] %{GREEDYDATA:日志消息}
演示日志
# 身份验证日志 2 月 17 日 08:25:55 服务器 systemd-logind[731]: 正在监视 /dev/input/event1 上的系统按钮(睡眠按钮) 2 月 17 日 08:25:58 服务器 sshd[894]: 服务器正在监听 0.0.0.0 端口 22。 2 月 17 日 08:25:58 服务器 sshd[894]: 服务器正在监听 :: 端口 22。 2 月 17 日 08:26:35 服务器 sshd[1328]: pam_unix(sshd:auth): 身份验证失败;logname=uid=0 euid=0 tty=ssh ruser=rhost=192.168.200.251 user=dude 2 月 17 日 08:26:37 服务器 sshd[1328]: 来自 192.168.200.251 端口 49194 ssh2 的 dude 密码失败 2 月 17 日 08:26:40 服务器 sshd[1328]: 已接受来自 192.168.200.251 端口 49194 ssh2 的用户的密码 2 月 17 日 08:26:40 服务器 sshd[1328]: pam_unix(sshd:session): 会话已由 (uid=0) 为用户 dude 打开 2 月 17 日 08:26:40 服务器 systemd-logind[731]: 用户 dude 的新会话 1。 2 月 17 日 09:17:01 服务器 CRON[1626]: pam_unix(cron:session): (uid=0) 为 root 用户打开了会话 2 月 17 日 09:17:01 服务器 CRON[1626]: pam_unix(cron:session): 用户 root 的会话已关闭 2 月 17 日 10:17:01 服务器 CRON[1631]: pam_unix(cron:session): (uid=0) 为 root 用户打开了会话 2 月 17 日 10:17:01 服务器 CRON[1631]: pam_unix(cron:session): 用户 root 的会话已关闭 2 月 17 日 10:33:33 服务器 sudo:dude:TTY=pts/0;PWD=/home/dude/ls-scripts;USER=root;COMMAND=/usr/bin/nano /opt/logstash-1.4.2/patterns/grok-patterns # Apache 访问 192.168.200.251 - - [16/Feb/2015:15:50:04 +0100] “GET /icons/ubuntu-logo.png HTTP/1.1” 304 179 “http://192.168.200.11/” “Mozilla/5.0 (Windows NT 6.3; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0” 192.168.200.251 - - [16/Feb/2015:15:50:04 +0100] "GET / HTTP/1.1" 200 3593 "-" "Mozilla/5.0 (Windows NT 6.3; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0" # 阿帕奇错误 [2015 年 2 月 16 日星期一 15:49:48.470722] [mpm_event:notice] [pid 3601:tid 139755574097792] AH00491:捕获 SIGTERM,正在关闭 [2015 年 2 月 16 日星期一 15:49:49.597220] [mpm_event:notice] [pid 5580:tid 140317488961408] AH00489:Apache/2.4.7 (Ubuntu) 已配置 - 恢复正常操作 [2015 年 2 月 16 日星期一 15:49:49.597302] [core:notice] [pid 5580:tid 140317488961408] AH00094:命令行:'/usr/sbin/apache2' [2015 年 2 月 16 日星期一 16:20:19.948819] [mpm_event:notice] [pid 5580:tid 140317488961408] AH00491:捕获 SIGTERM,正在关闭 [2015 年 2 月 16 日星期一 20:39:22.911352] [mpm_event:notice] [pid 1059:tid 139877818292096] AH00489:Apache/2.4.7 (Ubuntu) 已配置 - 恢复正常操作 [2015 年 2 月 16 日星期一 20:39:22.923442] [core:notice] [pid 1059:tid 139877818292096] AH00094:命令行:'/usr/sbin/apache2' [2015 年 2 月 16 日星期一 23:40:32.462678] [mpm_event:notice] [pid 1059:tid 139877818292096] AH00491:捕获 SIGTERM,正在关闭 [2015 年 2 月 17 日星期二 08:26:03.727153] [mpm_event:notice] [pid 1080:tid 140037385963392] AH00489:Apache/2.4.7 (Ubuntu) 已配置 - 恢复正常操作 [2015 年 2 月 17 日星期二 08:26:03.743771] [core:notice] [pid 1080:tid 140037385963392] AH00094:命令行:'/usr/sbin/apache2' # NGINX 访问 192.168.200.251 - - [16/Feb/2015:23:15:44 +0100] "GET /favicon.ico HTTP/1.1" 404 151 "-" "Mozilla/5.0 (Windows NT 6.3; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0" 192.168.200.251 - - [16/Feb/2015:23:15:47 +0100] "GET / HTTP/1.1" 304 0 "-" "Mozilla/5.0 (Windows NT 6.3; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0" # NGINX 错误 2015/02/16 12:58:51 [emerg] 3752#0: bind() 至 0.0.0.0:80 失败 (98: 地址已被使用) 2015/02/16 12:58:51 [emerg] 3752#0: bind() 至 [::]:80 失败 (98: 地址已被使用) 2015/02/16 12:58:51 [emerg] 3752#0: bind() 至 0.0.0.0:80 失败 (98: 地址已被使用) 2015/02/16 12:58:51 [emerg] 3752#0: bind() 至 [::]:80 失败 (98: 地址已被使用) 2015/02/16 12:58:51 [emerg] 3752#0: bind() 至 0.0.0.0:80 失败 (98: 地址已被使用) 2015/02/16 12:58:51 [emerg] 3752#0: bind() 至 [::]:80 失败 (98: 地址已被使用) 2015/02/16 12:58:51 [emerg] 3752#0: bind() 至 0.0.0.0:80 失败 (98: 地址已被使用) 2015/02/16 12:58:51 [emerg] 3752#0: bind() 至 [::]:80 失败 (98: 地址已被使用) 2015/02/16 12:58:51 [emerg] 3752#0: bind() 至 0.0.0.0:80 失败 (98: 地址已被使用) 2015/02/16 12:58:51 [emerg] 3752#0: bind() 至 [::]:80 失败 (98: 地址已被使用) 2015/02/16 12:58:51 [emerg] 3752#0:仍然无法绑定()
如果需要更多信息,请告知。
其他问题:
如何清除历史记录?=> 强制对所有日志文件进行完全重新解析
关于 Groks 最佳实践和改进的建议
提前致谢
答案1
要重新导入日期,请删除 $HOME/.sincedb 文件,删除 elasticsearch 中的索引,并将 start_position 设置为开始:
input {
#apache
file {
type => "apache-access"
path => "/var/log/apache2/access.log"
start_position => beginning
}