搭建ELK日志分析平台(上)—— ELK介紹及搭建 Elasticsearch 分布式集群


筆記內容:搭建ELK日志分析平台(上)—— ELK介紹及搭建 Elasticsearch 分布式集群
筆記日期:2018-03-02

  • 27.1 ELK介紹
  • 27.2 ELK安裝准備工作
  • 27.3 安裝es
  • 27.4 配置es
  • 27.5 curl查看es集群情況

ELK介紹

需求背景:

  • 業務發展越來越龐大,服務器越來越多
  • 各種訪問日志、應用日志、錯誤日志量越來越多,導致運維人員無法很好的去管理日志
  • 開發人員排查問題,需要到服務器上查日志,不方便
  • 運營人員需要一些數據,需要我們運維到服務器上分析日志

為什么要用到ELK:

一般我們需要進行日志分析場景:直接在日志文件中 grep、awk 就可以獲得自己想要的信息。但在規模較大也就是日志量多而復雜的場景中,此方法效率低下,面臨問題包括日志量太大如何歸檔、文本搜索太慢怎么辦、如何多維度查詢。需要集中化的日志管理,所有服務器上的日志收集匯總。常見解決思路是建立集中式日志收集系統,將所有節點上的日志統一收集,管理,訪問。

大型系統通常都是一個分布式部署的架構,不同的服務模塊部署在不同的服務器上,問題出現時,大部分情況需要根據問題暴露的關鍵信息,定位到具體的服務器和服務模塊,構建一套集中式日志系統,可以提高定位問題的效率。

一個完整的集中式日志系統,需要包含以下幾個主要特點:

  • 收集-能夠采集多種來源的日志數據
  • 傳輸-能夠穩定的把日志數據傳輸到中央系統
  • 存儲-如何存儲日志數據
  • 分析-可以支持 UI 分析
  • 警告-能夠提供錯誤報告,監控機制

而ELK則提供了一整套解決方案,並且都是開源軟件,之間互相配合使用,完美銜接,高效的滿足了很多場合的應用。是目前主流的一種日志系統。

ELK簡介:

ELK是三個開源軟件的縮寫,分別為:Elasticsearch 、 Logstash以及Kibana , 它們都是開源軟件。不過現在還新增了一個Beats,它是一個輕量級的日志收集處理工具(Agent),Beats占用資源少,適合於在各個服務器上搜集日志后傳輸給Logstash,官方也推薦此工具,目前由於原本的ELK Stack成員中加入了 Beats 工具所以已改名為Elastic Stack。

Elastic Stack包含:

  • Elasticsearch是個開源分布式搜索引擎,提供搜集、分析、存儲數據三大功能。它的特點有:分布式,零配置,自動發現,索引自動分片,索引副本機制,restful風格接口,多數據源,自動搜索負載等。詳細可參考Elasticsearch權威指南

  • Logstash 主要是用來日志的搜集、分析、過濾日志的工具,支持大量的數據獲取方式。一般工作方式為c/s架構,client端安裝在需要收集日志的主機上,server端負責將收到的各節點日志進行過濾、修改等操作在一並發往elasticsearch上去。

  • Kibana 也是一個開源和免費的工具,Kibana可以為 Logstash 和 ElasticSearch 提供的日志分析友好的 Web 界面,可以幫助匯總、分析和搜索重要數據日志。

  • Beats在這里是一個輕量級日志采集器,其實Beats家族有6個成員,早期的ELK架構中使用Logstash收集、解析日志,但是Logstash對內存、cpu、io等資源消耗比較高。相比 Logstash,Beats所占系統的CPU和內存幾乎可以忽略不計

ELK Stack (5.0版本之后)--> Elastic Stack == (ELK Stack + Beats)。目前Beats包含六種工具:

  • Packetbeat: 網絡數據(收集網絡流量數據)
  • Metricbeat: 指標 (收集系統、進程和文件系統級別的 CPU 和內存使用情況等數據)
  • Filebeat: 日志文件(收集文件數據)
  • Winlogbeat: windows事件日志(收集 Windows 事件日志數據)
  • Auditbeat:審計數據 (收集審計日志)
  • Heartbeat:運行時間監控 (收集系統運行時的數據)

