ELK部署和過程中的報錯匯總
一、ELK介紹
1.1 elasticsearch
1.1.1 elasticsearch介紹
ElasticSearch是一個基於Lucene的搜索服務器。它提供了一個分布式多用戶能力的全文搜索引擎,基於RESTful web接口。Elasticsearch是用Java開發的,並作為Apache許可條款下的開放源碼發布,是第二流行的企業搜索引擎。設計用於雲計算中,能夠達到實時搜索,穩定,可靠,快速,安裝使用方便。
1.1.2 elasticsearch幾個重要術語
NRT
elasticsearch是一個近似實時的搜索平臺,從索引文檔到可搜索有些延遲,通常為1秒。集群
集群就是一個或多個節點存儲數據,其中一個節點為主節點,這個主節點是可以通過選舉產生的,並提供跨節點的聯合索引和搜索的功能。集群有一個唯一性標示的名字,默認是elasticsearch,集群名字很重要,每個節點是基於集群名字加入到其集群中的。因此,確保在不同環境中使用不同的集群名字。一個集群可以只有一個節點。強烈建議在配置elasticsearch時,配置成集群模式。節點
節點就是一臺單一的服務器,是集群的一部分,存儲數據並參與集群的索引和搜索功能。像集群一樣,節點也是通過名字來標識,默認是在節點啟動時隨機分配的字符名。當然啦,你可以自己定義。該名字也蠻重要的,在集群中用於識別服務器對應的節點。
節點可以通過指定集群名字來加入到集群中。默認情況下,每個節點被設置成加入到elasticsearch集群。如果啟動了多個節點,假設能自動發現對方,他們將會自動組建一個名為elasticsearch的集群。索引
索引是有幾分相似屬性的一系列文檔的集合。如nginx日誌索引、syslog索引等等。索引是由名字標識,名字必須全部小寫。這個名字用來進行索引、搜索、更新和刪除文檔的操作。類型
在一個索引中,可以定義一個或多個類型。類型是一個邏輯類別還是分區完全取決於你。通常情況下,一個類型被定於成具有一組共同字段的文檔。如ttlsa運維生成時間所有的數據存入在一個單一的名為logstash-ttlsa的索引中,同時,定義了用戶數據類型,帖子數據類型和評論類型。
類型相對於關系型數據庫的表。文檔
文檔是信息的基本單元,可以被索引的。文檔是以JSON格式表現的。
在類型中,可以根據需求存儲多個文檔。
雖然一個文檔在物理上位於一個索引,實際上一個文檔必須在一個索引內被索引和分配一個類型。
文檔相對於關系型數據庫的列。分片和副本
在實際情況下,索引存儲的數據可能超過單個節點的硬件限制。如一個十億文檔需1TB空間可能不適合存儲在單個節點的磁盤上,或者從單個節點搜索請求太慢了。為了解決這個問題,elasticsearch提供將索引分成多個分片的功能。當在創建索引時,可以定義想要分片的數量。每一個分片就是一個全功能的獨立的索引,可以位於集群中任何節點上。
a、水平分割擴展,增大存儲量
b、分布式並行跨分片操作,提高性能和吞吐量
分布式分片的機制和搜索請求的文檔如何匯總完全是有elasticsearch控制的,這些對用戶而言是透明的。
網絡問題等等其它問題可以在任何時候不期而至,為了健壯性,強烈建議要有一個故障切換機制,無論何種故障以防止分片或者節點不可用。
為此,elasticsearch讓我們將索引分片復制一份或多份,稱之為分片副本或副本。
副本也有兩個最主要原因:
高可用性,以應對分片或者節點故障。出於這個原因,分片副本要在不同的節點上。
提供性能,增大吞吐量,搜索可以並行在所有副本上執行。
總之,每一個索引可以被分成多個分片。索引也可以有0個或多個副本。復制後,每個索引都有主分片(母分片)和復制分片(復制於母分片)。分片和副本數量可以在每個索引被創建時定義。索引創建後,可以在任何時候動態的更改副本數量,但是,不能改變分片數。
默認情況下,elasticsearch為每個索引分片5個主分片和1個副本,這就意味著集群至少需要2個節點。索引將會有5個主分片和5個副本(1個完整副本),每個索引總共有10個分片。
每個elasticsearch分片是一個Lucene索引。一個單個Lucene索引有最大的文檔數LUCENE-5843, 文檔數限制為2147483519(MAX_VALUE – 128)。 可通過_cat/shards來監控分片大小。
1.2 logstash
1.2.1 logstash 介紹
LogStash由JRuby語言編寫,基於消息(message-based)的簡單架構,並運行在Java虛擬機(JVM)上。不同於分離的代理端(agent)或主機端(server),LogStash可配置單一的代理端(agent)與其它開源軟件結合,以實現不同的功能。
1.2.2 logStash的四大組件
Shipper:發送事件(events)至LogStash;通常,遠程代理端(agent)只需要運行這個組件即可;
Broker and Indexer:接收並索引化事件;
Search and Storage:允許對事件進行搜索和存儲;
Web Interface:基於Web的展示界面
正是由於以上組件在LogStash架構中可獨立部署,才提供了更好的集群擴展性。
1.2.2 LogStash主機分類
代理主機(agent host):作為事件的傳遞者(shipper),將各種日誌數據發送至中心主機;只需運行Logstash 代理(agent)程序;
中心主機(central host):可運行包括中間轉發器(Broker)、索引器(Indexer)、搜索和存儲器(Search and Storage)、Web界面端(Web Interface)在內的各個組件,以實現對日誌數據的接收、處理和存儲。
1.3 kibana
Logstash是一個完全開源的工具,他可以對你的日誌進行收集、分析,並將其存儲供以後使用(如,搜索),您可以使用它。說到搜索,logstash帶有一個web界面,搜索和展示所有日誌。
二、使用ELK必要性(解決運維痛點)
開發人員不能登錄線上服務器查看詳細日誌
各個系統都有日誌,日至數據分散難以查找
日誌數據量大,查詢速度慢,或者數據不夠實時
三、elk部署之環境準備
3.1 /etc/security/limits.conf相關配置
* soft nofile 65536 * hard nofile 65536 * soft nproc 2048 * hard nproc 4096 * soft memlock unlimited * hard memlock unlimited
3.1.1 /etc/security/limits.d/90-nproc.conf
* soft nproc 2048
註:這步不配elasticsearch會出現錯誤信息:[1]: max number of threads [1024] for user [elk] is too low, increase to at least [2048]
3.2 /etc/sysctl.conf配置
vm.max_map_count=655360
3.3使更改生效
sysctl -p
3.4 創建運行elk的用戶
useradd elk;passwd elk
3.5 創建elk的運行目錄及權限配置
mkdir -p /usr/local/elk-plf chown -R elk.elk /usr/local/elk-plf
四、elk部署安裝
自行官網下載elk的安裝包
4.1 安裝elasticsearch
tar -zxvf elasticsearch-5.4.3.tar.gz -C /usr/local/elk-plf/
4.1.1 配置elasticsearch配置文件
echo -e "cluster.name: test-cluster\nnode.name: test-node1\npath.data: /usr/local/elk-plf/elasticsearch-5.4.3/data\npath.logs: /usr/local/elk-plf/elasticsearch-5.4.3/logs\nbootstrap.memory_lock: true\nbootstrap.system_call_filter: false\nnetwork.host: 192.168.12.156\nhttp.port: 9200\nhttp.cors.enabled: true\nhttp.cors.allow-origin: "*"" >> /usr/local/elk-plf/elasticsearch-5.4.3/config/elasticsearch.yml
配置結果
[root@test-node1 local]# grep "^[a-Z]" /usr/local/elk-plf/elasticsearch-5.4.3/config/elasticsearch.yml cluster.name: test-cluster node.name: test-node1 path.data: /usr/local/elk-plf/elasticsearch-5.4.3/data path.logs: /usr/local/elk-plf/elasticsearch-5.4.3/logs bootstrap.memory_lock: true bootstrap.system_call_filter: false network.host: 192.168.12.156 http.port: 9200 http.cors.enabled: true http.cors.allow-origin: "*"
4.1.2配置elasticsearch的內存分配(註意,內存配置太大可能會啟動不了,報GC錯誤)
vim /usr/local/elk-plf/elasticsearch-5.4.3/config/jvm.options
-Xms512m -Xmx512m
4.1.3 配置elasticsearch的JAVA_HOME (我的系統jdk是1.7,所以給es單獨配置jdk1.8)
[root@qd-cs_rs-console01-bj elk-plf]# vim elasticsearch-5.4.3/bin/elasticsearch JAVA_HOME=/usr/local/jdk1.8.0_60 JRE_HOME=/usr/local/jdk1.8.0_60/jre
在文件上方添加JAVA_HOME和JRE_HOME保存退出
4.1.4 啟動elasticsearch
[root@qd-cs_rs-console01-bj elk-plf]# su elk [elk@qd-cs_rs-console01-bj elk-plf]$ elasticsearch-5.4.3/bin/elasticsearch -d
4.1.5 安裝elasticsearch插件head
1、 安裝nodejs 註意:由於head插件本質上還是一個nodejs的工程,因此需要安裝node,使用npm來安裝依賴的包。(npm可以理解為maven)
wget tar -zxvf node-v4.4.7-linux-x64.tar.gz -C /usr/local/elk5/
2、 配置node的環境變量
[root@qd-cs_rs-console01-bj src]# vim /etc/profile.d/npm.sh #!/bin/bash export NODE_HOME=/usr/local/elk-plf/node-v4.4.7-linux-x64 export PATH=$NODE_HOME/bin:$PATH [root@qd-cs_rs-console01-bj src]# source /etc/profile.d/npm.sh [root@qd-cs_rs-console01-bj src]# node -v [root@qd-cs_rs-console01-bj src]# npm -v
3、 安裝grunt (grunt是一個很方便的構建工具,可以進行打包壓縮、測試、執行等等的工作,5.0裏的head插件就是通過grunt啟動的。因此需要安裝一下grunt)
[root@qd-cs_rs-console01-bj elk5]# wget https://github.com/mobz/elasticsearch-head/archive/master.zip [root@qd-cs_rs-console01-bj elk5]# unzip master.zip [root@qd-cs_rs-console01-bj elk5]# cd elasticsearch-head-master/ [root@qd-cs_rs-console01-bj elasticsearch-head-master]# npm install -g grunt-cli [root@qd-cs_rs-console01-bj elasticsearch-head-master]# npm install
4、修改head配置文件 (添加本機的id地址)
[root@qd-cs_rs-console01-bj elasticsearch-head-master]# vim Gruntfile.js connect: { server: { options: { hostname: ‘192.168.12.156‘, port: 9100, base: ‘.‘, keepalive: true } } }
添加hostname屬性
5、 修改elasticsearch的ip地址
this.base_uri = this.config.base_uri || this.prefs.get("app-base_uri") || "http://192.168.12.156:9200";
6、 啟動head (要進入head目錄中啟動)
[root@qd-cs_rs-console01-bj elasticsearch-head-master]# grunt server
7、 elasticsearch安裝啟動過程中遇到的問題
Q:Caused by: java.lang.RuntimeException: can not run elasticsearch as root
A:elasticsearch不允許使用root啟動,因此我們要解決這個問題需要新建一個用戶來啟動elasticsearch
Q: java.security.AccessControlException:accessdenied("javax.management.MBeanTrustPermission""register")
A: 權限問題,給elasticsearch的安裝目錄相應的用戶權限
Q:max file descriptors [4096] for elasticsearch process is too low, increase to at least [65536]
A:文件描述符限制,如果配置了上面的limit.conf就不會出現這個錯誤
Q:max number of threads [1024] for user [elsearch] is too low, increase to at least [2048]
A:配置/etc/security/limit.d/90-nproc.conf,添加* soft nproc 2048
Q:max virtual memory areas vm.max_map_count [65530] is too low, increase to at least
A:配置/etc/sysctl.conf,添加vm.max_map_count = 655360
Q:system call filters failed to install; check the logs and fix your configuration or disable system call filters at your own risk
A:這是在因為操作系統不支持SecComp,而ES5.4.1默認bootstrap.system_call_filter為true進行檢測,所以導致檢測失敗,失敗後直接導致ES不能啟動。在elasticsearch.yml中配置bootstrap.system_call_filter為false,註意要在bootstrap.memory_lock: false下面配置
還有一些其他的錯誤,由於安裝時沒有記錄。以後有了再補上吧
4.2 安裝logstash
4.2.1 簡介
Logstash是一個接收,處理,轉發日誌的工具。支持系統日誌,webserver日誌,錯誤日誌,應用日誌,總之包括所有可以拋出來的日誌類型。怎麽樣聽起來挺厲害的吧?
在一個典型的使用場景下(ELK):用Elasticsearch作為後臺數據的存儲,kibana用來前端的報表展示。Logstash在其過程中擔任搬運工的角色,它為數據存儲,報表查詢和日誌解析創建了一個功能強大的管道鏈。Logstash提供了多種多樣的 input,filters,codecs和output組件,讓使用者輕松實現強大的功能。好了讓我們開始吧
4.2.2 安裝
[root@qd-cs_rs-console01-bj src]# tar -zxvf logstash-all-plugins-2.4.0.tar.gz -C /usr/local/elk-plf/
4.2.3 啟動
[root@qd-cs_rs-console01-bj src]# /usr/local/logstash-2.4.0/bin/logstash -e ‘input { stdin{} } output { stdout{} }‘ Settings: Default pipeline workers: 4 Pipeline main started hello ===> 輸入 2017-11-10T17:17:03.314Z test-node1 hello ===> 輸出
4.2.4 logstash輸出到elasticsearch
[root@test-node1 local]# /usr/local/logstash-2.4.0/bin/logstash -e ‘input { stdin{} } output { elasticsearch { hosts => ["192.168.12.156:9200"] } }‘ Settings: Default pipeline workers: 4 Pipeline main started
上圖中在logstash輸入的信息已經到了elasticsearch中,並可以查詢到。
4.3 安裝kibana顯示elasticsearch中的數據
4.3.1 簡介
Kibana是一個開源的分析與可視化平臺,設計出來用於和Elasticsearch一起使用的。你可以用kibana搜索、查看、交互存放在Elasticsearch索引裏的數據,使用各種不同的圖表、表格、地圖等kibana能夠很輕易地展示高級數據分析與可視化。
Kibana讓我們理解大量數據變得很容易。它簡單、基於瀏覽器的接口使你能快速創建和分享實時展現Elasticsearch查詢變化的動態儀表盤。安裝Kibana非常快,你可以在幾分鐘之內安裝和開始探索你的Elasticsearch索引數據—-—-不需要寫任何代碼,沒有其他基礎軟件依賴。
4.3.2 安裝kibana
[root@qd-cs_rs-console01-bj src]# tar -zxvf kibana-5.4.3-linux-x86_64.tar.gz -C /usr/local/elk-plf/ [root@qd-cs_rs-console01-bj src]# cd /usr/local/elk-plf/kibana-5.4.3-linux-x86_64/
4.3.3 配置kibana
[root@qd-cs_rs-console01-bj kibana-5.4.3-linux-x86_64]# cat config/kibana.yml |grep "^[a-Z]" server.port: 5601 server.host: "192.168.12.156" elasticsearch.url: "http://192.168.12.156:9200" kibana.index: ".kibana" kibana.defaultAppId: "discover" elasticsearch.pingTimeout: 1500 elasticsearch.requestTimeout: 30000 elasticsearch.startupTimeout: 5000
4.3.4 啟動kibana
[root@test-node1 kibana-5.4.3-linux-x86_64]# ./bin/kibana log [17:37:45.712] [info][status][plugin:[email protected]] Status changed from uninitialized to green - Ready log [17:37:45.881] [info][status][plugin:[email protected]] Status changed from uninitialized to yellow - Waiting for Elasticsearch log [17:37:45.950] [info][status][plugin:[email protected]] Status changed from uninitialized to green - Ready log [17:37:45.986] [info][status][plugin:[email protected]] Status changed from uninitialized to green - Ready log [17:37:46.033] [info][status][plugin:[email protected]] Status changed from yellow to green - Kibana index ready log [17:37:46.327] [info][status][plugin:[email protected]] Status changed from uninitialized to green - Ready log [17:37:46.339] [info][listening] Server running at http://192.168.12.156:5601 log [17:37:46.348] [info][status][ui settings] Status changed from uninitialized to green - Ready
4.3.5 配置kibana索引
經過上面的步驟,elk就全部裝好了。下面用elk來監控catalina日誌
五、配置elk監控tomcat的catalina日誌
5.1 logstash配置文件
[root@qd-cs_rs-console01-bj src]# cd /usr/local/logstash-2.4.0/ [root@qd-cs_rs-console01-bj logstash-2.4.0]# vim conf/tomcat.conf input { file { path => ["/opt/tomcat-msm/logs/catalina.out"] start_position => "beginning" } } filter { date { match => [ "timestamp" , "YYYY-MM-dd HH:mm:ss" ] } } output { elasticsearch { hosts => ["192.168.12.156:9200"] } }
5.1.2 以配置文件的方式啟動logstash
[root@qd-cs_rs-console01-bj logstash-2.4.0]# bin/logstash -f conf/tomcat.conf Settings: Default pipeline workers: 4 Pipeline main started
5.2、登錄kibana查看日誌
本文出自 “初心、始終” 博客,轉載請與作者聯系!
ELK部署和過程中的報錯匯總