晚上好。我有一个 ELK 堆栈,如下所示:
带有 logbeat 的客户端(Windows 2003、2008 2012 和 Linux Ubuntu 16.04)logstash(FreeBSD 11.0)elasticsearch5.2/kibana/nginx 10(Ubuntu 16.04)
问题是,在配置时,我按照教程创建了一个名为 logstash 的索引,并将其混合在 Windows Eventlogs、linux Syslogs 和 Squid 访问日志(对管理员来说最重要)中。
问题是我需要在 Kibana 可视化中显示 Squid 日志收集信息,例如浏览次数最多的域、每个用户在互联网上花费的时间等。我已经阅读了互联网上的教程,都说在将文件发送到 elasticarch 之前必须在 logstash 中使用 grok 进行过滤。
但是我需要在 kibana 的发现中搜索时已经存在的信息,但却从常规 logstash* 索引中过滤掉了。
对于这一点,我深表感谢。
提前致谢。
我的 ELK 配置如下:
Logstash:
input {
file {
type => "syslog"
# path => [ "/var/log/*.log", "/var/log/messages", "/var/log/syslog" ]
path => "/var/log/messages"
start_position => "beginning"
}
beats {
port => 5044
}
}
filter {
# An filter may change the regular expression used to match a record or a field,
# alter the value of parsed fields, add or remove fields, etc.
#
# if [type] == "syslog" {
# grok {
# match => { "message" => "%{SYSLOGTIMESTAMP:syslog_timestamp} %{SYSLOGHOST:syslog_hostname} (%{DATA:syslog_program}(?:\[%{POSINT:syslog_pid}\])?: %{GREEDYDATA:syslog_message}|%{GREEDYDATA:
syslog_message})" }
# add_field => [ "received_at", "%{@timestamp}" ]
# add_field => [ "received_from", "%{@source_host}" ]
# }
#
# if !("_grokparsefailure" in [tags]) {
# mutate {
# replace => [ "@source_host", "%{syslog_hostname}" ]
# replace => [ "@message", "%{syslog_message}" ]
# }
# }
# mutate {
# remove_field => [ "syslog_hostname", "syslog_message" ]
# }
# date {
# match => [ "syslog_timestamp","MMM d HH:mm:ss", "MMM dd HH:mm:ss", "ISO8601" ]
# }
# syslog_pri { }
# }
}
output {
# Emit events to stdout for easy debugging of what is going through
# logstash.
# stdout { codec => rubydebug }
# This will use elasticsearch to store your logs.
elasticsearch {
hosts => [ "172.19.160.24:9200" ]
# manage_template => false
# index => "%{[@metadata][beat]}-%{+YYYY.MM.dd}"
# document_type => "%{[@metadata][type]}"manage_template => false
}
}
=======================================================================
Kibana:
=======================================================================
server.port: 5601
server.host: "127.0.0.1"
server.name: "kibana-xxxxxx"
elasticsearch.url: "http://172.19.160.24:9200"
elasticsearch.preserveHost: true
kibana.index: ".kibana"
kibana.defaultAppId: "discover
========================================================================= Elasticseacrch:
=======================================================================
cluster.name: dnc-srv-logcollector
node.name: node-1-sm
node.attr.rack: r1
network.host: 172.19.160.24
http.port: 9200
index.codec: best_compression
=========================================================================
答案1
如果您想要呈现的是 squid 日志,那么您很幸运,因为它们使用的是 logstash。
file {
path => [ '/var/log/squid/access.log' ]
type => "squid"
}
您可以使用以下方式构建仪表板
type:"squid"
作为您的搜索词之一,它将过滤所有内容,仅显示鱿鱼日志。
但这仅仅是个开始。您可以通过更直接地索引 squid 条目来使搜索变得更加容易。squid 的日志输出样式之一模仿了 Apache 的访问日志样式。这样,您可以使用块filter {}
。
if [type] == 'squid {
grok {
match => {
message => [
"%{IPORHOST:clientip} %{HTTPDUSER:ident} %{HTTPDUSER:auth} \[%{NUMBER:timestamp}\] \"(?:%{WORD:verb} %{NOTSPACE:request}(?: HTTP/%{NUMBER:httpversion})?|%{DATA:rawrequest})\" %{NUMBER:response} (?:%{NUMBER:bytes}|-) %{QS:referrer} %{QS:agent} %{WORD:squid_result}"
]
}
}
}
通过这种方式,您可以使用terms
查找构建仪表板request
,从而更可靠地为您提供访问量最大的网站列表。