ELK - 實用日誌分析系統

目前日誌分析系統用的越來越廣泛,而且最主流的技術即ELK,下面和大家分享一下:

---------------------------------------------------------------------------------------

一:簡 介 

Elastic Stack 是 原 ELK Stack 在 5.0 版本加入 Beats 套件後的新稱呼,近兩年飛速崛起,成爲開源界機器數據分析和日誌處理第一選擇。

組成:

kibana:開源工具,爲 EL 提供友好的 Web 界面,彙總、分析和搜索重要數據日誌;

Logstash:開源工具,它可以對你的日誌進行收集、分析,並將其存儲供以後使用;

Elasticsearch:開源搜索引擎,分佈式、零配置、自動發現、索引機制好、restful接口、多數據源等。

特點如下:

處理方式靈活:Elastic.. 是實時全文索引,不需要像 storm 那樣預先編程才能使用;

集羣線性擴展:不管是 Elasticsearch 集羣還是 Logstash 集羣都是可以線性擴展的;

前端操作炫麗:Kibana 界面上,只需要點擊鼠標,就可以完成搜索、聚合功能,生成炫麗的儀表板;

檢索性能高效:每次查詢都是實時計算,但優秀的設計和實現基本可以達到全天數據查詢的秒級響應;

配置簡易上手:Elastic.. 採用 JSON 接口,Logstash 是 Ruby DSL 設計,都是目前最通用的配置語法;

文檔:https://kibana.logstash.es/content/

官網:https://www.elastic.co/downloads/logstash

架構:

目前大家實用接觸最多的有四種架構,我們今天使用的是第二種,簡單瞭解一下:

1、logstash > elasticsearce > kibana 

2、logstash_agent > kafka/redis > logstash_index > elasticsearch > kibana

3、logstash_forword > logstash > elasticsearch > kibana

4、filebeat > logstash > elasticsearch > kibana

1、簡單易上手、elastic數據易丟失、logstash消耗資源大

2、適用於大集羣、引入消息隊列保障了數據、但logstash elastic 負載較重

3、forword耗資源極低、與logstash採用ssl加密傳輸安全、但加密也產生了一定限制性

4、filebeat耗資源極低、並且擴展靈活性高、目前很多朋友開始將 elk 轉移到這方向來了

詳情見:http://blog.csdn.net/lively1982/article/details/50678657 


二:安裝  logstash-5.3 (yum方式安裝)

Logstash 誕生於2009年8月2日,作者喬丹西塞(JordanSissel),發佈過很棒打包工具fpm,2013年 Logstash 被Elasticsearch 公司收購,促使 ELK Stack 正式成爲官方用語。

wKioL1jxksSylv_QAADAVUg-Mr0358.png

1、安裝java環境

java -version  // java9不支持,確保輸出是java 1.8系列

# alternatives --config java  //如果服務器存在多個java,可通過此命令更改優先順序

2、配置yum源安裝 logstash

rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch  //下載簽名祕鑰

vim /etc/yum.repos.d/logstash.repo

[logstash-5.x]
name=Elastic repository for 5.x packages
baseurl=https://artifacts.elastic.co/packages/5.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md

yum install logstash   //默認安裝路徑/usr/share/logstash

cd /usr/share/logstash

bin/logstash -e 'input { stdin { } } output { stdout {} }'   //命令行測試,輸入任何值會有輸

wKiom1jxkOHSnChgAAA0HCbUnME804.png

-------------------------------------------------------------------------------

error:Could not find logstash.yml which ....located  $LS_HOME/config or /etc/logstash

解決:cd /usr/share/logstash  &&  ln -svf /etc/logstash  config

error:啓動特別慢(其實java寫的tomcat也有這問題)

解決:yum install haveged  && systemctl start haveged && systemctl enable haveged

