工做工程中,不管是開發仍是運維,都會遇到各類各樣的日誌,主要包括系統日誌、應用程序日誌和安全日誌,對於開發人員來講,查看日誌,能夠實時查看程序的運行錯誤,以及性能分析,一般,一個大中型的應用程序會被部署到多臺服務器,那日誌文件也會分散到不一樣的機器上,這樣查看日誌難道要一臺一臺去查看?顯然是太麻煩了,開源的日誌分析系統 ELK 完美的解決了這個問題。
ELK 並非一個獨立的系統,她是由 ElasticSearch、Logstash、Kibana 三個開源的工具組成。node
ElasticSearchlinux
ElasticSearch是一個基於Lucene的搜索服務器。它提供了一個分佈式多用戶能力的全文搜索引擎,基於RESTful web接口。Elasticsearch是用Java開發的,並做爲Apache許可條款下的開放源碼發佈,是當前流行的企業級搜索引擎。設計用於雲計算中,可以達到實時搜索,穩定,可靠,快速,安裝使用方便。web
Logstashredis
Logstash 是一個開源的日誌分析、收集工具,並將日誌存儲以供之後使用。shell
Kibana數據庫
Kibana 是一個爲 Logstash 和 ElasticSearch 提供的日誌分析的 Web 接口。可以使用它對日誌進行高效的搜索、可視化、分析等各類操做。vim
下載elk的三個組建,es,logstash,kibanacentos
https://artifacts.elastic.co/downloads/logstash/logstash-6.5.0.tar.gz https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.5.0.tar.gz https://artifacts.elastic.co/downloads/kibana/kibana-6.5.0-linux-x86_64.tar.gz
設置參數安全
設置內核參數服務器
vim /etc/sysctl.conf # 添加下面一行 vm.max_map_count = 262144 systcl -p ## 加載配置
修改系統最大文件打開數
vim /etc/security/limits.conf ##添加以下兩行,保存後從新登錄用戶及生效 * soft nofile 65536 * hard nofile 65536
關閉防火牆
service firewalld stop
解壓並移動
## 新建目錄 mkdir /usr/local/elk ## 解壓 tar -vxzf elasticsearch-6.5.0.tar.gz tar -vxzf kibana-6.5.0-linux-x86_64.tar.gz tar -vxzf logstash-6.5.0.tar.gz ## 移動 mv elasticsearch-6.5.0 /usr/local/elk/ mv kibana-6.5.0-linux-x86_64 /usr/local/elk/ mv logstash-6.5.0 /usr/local/elk/
安裝elasticsearch數據存儲器,用於數據存儲
vim /usr/local/elk/elasticsearch-6.5.0/config/elasticsearch.yml # ---------------------------------- Cluster ----------------------------------- cluster.name: ES-cluster ##設置集羣名稱,集羣內的節點都要設置相同,可自定義 # ------------------------------------ Node ------------------------------------ node.name: node-1 ## 節點名稱,自定義,各個節點不可相同 # ----------------------------------- Paths ------------------------------------ path.data: /usr/local/elk/elasticsearch-6.5.0/data path.logs: /usr/local/elk/elasticsearch-6.5.0/logs # ---------------------------------- Network ----------------------------------- network.host: 192.168.9.90 ## 本機IP http.port: 9200 ## 端口,默認9200 # --------------------------------- Discovery ---------------------------------- discovery.zen.ping.unicast.hosts: ["192.168.9.89","192.168.9.90"] ## 此集羣內全部節點的IP地址,這裏沒有使用自動發現,而是指定地址發現,由於規模較小 discovery.zen.minimum_master_nodes: 1
添加用戶,不能使用root用戶啓動
groupadd -g 1008 elasticsearch useradd -g 1008 -u 1008 elasticsearch chown -R elasticsearch:elasticsearch /usr/local/elk/elasticsearch-6.5.0/
啓動elasticsearch
su elasticsearch ./elasticsearch ## 驗證是否啓動成功 ps -ef | grep elasticsearch
安裝kibana
vim /usr/local/elk/kibana-6.5.0-linux-x86_64/config/kibana.yml server.port: 5601 ## kibana默認端口 server.host: "192.168.9.90" ## 服務的host,直接填本機IP便可。 elasticsearch.url: "http://192.168.9.89:9200" ## elasticsearch的鏈接地址,集羣時,鏈接其中一臺節點便可。
啓動kibana
cd bin ./kibana
安裝logstash
vim /usr/local/elk/logstash-6.5.0/config/logstash.yml ##修改host爲0.0.0.0,這樣別的電腦就能夠鏈接整個logstash,否則只能本機鏈接。 http.host: "0.0.0.0"
配置logstash配置文件,保存在elk/conf/all.conf
input { ## input爲輸入口 redis { data_type => "list" ## 隊列輸入,默認輸入類型爲list db => 10 ## 指定redis庫 key => "redis-pipeline" ## redis是key-value式的內存數據庫,指定key便是指定隊列的標識key的大概意思 host => "192.168.9.79" ## 下面是鏈接信息,若是有密碼則須要添加password這一項 port => "6379" threads => 5 ## 線程數 } } filter { ## 過濾器filter grok { ## grok插件,能夠經過正則匹配,將日誌的message進行格式化轉換。 match => ["message","%{YEAR:YEAR}-%{MONTHNUM:MONTH}-%{MONTHDAY:DAY} %{HOUR:HOUR}:%{MINUTE:MIN}:%{SECOND:SEC},(?<MSEC>([0-9]*)) %{LOGLEVEL:loglevel} \[(?<Classname>(.*))\] - (?<Content>(.*))"] } } output { ## 輸出elasticsearch elasticsearch { hosts => ["192.168.9.89:9200","192.168.9.90:9200"] ## 輸出的elasticsearch的數據節點IP index => "logstash-test" ## 索引值 #user => "elastic" ## elasticsearch 的用戶密碼,須要安裝x-pack纔會有,這裏先不用 #password => "changeme" } }
啓動logstash
cd /usr/local/elk/logstash-6.5.0/bin ./logstash -f /usr/local/elk/conf/all.conf
到如今,elk的三個組建就所有啓動了。