在咱們平常生活中,咱們常常須要回顧之前發生的一些事情;或者,當出現了一些問題的時候,能夠從某些地方去查找緣由,尋找發生問題的痕跡。無可避免須要用到文字的、圖像的等等不一樣形式的記錄。用計算機的術語表達,就是 LOG,或日誌。java
日誌,對於任何系統來講都是及其重要的組成部分。在計算機系統裏面,更是如此。可是因爲如今的計算機系統大多比較複雜,不少系統都不是在一個地方,甚至都是跨國界的;即便是在一個地方的系統,也有不一樣的來源,好比,操做系統,應用服務,業務邏輯等等。他們都在不停產生各類各樣的日誌數據。根據不徹底統計,咱們全球天天大約要產生 2EB(1018)的數據。node
面對如此海量的數據,又是分佈在各個不一樣地方,若是咱們須要去查找一些重要的信息,難道仍是使用傳統的方法,去登錄到一臺臺機器上查看?看來傳統的工具和方法已經顯得很是笨拙和低效了。因而,一些聰明人就提出了創建一套集中式的方法,把不一樣來源的數據集中整合到一個地方。linux
一個完整的集中式日誌系統,是離不開如下幾個主要特色的:web
- 收集-可以採集多種來源的日誌數據 - 傳輸-可以穩定的把日誌數據傳輸到中央系統 - 存儲-如何存儲日誌數據 - 分析-能夠支持 UI 分析 - 警告-可以提供錯誤報告,監控機制
ELK並非一款軟件,而是一套完整的日誌解決方案,由Elasticsearch、Logstash、Kibana這三款開源軟件組成;一般是配合使用,並且又前後歸於 Elastic.co 公司名下,故被簡稱爲 ELK 協議棧json
Elasticsearch是基於Lucene開發的分佈式存儲檢索引擎,用來存儲各種日誌;bootstrap
Logstash對日誌進行收集、分析,並將其存儲供之後使用;vim
Kibana是基於Node.js開發的展現工具,爲Logstash和Elasticsearch提供用於日誌展現的web頁面,還用於幫助彙總、分析和搜索重要日誌數據。centos
基本流程是 logstash 負責從各類數據源裏採集數據,而後再寫入 Elasticsearch,Elasticsearch 對這些數據建立索引,而後由 Kibana 對其進行各類分析並以圖表的形式展現。瀏覽器
主機名 | IP地址 | 相關軟件包 |
---|---|---|
CentOS7-1(linux-node1) | 172.16.10.138 | jdk、logstash、elasticsearch、kibana |
CentOS7-2(linux-node2) | 172.16.10.147 | jdk、elasticsearch |
systemctl stop firewalld.service systemctl disable firewalld.service setenforce 0
rpm --import https://packages.elastic.co/GPG-KEY-elasticsearch //導入密鑰 cd /etc/yum.repo.d/ vim elasticsearch.repo //配置yum倉庫 [elasticsearch-2.x] name=Elasticsearch repository for 2.x packages baseurl=http://packages.elastic.co/elasticsearch/2.x/centos gpgcheck=1 gpgkey=http://packages.elastic.co/GPG-KEY-elasticsearch enable=1 yum list //從新加載yum倉庫 yum install elasticsearch -y yum install java -y (1.8.0版本) java -version //查看java環境的版本信息確認是否安裝 openjdk version "1.8.0_181" OpenJDK Runtime Environment (build 1.8.0_181-b13) OpenJDK 64-Bit Server VM (build 25.181-b13, mixed mode)
cd /usr/share/elasticsearch/binruby
vim /etc/elasticsearch/elasticsearch.yml
-------cluster羣集---------------- 17行 集羣名稱 cluster.name: silence //開啓 (自定義) ---------node節點----------------- 23行 節點名稱 node.name: linux-node1 //開啓 (自定義) -----------paths路徑------------ 工做目錄 33:path.data: /data/es-data //數據存放位置 37:path.logs: /var/log/elasticsearch/ //日誌存放位置 43行 防止交換swap分區 bootstrap.memory_lock: true //鎖定內存 54行 監聽網絡 network.host: 0.0.0.0 58行 端口號 http.port: 9200
mkdir -p /data/es-data //建立數據存放目錄 chown -R elasticsearch:elasticsearch /data/es-data/ //修改屬主屬組信息 systemctl start elasticsearch.service //開啓服務 netstat -ntap | grep 9200 //檢查端口是否開啓
瀏覽器輸入 172.16.10.138:9200
第一種 JAVA API
第二種 RESTful API (經過json格式交互)
curl -i -XGET 'http://172.16.10.147:9200/_count?pretty' -d '{ "query": { "match_all": {} } }' //輸出顯示 HTTP/1.1 200 OK Content-Type: application/json; charset=UTF-8 Content-Length: 95 { "count" : 0, "_shards" : { "total" : 0, "successful" : 0, "failed" : 0 } }
生產環境中必需要修改(注意)
vim /etc/security/limits.conf G到行尾添加 elasticsearch soft memlock unlimited elasticsearch hard memlock unlimited * soft nofile 65535 * hard nofile 65535 //重啓生效 (生產環境中建議重啓)
/usr/share/elasticsearch/bin/plugin install mobz/elasticsearch-head //下載ES插件 安裝位置/usr/share/elasticsearch/plugins/head
瀏覽器訪問 172.16.10.138:9200/_plugin/head/
添加 複合查詢 /index-demo/test POST { "user":"tom", "mesg":"hello world" } 提交請求 ----------返回顯示-------------- { "_index": "index-demo", "_type": "test", "_id": "AWVDUuVUPJxKK7V6Dj8E", "_version": 1, "_shards": { "total": 2, "successful": 1, "failed": 0 }, "created": true }
//這裏和上面部署第一臺是同樣的因此小編上命令,不一樣的地方小編會註明的哦!
rpm --import https://packages.elastic.co/GPG-KEY-elasticsearch //導入密鑰 cd /etc/yum.repo.d/ vim elasticsearch.repo //配置yum倉庫 [elasticsearch-2.x] name=Elasticsearch repository for 2.x packages baseurl=http://packages.elastic.co/elasticsearch/2.x/centos gpgcheck=1 gpgkey=http://packages.elastic.co/GPG-KEY-elasticsearch enable=1 yum list //從新加載yum倉庫 yum install elasticsearch -y yum install java -y (1.8.0版本) java -version //查看java環境的版本信息確認是否安裝 openjdk version "1.8.0_181" OpenJDK Runtime Environment (build 1.8.0_181-b13) OpenJDK 64-Bit Server VM (build 25.181-b13, mixed mode) vim /etc/elasticsearch/elasticsearch.yml -------cluster羣集---------------- 17行 集羣名稱 cluster.name: silence //開啓 (自定義) ---------node節點----------------- 23行 節點名稱 node.name: linux-node1 //開啓 (自定義) -----------paths路徑------------ 工做目錄 33:path.data: /data/es-data //數據存放位置 37:path.logs: /var/log/elasticsearch/ //日誌存放位置 43行 防止交換swap分區 bootstrap.memory_lock: true //鎖定內存 54行 監聽網絡 network.host: 0.0.0.0 58行 端口號 http.port: 9200 69行 自動發現機制 discovery.zen.ping.unicast.hosts: ["172.16.10.147", "172.16.10.138"] //這裏選擇單播列表自動發現機制 mkdir -p /data/es-data //建立數據存放目錄 chown -R elasticsearch:elasticsearch /data/es-data/ //修改屬主屬組信息
vim /etc/elasticsearch/elasticsearch.yml
69行 自動發現機制 discovery.zen.ping.unicast.hosts: ["172.16.10.138", "172.16.10.147"] //這裏選擇單播列表自動發現機制
systemctl stop elasticsearch.service systemctl start elasticsearch.service
瀏覽器訪問 172.16.10.138:9200/_plugin/head/
簡單來講logstash就是一根具有實時數據傳輸能力的管道,負責將數據信息從管道的輸入端傳輸到管道的輸出端;與此同時這根管道還可讓你根據本身的需求在中間加上濾網,Logstash提供裏不少功能強大的濾網以知足你的各類應用場景。
rpm --import https://packages.elastic.co/GPG-KEY-elasticsearch vim /etc/yum.repos.d/logstash.repo [logstash-2.1] name=Logstash repository for 2.1.x packages baseurl=http://packages.elastic.co/logstash/2.1/centos gpgcheck=1 gpgkey=http://packages.elastic.co/GPG-KEY-elasticsearch enable=1 yum list yum install logstash -y
/opt/logstash/bin/logstash -e 'input { stdin{} } output { stdout{} }' hello
/opt/logstash/bin/logstash -e 'input { stdin{} } output { stdout{ codec => rubydebug } }'
/opt/logstash/bin/logstash -e 'input { stdin{} } output { elasticsearch { hosts => ["172.16.10.138:9200"] } }'
/opt/logstash/bin/logstash -e 'input { stdin{} } output { elasticsearch { hosts => ["172.16.10.138:9200"] } stdout { codec => rubydebug } }'
vim /etc/logstash/conf.d/01-logstash.conf
input { stdin { } } output { elasticsearch { hosts => ["172.16.10.138:9200"] } stdout { codec => rubydebug } } /opt/logstash/bin/logstash -f /etc/logstash/conf.d/01-logstash.conf
ln -s /opt/logstash/bin/logstash /usr/bin/ vim file.conf input { file { path => "/var/log/messages" type => "system" start_position => "beginning" } } output { elasticsearch { hosts => ["172.16.10.138:9200"] index => "system-%{+YYYY.MM.dd}" } } logstash -f /root/file.conf
wget https://download.elastic.co/kibana/kibana/kibana-4.3.1-linux-x64.tar.gz //這裏使用wget下載軟件包,也能夠複製連接至迅雷下載好以後共享上傳 tar zxvf kibana-4.3.1-linux-x64.tar.gz -C /usr/local/ cd /usr/local/ mv kibana-4.3.1-linux-x64/ kibana
vim /usr/local/kibana/config/kibana.yml
//2行 server.port: 5601 //開啓端口 //5行 server.host: "0.0.0.0" //容許訪問服務器的地址 //12行 ES地址 elasticsearch.url: "http://172.16.10.138:9200" //20行 kibana.index: ".kibana"
screen是linux下的一種多重視窗管理程序。在使用telnet或SSH遠程登陸linux時,若是鏈接非正常中斷,從新鏈接時,系統將開一個新的session,沒法恢復原來的session.screen命令能夠解決這個問題。
yum install screen -y
/usr/local/kibana/bin/kibana ctrl+a+d 進行丟入後臺 http://172.16.10.138:5601/