原因:在於jruby啓動慢,新版 jruby 啓動的時候用PRNG算法產生隨機數,會快;但是老版的啓動時 jdk 會去 /dev/random 初始化隨機數熵,random 發生跟不上生成速度,會被阻塞,直到隨機數池有了足夠的熵,查看池子 /proc/sys/kernel/random/entropy_avail。安裝後隨機數都在1000以上

---------------------------------------------------------------------------------

3、測試

在生產環境,我們當然不能命令行直接啓動,可以放到screen 或者nohup &啓動,但最常用的方法還是daemon,服務去找config下面的配置文件將所有.conf 整合成一個大conf啓動,以格式收集日誌;

啓動:systemctl start logstash   //啓動服務,會整合conf下所有的配置文件啓動

測試:vim /etc/logstash/conf.d/messlog.conf

input {
    file {
        path => ["/var/log/messages"]   #監控的文件
        type => ["message"]
       #start_position => ["beginning"]  #從最開始輸出
    }
}
output {
    stdout { codec => rubydebug }  #屏幕輸出信息
    file {
        path => "/usr/share/logstash/recordlog/%{+dd}/%{host}.log"
        codec => "json"   #json格式,信息輸入到文件
    }
}

檢查:logstash -t -f messlog.conf   //首先要將logstash加入PATH

啓動:logstash -f messlog.conf   //命令行指定配置文件啓動

測試:logger -i teng test    //此命令可像messages log寫入內容測試

4、安裝插件 plugins

logstash 1.5.0 版本開始,logstash 將所有的插件都獨立拆分成 gem 包,這樣就可以單獨更新某個插件而不需要等待 logstash整個更新。爲此配置了單獨的命令 bin/logstash-plugin --help

查看插件:bin/logstash-plugin list   //就位於 vendor/bundle/jruby/1.9/gems/ 下

安裝插件:bin/logstash-plugin install logstash-output-xxxx  //可替換成本地路徑裝gem包

更新插件:bin/logstash-plugin update logstash-input-xxxx

成功後,會在 Gemfile 最後和 Gemfile.jruby-1.9.lock 開頭 有新內容

安裝時卡住:http://tchuairen.blog.51cto.com/3848118/1871556


三:redis 安裝 

1、參考:http://beibing.blog.51cto.com/10693373/1875149

2、確認 logstash 與 redis 結合沒問題 (架構應用配置一)

wKioL1jxkqHCeOGuAAAqDpaMrb0339.png

redis-cli -p ** -a ***  > select 2 > lrange logstash:red 0 -1  //會查看到記錄的日誌


四:安裝 Elasticsearch-5.3 (tar 包方式安裝)

1、安裝測試

wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-5.3.0.tar.gz

tar zxvf elasticsearch-5.3.0.tar.gz

cd elasticsearch-5.3.0   //tar 包是已編譯過的,可直接使用,這種方法比yum安裝更合適

bin/elasticsearch

-------------------------------------------------------------------------------

error:java.lang.RuntimeException: can not run elasticsearch as root

groupadd elsearch  && useradd elsearch -g elsearch -p elsearchpass

cd ..  &&  chown -R elsearch:elsearch elasticsearch-5.3.0  && su - elsearch

cd elasticsearch-5.3.0   &&  bin/elasticsearch   //新建其他用戶啓動就好

error:啓動後只監聽了本地的127.0.0.1,需要指定ip啓動,外網才能訪問這個IP

sed "s/network.host.*/network.host: 0.0.0.0/g" config/elasticsearch.yml

error:max virtual mem.... vm.max_map_count [65530] is too low.. to least [262144]

sysctl -w vm.max_map_count=262144

error:max file descriptors [65535] for elasticsea....ss is too low.. to least [65536]

vim /etc/security/limits.conf   //底部添加

elsearch soft nofile 65536

elsearch hard nofile 65536

-------------------------------------------------------------------------------

bin/elasticsearch   //啓動查看,當然可以用 -d 選項後臺啓動,如下表示安裝成功

wKiom1jxk06QVB1NAABDDF1_KV0233.png

