Logstash:

Logstash:

晚上好。我有一个 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,从而更可靠地为您提供访问量最大的网站列表。

相关内容