centos6安裝部署ELK以及後續操作

前言:

        ELK Stack 是 Elasticsearch、Logstash、Kibana 三個開源軟件的組合。ELK Stac可以用於實時日誌處理,數據分析等領域,目前瞭解該領域應該是開源界的第一選擇。實踐中,可跟對具體使用場景選擇不同的軟件組合,如下是快速安裝部署,同樣也適合生產環境。

實踐環境

名稱
版本備註
OScentos6.4以上7.x未測試,5.x不適用
Elasticsearch
2.4.0以上適用JDK8.x,採用最新穩定版
Logstash2.4.0以上
同上
Kibana4.6.1以上
同上


各種包的資源準備好,可以去官網下載(www.elasticsearch.co),或者去國內的大型源裏面,比如阿里源,清華源等等,這裏就不詳細說明了

由於這裏下載的都是rpm包,安裝很簡單,JDK的安裝配置也不說明了,這個大家應該都沒什麼問題了

  1. 安裝配置elasticsearch

    rpm -ivh ela*.rpm

  2. 安裝插件

    /usr/share/elasticsearch/bin/plugin install mobz/elasticsearch-head

  3. 添加系統服務並啓動

    chkconfig --add elasticsearch  &&  /etc/inin.d/elasticsearch  start

  4. 修改一下配置文件中的network參數,可以讓其綁定在每個網卡設備上

  5. 測試

    curl 'http://172.16.200.108:9200/?pretty'

  6. #自定義配置文件(/etc/elasticsearch/elasticsearch.yml)

    #組播組播自動發現配置

    cluster.name: my-test     (集羣名稱,組播自動發現)

    node.name: node-01

    node.master: true

    node.data:true

    index.number_of_shards: 5   (默認分片數)

    index.number_of_replicas: 1  (默認分片副本)

    path.conf:/path/to/conf    (配置文件目錄)

    path.data:/usr/local/ver01/elasticsearch/data    (數據存儲目錄)

    path.work:/                (臨時文件目錄)

    path.logs:/usr/local/ver01/elasticsearch/logs               (日誌文件目錄)

    path.plugins:/            (插件目錄)

    bootstrap.mlockall:true   (鎖住內存,不交換內存數據到swap上)

    network.host:0.0.0.0

    #集羣單播配置

    cluster.name: mytest

    node.name: "node-01"

    node.data: true

    bootstrap.mlockall: true

    network.host: 172.16.200.108

    network.publish_host: 172.16.200.108

    discovery.zen.ping.multicast.enabled: false

    discovery.zen.ping.unicast.hosts: ["172.16.200.108","172.16.200.109"]



  1. 安裝logstach

    rpm -ivh log*.rpm

  2. 相關配置文件,管理腳本

    #logstash配置文件默認存放目錄

    /etc/logstash/conf.d

    #logstash bin文件

    /opt/logstash/bin/logstash

    #logstash管理腳本

    /etc/init.d/logstash start  #start/stop/restart

    #測試配置文件

    /opt/logstash/bin/logstash agent -f /etc/logstash/conf.d/logstash.conf -t

  3. 一個簡單收集Nginx訪問日誌的配置文件


    input {

            file {

                    type => "nginx-messages"

                    path => ["/home/wwwlogs/access.log"]

                    start_position => "beginning"

            }

    }

    output {

            if [type] == "nginx-messages" {

            elasticsearch {

                    hosts => ["172.16.200.108:9200"]

                    index => "nginx-messages-%{+YYYY-MM}"

                    }

            }

    }


  1. 安裝kibana

    rpm -ivh kibana*.rpm

  2. 相關配置

    #修改配置文件指定elasticsearch服務器地址:例如

    vim /opt/kibana/config/kibana.yml

    elasticsearch.url: "http://172.16.200.108:9200"

    server.host: "172.16.200.108"

    #啓動

    /etc/init.d/kibana start

    #默認訪問地址:http://172.16.200.108:5601


### 注意以上用rpm包安裝的配置文件,數據目錄的默認配置,需要請修改 ###


安裝配置無誤的話,可以登錄http://172.16.200.108:5601訪問玩一下了


