Logstash:无法刷新传出项目

Logstash:无法刷新传出项目

首先,我对 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
 }

相关内容