1. 程式人生 > >ELK部署和過程中的報錯匯總

ELK部署和過程中的報錯匯總

elk elasticsearch kibana

一、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部署和過程中的報錯匯總