關於x-pack工具:

  • x-pack對Elastic Stack提供了安全、警報、監控、報表、圖表於一身的擴展包,是收費的,所以本文不涉及x-pack的安裝

ELK官網:

https://www.elastic.co/cn/

中文指南:

https://www.gitbook.com/book/chenryn/elk-stack-guide-cn/details

ELK架構圖:
搭建ELK日志分析平台(上)—— ELK介紹及搭建 Elasticsearch 分布式集群


ELK安裝准備工作

准備3台機器,這樣才能完成分布式集群的實驗,當然能有更多機器更好:

  • 192.168.77.128
  • 192.168.77.130
  • 192.168.77.134

角色划分:

  • 3台機器全部安裝jdk1.8,因為elasticsearch是java開發的
  • 3台全部安裝elasticsearch (后續都簡稱為es)
  • 192.168.77.128作為主節點
  • 192.168.77.130以及192.168.77.134作為數據節點
  • 主節點上需要安裝kibana
  • 在192.168.77.130上安裝 logstash

ELK版本信息:

  • Elasticsearch-6.0.0
  • logstash-6.0.0
  • kibana-6.0.0
  • filebeat-6.0.0

配置三台機器的hosts文件內容如下:

$ vim /etc/hosts
192.168.77.128 master-node
192.168.77.130 data-node1
192.168.77.134 data-node2

然后三台機器都得關閉防火牆或清空防火牆規則。


安裝es

先上官方的安裝文檔:

https://www.elastic.co/guide/en/elastic-stack/current/installing-elastic-stack.html

我這里也是通過官方給的源進行安裝,以下操作3台機器上都要執行,因為三台機器都需要安裝es:

[root@master-node ~]# rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch
[root@master-node ~]# vim /etc/yum.repos.d/elastic.repo # 增加以下內容
[elasticsearch-6.x]
name=Elasticsearch repository for 6.x packages
baseurl=https://artifacts.elastic.co/packages/6.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md
[root@master-node ~]# yum install -y elasticsearch

如果使用官方的源下載實在太慢的話,也可以直接下載rpm包進行安裝:

[root@master-node ~]# wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.0.0.rpm
[root@master-node ~]# rpm -ivh elasticsearch-6.0.0.rpm

配置es

elasticsearch配置文件在這兩個地方,有兩個配置文件:

[root@master-node ~]# ll /etc/elasticsearch
總用量 16
-rw-rw---- 1 root elasticsearch 2869 2月  17 03:03 elasticsearch.yml 
-rw-rw---- 1 root elasticsearch 2809 2月  17 03:03 jvm.options
-rw-rw---- 1 root elasticsearch 5091 2月  17 03:03 log4j2.properties
[root@local ~]# ll /etc/sysconfig/elasticsearch 
-rw-rw---- 1 root elasticsearch 1613 2月  17 03:03 /etc/sysconfig/elasticsearch
[root@master-node ~]# 

elasticsearch.yml 文件用於配置集群節點等相關信息的,elasticsearch 文件則是配置服務本身相關的配置,例如某個配置文件的路徑以及java的一些路徑配置什么的。

官方的配置文檔:

https://www.elastic.co/guide/en/elasticsearch/reference/6.0/rpm.html

開始配置集群節點,在 192.168.77.128 上編輯配置文件:

[root@master-node ~]# vim /etc/elasticsearch/elasticsearch.yml # 增加或更改以下內容
cluster.name: master-node  # 集群中的名稱
node.name: master  # 該節點名稱
node.master: true  # 意思是該節點為主節點
node.data: false  # 表示這不是數據節點
network.host: 0.0.0.0  # 監聽全部ip,在實際環境中應設置為一個安全的ip
http.port: 9200  # es服務的端口號
discovery.zen.ping.unicast.hosts: ["192.168.77.128", "192.168.77.130", "192.168.77.134"] # 配置自動發現
[root@master-node ~]# 

然后將配置文件發送到另外兩台機器上去:

[root@master-node ~]# scp /etc/elasticsearch/elasticsearch.yml data-node1:/tmp/
[root@master-node ~]# scp /etc/elasticsearch/elasticsearch.yml data-node2:/tmp/