2、elastic 從 logstash 取數據

vim /etc/logstash/conf.d/messlog.conf   //繼續在logstash配置文件中添加

input {
    file {
        path => ["/var/log/messages"]
        type => ["message"]
       #start_position => ["beginning"]
    }
}
output {
    stdout { codec => rubydebug }
    elasticsearch {
        hosts => "127.0.0.1:9200"
    }
}

logstash -f messlog.conf  //開始收集日誌,檢測與elasticsearch鏈接是否正常

curl http://localhost:9200/_search?pretty  //查看輸出如下,是否匹配

wKioL1jxk8CzKdlbAAAy8xPQ7ig699.png


五、安裝kibana (rpm方式安裝)

1、安裝啓動

wget https://artifacts.elastic.co/downloads/kibana/kibana-5.3.0-x86_64.rpm

rpm -ivh kibana-5.3.0-x86_64.rpm   //默認安裝路徑與yum類似,在/usr/share/kibana

vim /etc/kibana/kibana.yml

server.host: "xxxxxxxx"    //指定被訪問IP

elasticsearch.url: "http://xxxxx:9200"   //指定展示 elasttic 的數據地址

................

/usr/share/kibana/bin/kibana   // 啓動測試,web端訪問

2、編輯 logstash 收集格式

vim /etc/logstash/conf.d/kibana.conf  (測試配置)

input {
    file {
        path => ["/var/log/messages"]
        type => ["message"]
       #start_position => ["beginning"]
    }
}
filter {
    grok {
        match => { "message" => "%{SYSLOGBASE} %{GREEDYDATA:sys_message}" }#帶=>要用{}
        overwrite => [ "message" ]   #將輸出格式更改美觀,見下面對比
    }
}
output {
    stdout { codec => rubydebug }
    elasticsearch {
        hosts => "127.0.0.1:9200"
        index => "messelog-%{+YYYY.MM.dd}"  #kibana需要識別index纔有圖表
    }

wKioL1jxlEvS1nngAAB2tcZpywE150.png

3、kibana web端設置

引入elaticsearc_index,kibana才能對其進行展示,如下

wKioL1jxlIGQh5zOAAEUmu8tdQ8308.png

wKiom1jxlIKROQg4AADGFI1inFU725.png


六:搭建架構 

當測試上面各個組件沒問題後,我們將搭建整個架構,實現目標如下:

架構二:Logstash_agent > redis > logstash_index > elasticsearch > kibana

wKioL1jxlSaR2wTMAAFGUOzShf8554.png

# logstash_agent 處配置

input {

    file {
        path => ["/var/log/messages"]
        type => ["message"]
       #start_position => ["beginning"]
    }
}  
#filter {
#  過濾內容自定義  
#}    
output {
    redis {
     host => "xxxxxx"  #redis服務器
     port => "8888"
     db => "2"
     password => "zhimakaimen"
     data_type => "list"
     key => "message_log" #key的名字
    }
}

# logstash_index 服務器配置

input {

    redis {
        host => "127.0.0.1"
        port => "8888"
        db => "2"
        password => "zhimakaimen"
        data_type => "list"
        key => "message_log
    }
}
#filter {
#  過濾內容自定義  
#}      
output {
    elasticsearch {

        hosts => "xxxxx:9200" #elastic服務器

       index => "messelog-%{+YYYY.MM.dd}"

    } 
    #stdout { codec => rubydebug }
}

systemctl start logstash   //logstash 服務啓動收集日誌

redis-server redis/redis.conf  //啓動redis服務

su - elsearch && elasticsearch -d  //後臺啓動 elastic 服務

vim /etc/kibana/kibana.yml   // kibana服務器配置 elasticsearch.url 路徑

測試查看 kibana:

logger testmsg   //利用 logger 命令將 testmsg 帶入message log,刷新kibana查看


------------------------------------------------------------------------------------

今天就到這,下次引入 filebeat 試試效果 .........




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