Elasticsearch

如何過濾已在 Ubuntu 16.04 上的 elasticsearch5.2 中收集的資訊

  • April 7, 2017

晚上好。我有一個 ELK 堆棧如下:

帶有 logbeat 的客戶端(windows 2003、2008 2012 和 Linux Ubuntu 16.04)logstash (FreeBSD 11.0) elasticsearch5.2/kibana/nginx 10(Ubuntu 16.04)

問題是,在配置它時,我按照教程創建了一個名為 logstash 的索引,並混合在 Windows 事件日誌、linux 系統日誌和 Squid 訪問日誌(對管理人員最重要)中。

問題是我需要在 Kibana 視覺化 squid 日誌中顯示收集資訊,例如瀏覽次數最多的域、每個使用者在網際網路上花費的時間等將文件發送到 elasticsarch。

但是當我在 kibana 的發現中搜尋時,我需要已經存在的資訊。但是從一般的 logstash* 索引中過濾掉了。

對此,我深表感謝。

提前這麼多。

我的 ELK 配置如下:

日誌儲存:

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
                     }
      }

=======================================================================

基巴納:

=======================================================================

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

=========================================================================

如果它是您要展示的 squid 日誌,那麼您很幸運,因為它們正在使用 logstash。

file {
 path => [ '/var/log/squid/access.log' ]
 type => "squid"
}

這允許您使用

type:"squid"

作為您的搜尋詞之一,它會將所有內容過濾到僅 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,這將為您提供更可靠的訪問最多的站點列表。

引用自:https://serverfault.com/questions/843158