Logstash 保留 syslog 主机
Posted
技术标签:
【中文标题】Logstash 保留 syslog 主机【英文标题】:Logstash keep syslog host 【发布时间】:2016-08-10 13:07:00 【问题描述】:我在同一台服务器上有一个系统日志服务器和 ELK 堆栈。我为每个系统日志源都有一个目录。 我正在尝试使用 Logstash 解析系统日志文件,并且我想将系统日志源的 IP 地址或主机名保留在“主机”字段中。目前我有 Logstash 解析后的 0.0.0.0 源。
我的 logstash.conf :
input
file
path => ["path/to/file.log"]
start_position => "beginning"
type => "linux-syslog"
ignore_older => 0
filter
if [type] == "linux-syslog"
grok
match => "message" => "<%POSINT:syslog_pri>%SYSLOGTIMESTAMP:syslog_timestamp %SYSLOGHOST:syslog_hostname %DATA:syslog_program(?:[%POSINT:syslog_pid])?: %GREEDYDATA:syslog_message"
output
elasticsearch
hosts => ["@IP_Elastic:Port_Elastic"]
stdout codec => rubydebug
【问题讨论】:
请使用示例系统日志消息更新您的问题 系统日志消息可能是:Jan 12 06:30:00 1.2.3.4 apache_server: 1.2.3.4 - - [12/Jan/2011:06:29:59 +0100] "GET /foo/bar.html HTTP/1.1" 301 96 "-" "Mozilla/5.0 (Windows; U; Windows NT 5.1; fr; rv:1.9.2.12) Gecko/20101026 Firefox/3.6.12 ( .NET CLR 3.5.30729)" PID 18904 Time Taken 0
我没有日志的源 IP 地址或日志中的主机名,但是当我将日志存储在每个源的目录中时,我会喜欢用这些目录的名字来设置Logstash中的“host”字段
【参考方案1】:
一旦你解析了它,你就可以用你的 ip 变量覆盖你的主机。考虑这个例子:
Pipeline main started
"ip":"1.2.3.4"
"message" => "\"ip\":\"1.2.3.4\"",
"@version" => "1",
"@timestamp" => "2016-08-10T13:36:18.875Z",
"host" => "pandaadb",
"ip" => "1.2.3.4",
"@host" => "1.2.3.4"
我正在解析 json 以获取 IP。然后我将IP字段写入主机。
过滤器:
filter
# this parses the ip json
json
source => "message"
mutate
add_field => "@host" => "%ip"
将 %ip 替换为包含您的 IP 地址的任何字段。
干杯, 阿图尔
【讨论】:
以上是关于Logstash 保留 syslog 主机的主要内容,如果未能解决你的问题,请参考以下文章
logstash收集日志,多台机器,必须要多台机器安装部署吗
如何从发送到 Logstash 的 syslog 日志中检索标签?
Python SysLogHandler -> syslog:logstash。设施未变