針對目前elk中前端展現的kiabna來說,權限的劃分對企業用戶使用非常不方便,雖然可以簡單的方法加上基本密碼認證(HTTP Auth Basic),但是要細分權限就有點坑了。kibana優勢不用說,展現及統計都十分強大,所以兩者各有千秋,本次主題所說的grafana替換kibana只是部分替換。我們這裏2兩者可以並用,將grafana提供給運營及開發等人羣查看,給予相關分組及查看權限,而對於運維或者數據挖掘等等真正對這些日誌進行的分析我們可以使用kibana。實踐如下:


依然選擇單機操作,所有的安裝均在172.16.200.108上


  1. 安裝grafana(2.6.0)

    yum install https://grafanarel.s3.amazonaws.com/builds/grafana-2.6.0-1.x86_64.rpm

  2. 配置文件

    /etc/grafana/grafana.ini

    #默認數據庫sqlite3,默認服務端口3000,等等

  3. 啓動腳本

    /etc/init.d/grafana-server

  4. 添加Elasticsearch數據源

  5. * 登錄成功後,Data Sources => Add new 

    關鍵說明:
    Type : 選擇elasticsearch類型
    url : elasticsearch 的地址
    access : proxy 本實例選用該選項
    index name : elasticsearch中存儲數據的的索引名
    如下所示:

    grafana

    添加完成後可 Test connection 測試,如果如下圖所示則數據源可正常獲取數據

    grafana創建一個日誌相關統計的圖形


    默認的組織,選擇 New ,添加一個dashboard(如下圖),我們這裏簡單翻譯爲儀表盤。儀表盤中可以自定義自己需要的相關信息.

    grafana

        創建的新儀表盤會看到一個綠色的條,點擊可以做相關動作,另外設置裏面可以另存爲一個具體的名字保持儀表盤.如下:

 grafana

       綠色條展開後有許多選項,如下:

grafana

          我們點擊上面的Graph創建一個圖形,然後如下,做相關參數調整
General => Title 定義圖形名稱,如下:

grafana


Metrics => Query 可以輸入相關查詢條件(lunece 語法),右下角的nginx紅框代表當前數據源是之前定義的數據源名稱

grafana


Axes & Grid => Legend 是否顯示,及顯示的位置
Axes & Grid => Values 對應是否顯示相關值,如下:

grafana創建一個可查看相關詳細日誌的表格


我們點擊綠色條,然後”Add Pannel”=>”Table”,然後如下,做相關參數調整,如下:

grafana
grafana
grafanagrafana相關用戶及權限功能展示

grafana用戶的功能是比較豐富的,這裏簡單展示下,可仔細查看下/etc/grafana/grafana.ini 配置文件中更多對用戶這塊的控制與定製.

grafana
grafana
grafana

kibana地圖顯示

思路

這裏用最簡單的思路實現,如下(nginx中client IP):

  • logstash

    input:通過制定文件採集(這裏採集的nginx源日誌已經設置爲json格式了)
    filter:通過geoip插件指定字段client
    output:把日誌導出到elasticsearch(這裏重點注意,index名字如果在你沒指定自定義模板之前,必須用”logstash-“開頭,不理解沒關係,按照我的例子操作一遍先實現即可)

  • kibana

    先在Settings中創建好對應的index
    然後在Discover中查看對應index是否有採集到相關數據,數據採集是否正確
    再就是Visualize中Title map功能就可以查看相關client IP在地圖中的顯示及訪問統計

實踐

  • logstash配置文件

input {

   file {

                type => "nginx-access"

                path => ["/logs/nginx/access.log"]

   }

}

filter {

     json {

       source => "message"

     }

     geoip {

        source => "client"

    }

}

output {

        elasticsearch {

                hosts => ["10.154.19.58:9200"]

                index => "logstash-nginx-access-%{+YYYY.MM}"

        }

}

  • kibana操作

    先在Settings中創建好對應的index

kibana-titlemap

然後在Discover中查看對應index是否有採集到相關數據,數據採集是否正確

kibana-titlemap


再就是Visualize中Title map功能就可以查看相關client IP在地圖中的顯示及訪問統計

kibana-titlemap
kibana-titlemap
kibana-titlemap
kibana-titlemap
kibana-titlemap

日誌統計分析--filebeat