到兩台機器上去更改該文件,修改以下幾處地方:

192.168.77.130:

[root@data-node1 ~]# vim /tmp/elasticsearch.yml 
node.name: data-node1
node.master: false
node.data: true
[root@data-node1 ~]# cp /tmp/elasticsearch.yml /etc/elasticsearch/elasticsearch.yml 
cp: overwrite ‘/etc/elasticsearch/elasticsearch.yml’? yes
[root@data-node1 ~]# 

192.168.77.134:

[root@data-node2 ~]# vim /tmp/elasticsearch.yml 
node.name: data-node2
node.master: false
node.data: true
[root@data-node2 ~]# cp /tmp/elasticsearch.yml /etc/elasticsearch/elasticsearch.yml 
cp: overwrite ‘/etc/elasticsearch/elasticsearch.yml’? yes
[root@data-node2 ~]# 

完成以上的配置之后,到主節點上,啟動es服務:

systemctl start elasticsearch.service

主節點啟動完成之后,再啟動其他節點的es服務。

排錯記錄:

我這里啟動主節點的時候沒有啟動成功,於是查看es的日志,但是卻並沒有生成,那就只能去看系統日志了:

[root@master-node ~]# ls /var/log/elasticsearch/
[root@master-node ~]# tail -n50 /var/log/messages

錯誤日志如下:
搭建ELK日志分析平台(上)—— ELK介紹及搭建 Elasticsearch 分布式集群

如圖,可以看到是JDK的路徑配置得不對,沒法在PATH里找到相應的目錄。

於是查看JAVA_HOME環境變量的值指向哪里:

[root@master-node ~]# echo $JAVA_HOME
/usr/local/jdk1.8/
[root@master-node ~]# ls /usr/local/jdk1.8/
bin        db       javafx-src.zip  lib      man          release  THIRDPARTYLICENSEREADME-JAVAFX.txt
COPYRIGHT  include  jre             LICENSE  README.html  src.zip  THIRDPARTYLICENSEREADME.txt
[root@master-node ~]# 

發現指向的路徑並沒有錯,那就可能是忘記在profile里寫export了,於是在profile的末尾加上了這一句:

export JAVA_HOME JAVA_BIN JRE_HOME PATH CLASSPATH

使用source命令重新加載了profile之后,重新啟動es服務,但是依舊啟動不起來,於是我發現我忽略了一條錯誤日志:
搭建ELK日志分析平台(上)—— ELK介紹及搭建 Elasticsearch 分布式集群

這是無法在環境變量中找到java可執行文件,那就好辦了,做一個軟鏈接過去即可:

[root@master-node ~]# ln -s /usr/local/jdk1.8/bin/java /usr/bin/

再次啟動es服務,這次就終於啟動成功了:

