如何過濾已在 Ubuntu 16.04 上的 elasticsearch5.2 中收集的資訊
晚上好。我有一個 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
,這將為您提供更可靠的訪問最多的站點列表。