日志分析工具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
Kibana 也是一個開源和免費的工具,他可以幫助您匯總、分析和搜索重要數據日志并提供友好的web界面。他可以為 Logstash 和 ElasticSearch 提供的日志分析的 Web 界面
二、使用ELK必要性(解決運維痛點)
- ?? 開發人員不能登錄線上服務器查看詳細日志
- ?? 各個系統都有日志,日至數據分散難以查找
- ?? 日志數據量大,查詢速度慢,或者數據不夠實時
三、elk部署之環境準備
3.1 機器準備
準備兩臺機器,以下是其中一臺做為master的機器
[root@linux-node1 ~]# cat /etc/redhat-release CentOS Linux release 7.0.1406 (Core) [root@linux-node1 ~]# uname -a Linux linux-node1.example.com 3.10.0-123.el7.x86_64 #1 SMP Mon Jun 30 12:09:22 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux [root@linux-node1 ~]# tail -2 /etc/hosts 192.168.230.128 linux-node1 linux-node1.example.com 192.168.230.129 linux-node2 linux-node2.example.com [root@linux-node1 ~]# ifconfig eth0|awk -F '[ :]+' 'NR==2{print $3}' 192.168.230.128 [root@linux-node1~]# systemctl stop firewalld [root@linux-node1~]# getenforce 0 Disabled [root@linux-node1~ /]# systemctl disable firewalld.service時間同步
echo "#time sync by zsq at $(date +%F)" >> /var/spool/cron/root echo "*/5 * * * * /usr/sbin/ntpdate time.nist.gov &>/dev/null" >>/var/spool/cron/root重啟crond
/sbin/service crond restart理想實踐是給2G內存,我這里給1.5G,elasticsearch做集群還需要一臺相同的配置
[root@linux-node1 ~]# free -m total used free shared buffers cached Mem:146751894880142最佳實踐cpu給2顆
[root@linux-node1 ~]# cat /proc/cpuinfo |grep"physical id"|sort|uniq|wc -l 2需要有java環境
[root@linux-node1 ~]# yum -y install java [root@linux-node1 ~]# java -version openjdk version "1.8.0_111" OpenJDK Runtime Environment (build 1.8.0_111-b15) OpenJDK 64-Bit Server VM (build 25.111-b15, mixed mode)配置epel yum源
下載并安裝EPEL
wget http://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpmrpm -ivh epel-release-latest-7.noarch.rpm3.3 elk準備環境
3.3.1 elasticsearch安裝
下載并安裝GPG key
[root@linux-node2 ~]# rpm --import https://packages.elastic.co/GPG-KEY-elasticsearch添加yum倉庫
[root@linux-node1 ~]# vim /etc/yum.repos.d/elasticsearch.repo [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 enabled=1安裝elasticsearch
yum install -y elasticsearch安裝太慢直接用rpm包
root@linux-node1 ~]# rpm -ivh elasticsearch-2.4.3.rpm Preparing... ################################# [100%] Creating elasticsearch group... OK Creating elasticsearch user... OK Updating / installing...1:elasticsearch-2.4.3-1 ################################# [100%] ### NOT starting on installation, please execute the following statements to configure elasticsearch service to start automatically using systemdsudo systemctl daemon-reloadsudo systemctl enable elasticsearch.service ### You can start elasticsearch service by executing sudo systemctl start elasticsearch.service再執行開機啟動
systemctl daemon-reload systemctl enable elasticsearch.service啟動
systemctl start elasticsearch.service四、管理配置elasticsearch
4.1 管理linux-node1的elasticsearch
修改elasticsearch配置文件,并授權
[root@linux-node1 ~]# grep -n '^[a-Z]' /etc/elasticsearch/elasticsearch.yml 17:cluster.name: check-cluster #集群節點 23:node.name: linux-node1 #節點名字 33:path.data: /data/es-data #數據路徑 37:path.logs: /var/log/elasticsearch/ #自身log 43:bootstrap.memory_lock: true #是否鎖定內存 54:network.host: 0.0.0.0 #默認是所有網段 58:http.port: 9200 #端口 [root@linux-node1 ~]# mkdir -p /data/es-data [root@linux-node1 ~]# chown elasticsearch.elasticsearch /data/es-data/啟動elasticsearch?
[root@linux-node1 ~]# systemctl start elasticsearch檢查
[root@linux-node1 ~]# netstat -ntpl|grep 9200 tcp6 0 0 :::9200 :::* LISTEN 2042/java訪問:
?
4.2 Elasticsearch插件
1.安裝Elasticsearch集群管理插件
[root@linux-node1 ~]# /usr/share/elasticsearch/bin/plugin install mobz/elasticsearch-head-> Installing mobz/elasticsearch-head...Trying https://github.com/mobz/elasticsearch-head/archive/master.zip ...Downloading ..........................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................DONEVerifying https://github.com/mobz/elasticsearch-head/archive/master.zip checksums if available ...NOTE: Unable to verify checksum for downloaded plugin (unable to find .sha1 or .md5 file to verify)Installed head into /usr/share/elasticsearch/plugins/head?
訪問head集群插件:http://ES_IP:9200/_plugin/head/
?
寫點數據, 寫一個/index-demo/test的索引,方法post,點擊提交請求
{"user": "oldboy","mesg": "hello world" }?
get提交id,id就是右邊提示的_id信息,查詢到_soure里的內容
?
如果刪除用delete刪除
部署第二臺,集群部署
[root@linux-node2 /]# java -version openjdk version "1.8.0_111" OpenJDK Runtime Environment (build 1.8.0_111-b15) OpenJDK 64-Bit Server VM (build 25.111-b15, mixed mode) [root@linux-node2 /]# rz -E rz waiting to receive. [root@linux-node2 /]# rpm -ivh elasticsearch-2.4.3.rpm warning: elasticsearch-2.4.3.rpm: Header V4 RSA/SHA1 Signature, key ID d88e42b4: NOKEY Preparing... ################################# [100%] Creating elasticsearch group... OK Creating elasticsearch user... OK Updating / installing...1:elasticsearch-2.4.3-1 ################################# [100%] ### NOT starting on installation, please execute the following statements to configure elasticsearch service to start automatically using systemdsudo systemctl daemon-reloadsudo systemctl enable elasticsearch.service ### You can start elasticsearch service by executing sudo systemctl start elasticsearch.service [root@linux-node2 /]# systemctl daemon-reload [root@linux-node2 /]# systemctl enable elasticsearch.service Created symlink from /etc/systemd/system/multi-user.target.wants/elasticsearch.service to /usr/lib/systemd/system/elasticsearch.service. [root@linux-node2 /]# systemctl start elasticsearch.service [root@linux-node2 /]# netstat -ntpl|grep "9200" tcp6 0 0 127.0.0.1:9200 :::* LISTEN 2546/java tcp6 0 0 ::1:9200 :::* LISTEN 2546/java [root@linux-node2 data]# grep -n '^[a-Z]' /etc/elasticsearch/elasticsearch.yml 17:cluster.name: check-cluster 23:node.name: linux-node2 33:path.data: /data/es-data 37:path.logs: /var/log/elasticsearch/ 43:bootstrap.memory_lock: true 54:network.host: 0.0.0.0 58:http.port: 9200[root@linux-node2 ~]# mkdir -p /data/es-data [root@linux-node2 ~]# chown elasticsearch.elasticsearch /data/es-data/啟動elasticsearch?
[root@linux-node2 ~]# systemctl start elasticsearch檢查
[root@linux-node2 ~]# netstat -ntpl|grep 9200 tcp6 0 0 :::9200 :::* LISTEN 2042/java瀏覽器訪問
?
查看日志,/etc/security/limits.conf,配置文件需要追加內容# allow user 'elasticsearch' mlockall
下的兩行
[2017-01-03 20:56:02,486][WARN ][bootstrap ] These can be adjusted by modifying /etc/security/limits.conf, for example: # allow user 'elasticsearch' mlockall elasticsearch soft memlock unlimitedelasticsearch hard memlock unlimited瀏覽器下訪問,點擊概覽,已經有一臺集群節點,要稍微等會,添加另外一臺
通過組播進行通信,會通過cluster進行查找,如果無法通過組播查詢,修改成單播即可,配置文件中指定,圖中的有*號代表主節點
# Pass an initial list of hosts to perform discovery when new node is started: # The default list of hosts is ["127.0.0.1", "[::1]"] discovery.zen.ping.unicast.hosts: ["192.168.230.128", "192.168.230.129"]#把同一集群的節點添加到這里,方便它們互相認識?
在瀏覽器中查看分片信息,一個索引默認被分成了5個分片,每份數據被分成了五個分片(可以調節分片數量),外圍帶綠色框的為主分片,不帶框的為副本分片,主分片丟失,副本分片會復制一份成為主分片,起到了高可用的作用,主副分片也可以使用負載均衡加快查詢速度,但是如果主副本分片都丟失,則索引就是徹底丟失。
4.3.安裝kopf監控插件
[root@linux-node1 /]# /usr/share/elasticsearch/bin/plugin install lmenezes/elasticsearch-kopf訪問kopf監控插件:http://ES_IP:9200/_plugin/kopf
從下圖可以看出節點的負載,cpu適應情況,java對內存的使用(heap usage),磁盤使用,啟動時間
?
另一個監控插件bigdesk很強大,但是bigdesk目前還不支持2.1!!!安裝bigdesk的方法如下
/usr/share/elasticsearch/bin/plugin install lukas-vlcek/bigdesk
4.4.node間組播通信和分片
當第一個節點啟動,它會組播發現其他節點,發現集群名字一樣的時候,就會自動加入集群。隨便一個節點都是可以連接的,并不是主節點才可以連接,連接的節點起到的作用只是匯總信息展示
?
最初可以自定義設置分片的個數,分片一旦設置好,就不可以改變。主分片和副本分片都丟失,數據即丟失,無法恢復,可以將無用索引刪除。有些老索引或者不常用的索引需要定期刪除,否則會導致es資源剩余有限,占用磁盤大,搜索慢等。如果暫時不想刪除有些索引,可以在插件中關閉索引,就不會占用內存了。
?
轉載于:https://www.cnblogs.com/w787815/p/6676335.html
總結
以上是生活随笔為你收集整理的日志分析工具ELK(一)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 大众点评App92832577
- 下一篇: 天天跳绳怎么完成作业