[root@master-node ~]# systemctl restart elasticsearch.service 
[root@master-node ~]# ps aux |grep elasticsearch
elastic+   2655  9.4 31.8 3621592 1231396 ?     Ssl  15:42   0:14 /bin/java -Xms1g -Xmx1g -XX:+UseConcMarkSweepGC -XX:CMSInitiatingOccupancyFraction=75 -XX:+UseCMSInitiatingOccupancyOnly -XX:+AlwaysPreTouch -Xss1m -Djava.awt.headless=true -Dfile.encoding=UTF-8 -Djna.nosys=true -XX:-OmitStackTraceInFastThrow -Dio.netty.noUnsafe=true -Dio.netty.noKeySetOptimization=true -Dio.netty.recycler.maxCapacityPerThread=0 -Dlog4j.shutdownHookEnabled=false -Dlog4j2.disable.jmx=true -Djava.io.tmpdir=/tmp/elasticsearch.4M9NarAc -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/var/lib/elasticsearch -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintTenuringDistribution -XX:+PrintGCApplicationStoppedTime -Xloggc:/var/log/elasticsearch/gc.log -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=32 -XX:GCLogFileSize=64m -Des.path.home=/usr/share/elasticsearch -Des.path.conf=/etc/elasticsearch -cp /usr/share/elasticsearch/lib/* org.elasticsearch.bootstrap.Elasticsearch -p /var/run/elasticsearch/elasticsearch.pid --quiet
root       2735  0.0  0.0 112660   968 pts/0    S+   15:44   0:00 grep --color=auto elasticsearch
[root@master-node ~]# netstat -lntp |grep java # es服務會監聽兩個端口
tcp6       0      0 :::9200                 :::*                    LISTEN      2655/java           
tcp6       0      0 :::9300                 :::*                    LISTEN      2655/java           
[root@master-node ~]# 

9300端口是集群通信用的,9200則是數據傳輸時用的。

主節點啟動成功后,依次啟動其他節點即可,我這里其他節點都是啟動正常的。


curl查看es集群情況

集群的健康檢查:

[root@master-node ~]# curl '192.168.77.128:9200/_cluster/health?pretty'
{
  "cluster_name" : "master-node",
  "status" : "green",  # 為green則代表健康沒問題,如果是yellow或者red則是集群有問題
  "timed_out" : false,  # 是否有超時
  "number_of_nodes" : 3, # 集群中的節點數量
  "number_of_data_nodes" : 2, # 集群中data節點的數量
  "active_primary_shards" : 0,
  "active_shards" : 0,
  "relocating_shards" : 0,
  "initializing_shards" : 0,
  "unassigned_shards" : 0,
  "delayed_unassigned_shards" : 0,
  "number_of_pending_tasks" : 0,
  "number_of_in_flight_fetch" : 0,
  "task_max_waiting_in_queue_millis" : 0,
  "active_shards_percent_as_number" : 100.0
}
[root@master-node ~]# 

查看集群的詳細信息:

[root@master-node ~]# curl '192.168.77.128:9200/_cluster/state?pretty'
{
  "cluster_name" : "master-node",
  "compressed_size_in_bytes" : 354,
  "version" : 4,
  "state_uuid" : "QkECzZHVQJOXB7K_9CgXYQ",
  "master_node" : "SGez5oKUTa2eIijLp8MsLQ",
  "blocks" : { },
  "nodes" : {
    "4sJURH6cTsykgLberJ6pVw" : {
      "name" : "data-node1",
      "ephemeral_id" : "t16_uw92T5ajJqp2HWodrg",
      "transport_address" : "192.168.56.128:9300",
      "attributes" : { }
    },
    "SGez5oKUTa2eIijLp8MsLQ" : {
      "name" : "master",
      "ephemeral_id" : "eJZX20tpSNyJCHgBIC4x4Q",
      "transport_address" : "192.168.77.128:9300",
      "attributes" : { }
    },
    "nZ4L5-KwSdirnluhJTGn7Q" : {
      "name" : "data-node2",
      "ephemeral_id" : "pQENcoUcRY6fTs7SamX2KQ",
      "transport_address" : "192.168.77.134:9300",
      "attributes" : { }
    }
  },
  "metadata" : {
    "cluster_uuid" : "jZPv-awrQDe163Nu3y2hHw",
    "templates" : { },
    "indices" : { },
    "index-graveyard" : {
      "tombstones" : [ ]
    }
  },
  "routing_table" : {
    "indices" : { }
  },
  "routing_nodes" : {
    "unassigned" : [ ],
    "nodes" : {
      "nZ4L5-KwSdirnluhJTGn7Q" : [ ],
      "4sJURH6cTsykgLberJ6pVw" : [ ]
    }
  },
  "restore" : {
    "snapshots" : [ ]
  },
  "snapshot_deletions" : {
    "snapshot_deletions" : [ ]
  },
  "snapshots" : {
    "snapshots" : [ ]
  }
}
[root@master-node ~]# 

檢查沒有問題后,我們的es集群就搭建完成了,很簡單。

這個集群的狀態信息也可以通過瀏覽器查看:
搭建ELK日志分析平台(上)—— ELK介紹及搭建 Elasticsearch 分布式集群

但是顯示出來的也是一堆字符串,我們希望這些信息能以圖形化的方式顯示出來,那就需要安裝kibana來為我們展示這些數據了。

更多使用curl命令操作elasticsearch的內容,可參考以下文章:

http://zhaoyanblog.com/archives/732.html


下一篇:
搭建ELK日志分析平台(下)—— 搭建kibana和logstash服務器


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM