为你讲解ELK的组成与部署
生活随笔
收集整理的這篇文章主要介紹了
为你讲解ELK的组成与部署
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
為你講解ELK的組成與部署
- 一、ELK日志分析系統(tǒng)
- 1、ELK的三大組成
- 2、ELK日志處理步驟
- 二、Elasticsearch的核心
- 1、接近實(shí)時(shí)(NRT)
- 2、集群(cluster)
- 3、節(jié)點(diǎn)(node)
- 4、索引(index)
- 5、類型(type)
- 6、文檔(document)
- 7、分片和副本(shards & replicas)
- 8、相關(guān)概念在關(guān)系型數(shù)據(jù)庫和ElasticSearch中的對應(yīng)關(guān)系
- 三、Logstash
- 1、Logstash簡介
- 2、Logstash主機(jī)分類
- 四、Kibana
- 五、部署ELK
- 1、配置基礎(chǔ)環(huán)境
- 2、部署Elasticsearch(node1和node2)
- 3、安裝elasticsearch-head(node1和node2)
- 4、安裝 logstash(192.168.184.30)
- 5、安裝kibana(node1)
- 6、對接httpd日志文件(訪問、錯(cuò)誤)
- 總結(jié)
- ELK處理過程
一、ELK日志分析系統(tǒng)
1、ELK的三大組成
- E:Elasticsearch
- 是一個(gè)開源分布式搜索引擎,特點(diǎn)有:分布式、零配置、自動發(fā)現(xiàn)
- 索引自動分片、索引副本機(jī)制,restful風(fēng)格接口,多數(shù)據(jù),自動搜索負(fù)載等
- 通常作為具有復(fù)雜搜索場景情況下的核心發(fā)動機(jī)
- L:Logstash
- 是一個(gè)完全開源的工具,它可以對日志進(jìn)行收集、過濾,并將其存儲,供以后使用
- K:Kibana
- 是一個(gè)開源免費(fèi)的工具,kibana可以為Logstash和Elasticsearch提供友好的日志分析web頁面
2、ELK日志處理步驟
- 【1】將日志進(jìn)行集中化管理(Beats)
- 管理包含四種工具:
- Packetbeat(搜集網(wǎng)絡(luò)流量數(shù)據(jù))
- Topbeat(搜集系統(tǒng)、進(jìn)程和文件系統(tǒng)級別的CPU和內(nèi)存使用情況等數(shù)據(jù))
- Filebeat(搜集文件數(shù)據(jù))
- Winlogbeat(搜集Windows事件日志數(shù)據(jù))
- 管理包含四種工具:
- 【2】將日志格式化(Logstash)并輸出到Elasticsearch
- 【3】對格式化后的數(shù)據(jù)進(jìn)行索引和存儲(Elasticsearch)
- 【4】前端數(shù)據(jù)的展示(Kibana)
二、Elasticsearch的核心
1、接近實(shí)時(shí)(NRT)
- Elasticsearch是一個(gè)接近實(shí)時(shí)的搜索平臺,這意味著,從索引一個(gè)文檔直到這個(gè)文檔能夠被搜索到有一個(gè)輕微的延遲(通常是1秒)
2、集群(cluster)
- 一個(gè)集群就是由一個(gè)或者多個(gè)節(jié)點(diǎn)組織在一起,它們共同持有你整個(gè)的數(shù)據(jù),并一起提供索引和搜索功能。
- 其中一個(gè)為主節(jié)點(diǎn),這個(gè)主節(jié)點(diǎn)是可以通過選舉產(chǎn)生的,并提供跨節(jié)點(diǎn)的聯(lián)合索引和搜索功能。
- 集群有一個(gè)唯一性標(biāo)示的名字,默認(rèn)是Elasticsearch,集群的名字很重要,每個(gè)節(jié)點(diǎn)是基于集群名字加入到集群中的。因此,確保在不同的環(huán)境中使用不同的集群名字。
- 一個(gè)集群可以只有一個(gè)節(jié)點(diǎn),建議在配置Elasticsearch時(shí),配置成集群模式。
- Elasticsearch具有集群機(jī)制,節(jié)點(diǎn)通過集群名稱加入到集群中,同時(shí)在集群中的節(jié)點(diǎn)會有一個(gè)自己唯一的身份標(biāo)識(自己的名稱)
3、節(jié)點(diǎn)(node)
- 節(jié)點(diǎn)就是一臺單一的服務(wù)器,是集群的一部分,存儲數(shù)據(jù)并參與集群的索引和搜索功能。像集群一樣,節(jié)點(diǎn)也是通過名字來標(biāo)識,默認(rèn)是在節(jié)點(diǎn)啟動時(shí)隨機(jī)分配的字符名。也可自己定義,名字很重要,在集群中用于識別服務(wù)器對應(yīng)的節(jié)點(diǎn)
- 節(jié)點(diǎn)可以通過指定集群名字來加入到集群中。默認(rèn)情況下,每個(gè)節(jié)點(diǎn)被設(shè)置成加入到Elasticsearch集群。如果啟動了多個(gè)節(jié)點(diǎn),假設(shè)能自動發(fā)現(xiàn)對方,他們將會自動組建一個(gè)名為Elasticsearch的集群。
4、索引(index)
- 一個(gè)索引就是一個(gè)擁有幾分相似特征的文檔的集合。
- 一個(gè)索引由一個(gè)名字來標(biāo)識(必須全部是小寫字母),并且當(dāng)我們要對對應(yīng)于這個(gè)索引中的文檔進(jìn)行索引、搜索、更新和刪除的時(shí)候。都要使用到這個(gè)名字。在一個(gè)集群中,可以定義任意多的索引。
5、類型(type)
- 在一個(gè)索引中,你可以定義一種或多種類型。一個(gè)類型是你的索引的一個(gè)邏輯上的分類/分區(qū),其語義完全由你來定。
- 通常會為具有一組共同字段的文檔定義一個(gè)類型。
6、文檔(document)
- 一個(gè)文檔是一個(gè)可被索引的基礎(chǔ)信息單元
- 在一個(gè)index/type里面,只要你想,你可以存儲任意多的文檔。注意,雖然一個(gè)文檔在物理上位于一個(gè)索引中,實(shí)際上一個(gè)文檔必須在一個(gè)索引內(nèi)被索引和分配一個(gè)類型
7、分片和副本(shards & replicas)
- 實(shí)際情況下,索引存儲的數(shù)據(jù)可能超過單個(gè)節(jié)點(diǎn)的硬件限制。為了解決這個(gè)問題,Elasticsearch提供將索引分成多個(gè)分片的功能。當(dāng)在創(chuàng)建索引時(shí),可以定義想要的分片數(shù)量。每一個(gè)分片就是一個(gè)全功能的獨(dú)立的索引,可以位于集群中任何節(jié)點(diǎn)上。
- 分片的主要原因:
- 水平分割擴(kuò)展,增大存儲量
- 分布式并跨越分片操作,提高性能和吞吐量
- 分片的主要原因:
- 分布式分片機(jī)制和搜索請求的文檔如何火鬃完全是由Elasticsearch控制的,這些對用戶是完全透明的。
- 為了健壯性,建議有一個(gè)故障切換機(jī)制,為此,Elasticsearch讓我們將索引分片復(fù)制一份或多份,稱之為分片副本
- 分片副本的原因:
- 高可用性,以應(yīng)對分片或者節(jié)點(diǎn)故障。處于這個(gè)原因,分片副本要在不同的節(jié)點(diǎn)上
- 增大吞吐量,搜索可以并行在所有副本上執(zhí)行
- 分片副本的原因:
- 總之,每個(gè)索引可以被分成多個(gè)分片。一個(gè)索引可以被復(fù)制0次或者多次。一旦復(fù)制了,每個(gè)索引就有了主分片 (作為復(fù)制源的原來的分片)和復(fù)制分片(主分片的拷貝)之別。分片和副本的數(shù)量可以在索引創(chuàng)建的時(shí)候指定。在索引創(chuàng)建之后,你可以在指定任何時(shí)候動態(tài)的改變副本的數(shù)量,但是你事后不能改變分片的數(shù)量。
- 默認(rèn)情況下,Elasticsearch中的每個(gè)索引被分片5個(gè)主分片和1個(gè)副本,這意味著,如果你的集群中至少有兩個(gè)節(jié)點(diǎn),你的索引將會有5個(gè)主分片和另外的5個(gè)副本分片(一個(gè)完全拷貝),這樣的話每個(gè)索引總共有10個(gè)分片。
8、相關(guān)概念在關(guān)系型數(shù)據(jù)庫和ElasticSearch中的對應(yīng)關(guān)系
| 數(shù)據(jù)庫Database | 索引Index,支持全文檢索 |
| 表Table | 類型Type |
| 數(shù)據(jù)行Row | 文檔Document,但不需要固定結(jié)構(gòu),不同文檔可以具有不同字段集合 |
| 數(shù)據(jù)列Column | 字段Field |
| 模式Schema | 映像Mapping |
三、Logstash
1、Logstash簡介
- Logstash由JRuby語言編寫,基于消息(message-based)的簡單架構(gòu),并運(yùn)行在java虛擬機(jī)(JVM)上。不同于分離的代理端(agent)或主機(jī)端(server),Logstash可配置單一的代理端與其他開源軟件結(jié)合,以實(shí)現(xiàn)不同的功能
- 常用插件:
- input:收集源數(shù)據(jù)(訪問日志、錯(cuò)誤日志等)
- Filter Plugin:用于過濾日志和格式處理
- Output:輸出日志
- 主要組件:
- Shipper(日志收集):負(fù)責(zé)監(jiān)控本地日志文件的變化,及時(shí)把日志文件的最新內(nèi)容收集起來。通常,遠(yuǎn)程代理端(agent)只需要運(yùn)行這個(gè)組件即可
- Indexer(日志存儲):負(fù)責(zé)接收日志并寫入到本地文件
- Broker(日志Hub):負(fù)責(zé)連接多個(gè)Shipper和多個(gè)Indexer
- Search and Storage:允許對事件進(jìn)行搜索和存儲
- Web Interface:基于Web的展示界面
2、Logstash主機(jī)分類
- 【1】代理主機(jī)(agent host):作為事件的傳遞者(Shipper),將各種日志數(shù)據(jù)發(fā)送至中心主機(jī),只需運(yùn)行Logstash代理程序
- 【2】中心主機(jī)(central host):可運(yùn)行包括中間轉(zhuǎn)發(fā)器(Broker)、索引器(Indexer)、搜索和存儲器(Search and Storage)、Web界面端(Web Interface)在內(nèi)的各個(gè)組件,以實(shí)現(xiàn)對日志數(shù)據(jù)的接收、處理和存儲
四、Kibana
- Kibana 是用于在 Elasticsearch 中可視化數(shù)據(jù)的強(qiáng)大工具,可通過基于瀏覽器的界面輕松搜索,可視化和探索大量數(shù)據(jù)。
- 主要功能:
- Kibana主要功能:
- Elasticsearch無縫之集成。
- Kibana架構(gòu)為Elasticsearch定制,可以將任何結(jié)構(gòu)化和非結(jié)構(gòu)化數(shù)據(jù)加入Elasticsearch索引。Kibana還充分利用了Elasticsearch強(qiáng)大的搜索和分析功能。
- 整合數(shù)據(jù)。
- Kibana能夠更好地處理海量數(shù)據(jù),并據(jù)此創(chuàng)建柱形圖、折線圖、散點(diǎn)圖、直方圖、餅圖和地圖。
- 復(fù)雜數(shù)據(jù)分析。
- Kibana提升了Elasticsearch分析能力,能夠更加智能地分析數(shù)據(jù),執(zhí)行數(shù)學(xué)轉(zhuǎn)換并且根據(jù)要求對數(shù)據(jù)切割分塊。
- 讓更多團(tuán)隊(duì)成員收益。
- 強(qiáng)大的數(shù)據(jù)庫可視化接口讓各業(yè)務(wù)崗位都能夠從數(shù)據(jù)集合受益。
- 接口靈活,分享更容易。
- 使用Kibana可以更加方便地創(chuàng)建、保存、分享數(shù)據(jù),并將可視化數(shù)據(jù)快速交流。
- 配置簡單。
- Kibana的配置和啟用非常簡單,用戶體驗(yàn)非常友好。Kibana自帶Web服務(wù)器,可以快速啟動運(yùn)行。
- 可視化多數(shù)據(jù)源。
- Kibana可以非常方便地把來自Logstash、ES-Hadoop、Beats或第三方技術(shù)的數(shù)據(jù)整合到Elasticsearch,支持的第三方技術(shù)包括Apache flume、 Fluentd 等。
- 簡單數(shù)據(jù)導(dǎo)出。
- Kibana可以方便地導(dǎo)出感興趣的數(shù)據(jù),與其它數(shù)據(jù)集合并融合后快速建模分析,發(fā)現(xiàn)新結(jié)果。
- Elasticsearch無縫之集成。
- Kibana主要功能:
五、部署ELK
| node1 | 192.168.184.10 | Elasticsearch 、 kibana |
| node2 | 192.168.184.20 | Elasticsearch |
| http | 192.168.184.30 | httpd / Logstash |
| Windows | 192.168.184.188 | —— |
1、配置基礎(chǔ)環(huán)境
systemctl stop firewalld.service setenforce 0#配置java環(huán)境(三臺都要) java -versioncd /opt/elk cp jdk-8u91-linux-x64.tar.gz /usr/local/ cd /usr/local/ tar zxvf jdk-8u91-linux-x64.tar.gzcd /usr/local/ && mv jdk1.8.0_91 jdkvim /etc/profile export JAVA_HOME=/usr/local/jdk export JRE_HOME=${JAVA_HOME}/jre export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib export PATH=${JAVA_HOME}/bin:$PATHsource /etc/profile#node1改名(192.168.184.10) hostnamectl set-hostname node1 su -#node2改名(192.168.184.20) hostnamectl set-hostname node2 su -#http改名(192.168.184.30) hostnamectl set-hostname http su -#配置域名解析 echo '192.168.184.10 node1' >> /etc/hosts echo '192.168.184.20 node2' >> /etc/hosts
2、部署Elasticsearch(node1和node2)
#安裝elasticsearch包 cd /opt/elk cp elasticsearch-5.5.0.rpm /opt cd ../ rpm -ivh elasticsearch-5.5.0.rpm #加載系統(tǒng)服務(wù) systemctl daemon-reload systemctl enable elasticsearch.service #更改主配置文件 cp /etc/elasticsearch/elasticsearch.yml /etc/elasticsearch/elasticsearch.yml.bakvim /etc/elasticsearch/elasticsearch.yml #17行(修改集群名字) cluster.name: my-elk-cluster #23行(修改節(jié)點(diǎn)名字) node.name: node1 #33行;(修改數(shù)據(jù)存放路徑) path.data: /data/elk_data #37行(修改日志存放路徑) path.logs: /var/log/elasticsearch #43行(不在啟動的時(shí)候鎖定內(nèi)存) bootstrap.memory_lock: false #55行 network.host: 0.0.0.0 #59行(偵聽端口為9200) http.port: 9200 #68行(指定要發(fā)現(xiàn)的節(jié)點(diǎn) node1、node2) discovery.zen.ping.unicast.hosts: ["node1", "node2"]grep -v "^#" /etc/elasticsearch/elasticsearch.yml#創(chuàng)建數(shù)據(jù)存放路徑并授權(quán) mkdir -p /data/elk_data chown elasticsearch:elasticsearch /data/elk_data/#啟動elasticsearch是否開啟成功 systemctl start elasticsearch netstat -antp |grep 9200#查看節(jié)點(diǎn)信息和集群健康狀態(tài)(使用windos瀏覽器) http://192.168.184.10:9200 http://192.168.184.20:9200 http://192.168.184.10:9200/_cluster/health?pretty http://192.168.184.20:9200/_cluster/health?pretty3、安裝elasticsearch-head(node1和node2)
yum -y install gcc gcc-c++ make cd /opt/elk tar xzvf node-v8.2.1.tar.gz -C /opt cd /opt/node-v8.2.1/ ./configure make -j3 && make installcd /opt/elk cp phantomjs-2.1.1-linux-x86_64.tar.bz2 /usr/local/src/ cp elasticsearch-head.tar.gz /usr/local/src/ cd /usr/local/src/ tar xjvf phantomjs-2.1.1-linux-x86_64.tar.bz2 cd phantomjs-2.1.1-linux-x86_64/bin cp phantomjs /usr/local/bincd /usr/local/src/ tar xzvf elasticsearch-head.tar.gz cd elasticsearch-head/ npm installvi /etc/elasticsearch/elasticsearch.yml ==末行插入== http.cors.enabled: true #開啟跨域訪問支持,默認(rèn)false http.cors.allow-origin: "*" #跨域訪問允許的域名地址systemctl restart elasticsearchcd /usr/local/src/elasticsearch-head/ npm run start & #切換到后臺運(yùn)行netstat -lnupt |grep 9100 netstat -lnupt |grep 9200#windows驗(yàn)證 http://192.168.184.10:9100 http://192.168.184.20:9100 群集為綠色#node1建立索引,類型為test curl -XPUT 'localhost:9200/index-demo/test/1?pretty&pretty' -H 'content-Type: application/json' -d '{"user":"ljm","mesg":"If you want to succeed, depend on yourself"}'
4、安裝 logstash(192.168.184.30)
yum -y install httpd systemctl start httpdcd /opt/elk cp logstash-5.5.1.rpm ../ cd ../ rpm -ivh logstash-5.5.1.rpm systemctl start logstash.service systemctl enable logstash.service ln -s /usr/share/logstash/bin/logstash /usr/local/bin/#進(jìn)行功能測試 logstash -e 'input { stdin{} } output { stdout{} }' -------------- -f 通過這個(gè)選項(xiàng)可以指定logstash的配置文件,根據(jù)配置文件配置logstash -e 后面跟著字符串,該字符串可以被當(dāng)做logstash的配置 -t 測試配置文件是否正確,然后退出 --------------logstash -e 'input { stdin{} } output { elasticsearch { hosts=>["192.168.184.10:9200"] } }' www.baidu.com#登錄windows查看 http://192.168.184.10:9100/ #192.168.184.30進(jìn)行對接配置 chmod o+r /var/log/messages ll /var/log/messagesvim /etc/logstash/conf.d/system.conf input {file{path => "/var/log/messages"type => "system"start_position => "beginning"}} output {elasticsearch {hosts => ["192.168.184.10:9200"]index => "system-%{+YYYY.MM.dd}"}}systemctl restart logstash.service
5、安裝kibana(node1)
cd /opt/elk cp kibana-5.5.1-x86_64.rpm /usr/local/src/cd /usr/local/src/ rpm -ivh kibana-5.5.1-x86_64.rpmcd /etc/kibana/ cp kibana.yml kibana.yml.bakvim kibana.yml 2/ server.port: 5601 #kibana打開的端口 7/ server.host: "0.0.0.0" #kibana偵聽的地址 21/ elasticsearch.url: "http://192.168.184.10:9200" #和elasticsearch建立聯(lián)系 30/ kibana.index: ".kibana" #在elasticsearch中添加.kibana索引systemctl start kibana.service systemctl enable kibana.service#windows訪問測試 192.168.184.10:5601
6、對接httpd日志文件(訪問、錯(cuò)誤)
cd /etc/logstash/conf.d/vim apache_log.conf input {file{path => "/etc/httpd/logs/access_log"type => "access"start_position => "beginning"}file{path => "/etc/httpd/logs/error_log"type => "error"start_position => "beginning"}} output {if [type] == "access" {elasticsearch {hosts => ["192.168.184.10:9200"]index => "apache_access-%{+YYYY.MM.dd}"}}if [type] == "error" {elasticsearch {hosts => ["192.168.184.10:9200"]index => "apache_error-%{+YYYY.MM.dd}"}}}/usr/share/logstash/bin/logstash -f apache_log.conf
總結(jié)
ELK處理過程
【APPServer集群】----> 【Logstash Agent 采集器】—>【Elasticsearch Cluster】—>【Kibana Server】—>【Brewser】
- 【1】后端服務(wù)器集群生成日志
- 【2】Logstash對進(jìn)行收集、過濾、輸出等操作
- 【3】處理完的日志交給ES集群進(jìn)行存儲
- 【4】ES和前端的Kibana進(jìn)行對接
- 【5】Kibana將日志進(jìn)行可視化處理,并展現(xiàn)給各個(gè)終端
總結(jié)
以上是生活随笔為你收集整理的为你讲解ELK的组成与部署的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: DDR4 vs DDR3手机内存:速度对
- 下一篇: KVM虚拟化的简单概论