Filebeat 是elastic官方Beats系列之一,用來採集文件日誌推薦實踐工具。採用當前流行高效率go語言開發,客戶端採集日誌無需安裝jdk。

filebeat+logstash+elasticsearch+kibana

  • 看下官網的示意圖,圖中我們暫時只使用Beats家族之一filebeat
    elk-beats

filebeat:客戶端採集文件日誌信息,然後output給logstash,這裏可以做負載
logstash:通過beat插件收集filebeat發過來的日誌,如果需要可以過濾一些規則,然後indexer到elasticsearch
elasticsearch:保存及搜索日誌
kibana:前端交互及展現

相關安裝說明

1:安裝filebeat、curl -L -O https://download.elastic.co/beats/filebeat/filebeat-1.1.1-x86_64.rpm

sudo rpm -vi filebeat-1.1.1-x86_64.rpm

2:安裝logstash

參照上面的安裝


3:安裝logstash-input-beats插件

/opt/logstash/bin/plugin install logstash-input-beats

配置實例

filebeat:(/etc/filebeat/filebeat.yml)

  • 這裏收集3種文件日誌,定義了三種文檔類型,方便在logstash索引時根據不同文檔應用不通過濾規則

  • 其中nginx-access日誌源是json格式

  • output 可以啓用負載均衡

  • shipper 可以定義name tags等等


filebeat:

  prospectors:

    -

      document_type: "messages"

      paths:

        - /var/log/messages

    -

      document_type: "php-error-5"

      paths:

        - /home/wwwroot/php_error/php.log


    -

      document_type: "nginx-access"

      scan_frequency: "10s"

      backoff: "1s"

      paths:

        - "/usr/local/ver01/nginx/logs/*json.log"


  registry_file: /var/lib/filebeat/registry


output:

  logstash:

    hosts: ["172.31.27.253:5044","172.31.17.40:5044"]

    worker: 4

    compression_level: 3

    loadbalance: true


shipper:

  name: test-web-01

  tags: ["web-server", "nginx"]


啓動filebeat

/etc/init.d/filebeat start

logstash:(/etc/logstash/conf.d/index.conf)

  • index.conf文件名可自取,以.conf後綴結尾即可

  • filter 過濾了nginx-access 這種json格式日誌,並加入了geoip插件將其客戶端IP生成詳細的ip位置信息

  • filter 過濾了php-error-5 phperror日誌,並切分好字段

  • output 根據不通類型文檔輸入到不同的es索引中

input {

  beats {

    port => 5044

  }

}

filter {

  if [type] == "nginx-access" {

     json {

       source => "message"

     }

     mutate {

            remove_field => [ "message" ]

     }

     geoip {

        source => "client"

    }

  }

  if [type] == "php-error-5" {

        grok {

            break_on_match => false

            match => [ "message", [

                    "\[%{MONTHDAY:day}-%{MONTH:month}-%{YEAR:year} %{TIME:time}\] PHP %{DATA:level}\:  %{GREEDYDATA:error}"

                ]

            ]

            add_field    => { "timestamp" => "%{day}-%{month}-%{year} %{time}" }

            remove_field => [ "day", "month", "year", "time" ]

        }

        date {

            match        => [ "timestamp" , "yyyy-MM-dd HH:mm:ss", "dd-MMM-yyyy HH:mm:ss" ]

        }

        mutate {

            remove_field => [ "tags", "offset", "timestamp" ]

        }

  }

}


output {

  if [type] == "messages" {

        elasticsearch {

                hosts => ["10.154.19.58:9200"]

                index => "logstash-messages-%{+YYYY.MM}"

        }

  }

  if [type] == "nginx-access" {

        elasticsearch {

                hosts => ["10.154.19.58:9200"]

                index => "logstash-nginx-access-%{+YYYY.MM}"

        }

  }

  if [type] == "php-error-5" {

        elasticsearch {

                hosts => ["10.154.19.58:9200"]

                index => "logstash-php-error-%{+YYYY.MM}"

        }

  }

  #stdout { codec => rubydebug }

}

測試配置文件:

/opt/logstash/bin/logstash agent -f /etc/logstash/conf.d/index.conf -t

啓動logstach:

/etc/init.d/logstash start


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章