簡(jiǎn)歷設(shè)計(jì)網(wǎng)官網(wǎng)手機(jī)seo百度點(diǎn)擊軟件
目錄
一、概述
二、組件介紹
2.1、ElasticSearch
2.2、Kiabana
2.3、Logstash
2.4、可以添加的其它組件:Filebeat
2.5、緩存/消息隊(duì)列(redis、kafka、RabbitMQ等)
2.6、Fluentd
三、ELK工作原理
四、實(shí)例演示
1.ELK之 部署"E"? Elasticsearch
2. ELK之 部署"L"? Logstash(在 Apache 節(jié)點(diǎn)上操作)
3. ELK之部署"K"? Kibana服務(wù)
4. ELFK之部署"F"? Filebeat
一、概述
ELK平臺(tái)是一套完整的日志集中處理解決方案,將 ElasticSearch、Logstash 和 Kiabana 三個(gè)開源工具配合使用, 完成更強(qiáng)大的用戶對(duì)日志的查詢、排序、統(tǒng)計(jì)需求。
使用ELK日志文件系統(tǒng)的原因:日志主要包括系統(tǒng)日志、應(yīng)用程序日志和安全日志。系統(tǒng)運(yùn)維和開發(fā)人員可以通過(guò)日志了解服務(wù)器軟硬件信息、檢查配置過(guò)程中的錯(cuò)誤及錯(cuò)誤發(fā)生的原因。經(jīng)常分析日志可以了解服務(wù)器的負(fù)荷,性能安全性,從而及時(shí)采取措施糾正錯(cuò)誤。
往往單臺(tái)機(jī)器的日志我們使用grep、awk等工具就能基本實(shí)現(xiàn)簡(jiǎn)單分析,但是當(dāng)日志被分散的儲(chǔ)存不同的設(shè)備上。如果你管理數(shù)十上百臺(tái)服務(wù)器,你還在使用依次登錄每臺(tái)機(jī)器的傳統(tǒng)方法查閱日志。這樣是不是感覺(jué)很繁瑣和效率低下。當(dāng)務(wù)之急我們使用集中化的日志管理,例如:開源的syslog,將所有服務(wù)器上的日志收集匯總。集中化管理日志后,日志的統(tǒng)計(jì)和檢索又成為一件比較麻煩的事情,一般我們使用 grep、awk和wc等Linux命令能實(shí)現(xiàn)檢索和統(tǒng)計(jì),但是對(duì)于要求更高的查詢、排序和統(tǒng)計(jì)等要求和龐大的機(jī)器數(shù)量依然使用這樣的方法難免有點(diǎn)力不從心。
一般大型系統(tǒng)是一個(gè)分布式部署的架構(gòu),不同的服務(wù)模塊部署在不同的服務(wù)器上,問(wèn)題出現(xiàn)時(shí),大部分情況需要根據(jù)問(wèn)題暴露的關(guān)鍵信息,定位到具體的服務(wù)器和服務(wù)模塊,構(gòu)建一套集中式日志系統(tǒng),可以提高定位問(wèn)題的效率。
完整日志系統(tǒng)基本特征
收集:能夠采集多種來(lái)源的日志數(shù)據(jù)
傳輸:能夠穩(wěn)定的把日志數(shù)據(jù)解析過(guò)濾并傳輸?shù)酱鎯?chǔ)系統(tǒng)
存儲(chǔ):存儲(chǔ)日志數(shù)據(jù)
分析:支持 UI 分析
警告:能夠提供錯(cuò)誤報(bào)告,監(jiān)控機(jī)制
二、組件介紹
2.1、ElasticSearch
ElasticSearch:是基于Lucene(一個(gè)全文檢索引擎的架構(gòu))開發(fā)的分布式存儲(chǔ)檢索引擎,用來(lái)存儲(chǔ)各類日志。
Elasticsearch 是用 Java 開發(fā)的,可通過(guò) RESTful Web 接口,讓用戶可以通過(guò)瀏覽器與 Elasticsearch 通信。
Elasticsearch是一個(gè)實(shí)時(shí)的、分布式的可擴(kuò)展的搜索引擎,允許進(jìn)行全文、結(jié)構(gòu)化搜索,它通常用于索引和搜索大容量的日志數(shù)據(jù),也可用于搜索許多不同類型的文檔。
數(shù)據(jù)存儲(chǔ)的方式類似于redis的cluster集群,對(duì)數(shù)據(jù)進(jìn)行了分片,并且每個(gè)片都會(huì)有相應(yīng)的副本
核心特點(diǎn):
1、接近實(shí)時(shí)(NRT):搜索速度非常的快,輕微的延遲
2、集群(cluster):集群有一個(gè)唯一標(biāo)志的名字,默認(rèn)Elasticasearch,將一個(gè)或多個(gè)節(jié)點(diǎn)組織在一起,組成一個(gè)cluster的集群,每個(gè)節(jié)點(diǎn)基于集群名字加入到集群中,且在集群中使用自己的名字來(lái)身份標(biāo)識(shí)。
3、節(jié)點(diǎn)(node):每一個(gè)節(jié)點(diǎn)就是一臺(tái)單臺(tái)服務(wù)器
4、索引(index):一個(gè)索引由一個(gè)名字來(lái)標(biāo)識(shí)(必須全部是小寫字母),并且當(dāng)我們要多對(duì)應(yīng)這個(gè)索引中的文檔進(jìn)行索引、更新、刪除的時(shí)候,都要使用到這個(gè)名字。
6、類型(type):在一個(gè)索引中,你可以定義一個(gè)或多種類型。比如:當(dāng)我們存儲(chǔ)一個(gè)購(gòu)物平臺(tái)的數(shù)據(jù)時(shí),可以定義一個(gè)用戶數(shù)據(jù)類型,產(chǎn)品數(shù)據(jù)類型等
7、文檔(document):一個(gè)文檔是一個(gè)可被索引的基礎(chǔ)信息單元
分片與副本:
分片:為了解決索引存儲(chǔ)的數(shù)據(jù)可能超過(guò)單個(gè)節(jié)點(diǎn)的硬件限制,ES提供了將索引分成多個(gè)分片的功能,當(dāng)在創(chuàng)建索引時(shí),可以定義想要的分片數(shù)量,每一個(gè)分片就是一個(gè)全功能獨(dú)立的索引。
分片的優(yōu)點(diǎn):1、水平分割擴(kuò)展,增大了存儲(chǔ)量。?2、分布式跨越分片操作,提高性能和吞吐量
副本:為了健壯性,高可用性,可以故障切換。es將分片復(fù)制一份或多份放在不同的節(jié)點(diǎn)主機(jī)上,稱為分片副本
副本的優(yōu)點(diǎn):1、高可用,以應(yīng)對(duì)分片或者節(jié)點(diǎn)故障,出于這個(gè)原因,分片副本要在不同的節(jié)點(diǎn)上。 2、加強(qiáng)性能,增強(qiáng)吞吐量,搜索可以并行在所有副本上執(zhí)行
總結(jié):對(duì)logstash過(guò)濾的數(shù)據(jù)進(jìn)行索引和存儲(chǔ)
2.2、Kiabana
Kiabana:Kibana 通常與 Elasticsearch 一起部署,Kibana 是 Elasticsearch 的一個(gè)功能強(qiáng)大的數(shù)據(jù)可視化 Dashboard,Kibana 提供圖形化的 web 界面來(lái)瀏覽 Elasticsearch 日志數(shù)據(jù),可以用來(lái)匯總、分析和搜索重要數(shù)據(jù)。
主要特點(diǎn):
1、Elasticsearch無(wú)縫之集成
2、整合數(shù)據(jù)
3、接口靈活,分享容易
4、配置簡(jiǎn)單
5、可視化多數(shù)據(jù)源
6、簡(jiǎn)單數(shù)據(jù)導(dǎo)出
7、讓更多團(tuán)隊(duì)成員收益
總結(jié):將elasticsearch服務(wù)中存儲(chǔ)的數(shù)據(jù)以可視化的方式展示給用戶
2.3、Logstash
Logstash:作為數(shù)據(jù)收集引擎。它支持動(dòng)態(tài)的從各種數(shù)據(jù)源搜集數(shù)據(jù),并對(duì)數(shù)據(jù)進(jìn)行過(guò)濾、分析、豐富、統(tǒng)一格式等操作,然后存儲(chǔ)到用戶指定的位置,一般會(huì)發(fā)送給 Elasticsearch。
Logstash 由 Ruby 語(yǔ)言編寫,運(yùn)行在 Java 虛擬機(jī)(JVM)上,是一款強(qiáng)大的數(shù)據(jù)處理工具, 可以實(shí)現(xiàn)數(shù)據(jù)傳輸、格式處理、格式化輸出。Logstash 具有強(qiáng)大的插件功能,常用于日志處理。
由三個(gè)組件組成:? input(數(shù)據(jù)采集) ?filter(數(shù)據(jù)過(guò)濾) ?output(數(shù)據(jù)輸出)
主要組件:
Shipper(日志收集):負(fù)責(zé)監(jiān)控本地日志文件的變化,及時(shí)把日志文件的最新內(nèi)容收集起來(lái)。通常遠(yuǎn)程代理端(agent)只需要運(yùn)行這個(gè)組件即可
Indexer(日志存儲(chǔ)):負(fù)責(zé)接收日志并寫入到本地文件
Broker(日志Hub):負(fù)責(zé)連接多個(gè)Shipper和多個(gè)Indexer
Search and Storage:允許對(duì)事件進(jìn)行搜索和存儲(chǔ)
Web Interface:基于Web的展示界面
總結(jié):對(duì)集中的日志數(shù)據(jù)進(jìn)行采集,并且格式化數(shù)據(jù)后,輸出給elasticsearch中
2.4、可以添加的其它組件:Filebeat
Filebeat:輕量級(jí)的開源日志文件數(shù)據(jù)搜集器。通常在需要采集數(shù)據(jù)的客戶端安裝 Filebeat,并指定目錄與日志格式,Filebeat 就能快速收集數(shù)據(jù),并發(fā)送給 logstash 進(jìn)或是直接發(fā)給 Elasticsearch 存儲(chǔ),性能上相比運(yùn)行于 JVM 上的 logstash 優(yōu)勢(shì)明顯,是對(duì)它的替代。常應(yīng)用于 EFLK 架構(gòu)當(dāng)中。行解析。
filebeat的工作原理:
Filebeat可以保持每個(gè)文件的狀態(tài),并且頻繁的把文件狀態(tài)從注冊(cè)表里更新到磁盤,這里所說(shuō)的文件狀態(tài)是用來(lái)記錄上一次Harvaster讀取文件時(shí),讀取到的位置,以保證能把全部的日志都讀取出來(lái),然后發(fā)給output。
如果在某一時(shí)刻,作為output的Elasticsearch或則Logstash變成了不可用,Filebeat將會(huì)把最后的文件讀取位置保存下來(lái),直到output重新可用的時(shí)候,快速地恢復(fù)文件數(shù)據(jù)的讀取。
在Filebeat運(yùn)行過(guò)程中,每個(gè)Prospector的狀態(tài)信息都會(huì)保存在內(nèi)存里,如果Filebeat出現(xiàn)了重啟,完成重啟之后,會(huì)從注冊(cè)表文件里恢復(fù)重啟之間的狀態(tài)信息,讓Filebeat繼續(xù)從之間已知的位置開始進(jìn)行讀取數(shù)據(jù)。
filebeat和logstash的區(qū)別:
因?yàn)閘ogstash是jvm跑的,資源消耗比較大,啟動(dòng)一個(gè)logstash就需要消耗500M左右的內(nèi)存(這就是為什么logstash啟動(dòng)特別慢的原因)。
而filebeat只需要10M左右的內(nèi)存資源。
常用的ELK日志采集方案中,大部分的做法就是將所有節(jié)點(diǎn)的日志內(nèi)容通過(guò)filebeat發(fā)送到logstash,lostash根據(jù)配置文件進(jìn)行過(guò)濾,然后將過(guò)濾之后的文件傳輸?shù)絜lasticsearch中,最后通過(guò)kibana展示。
Filebeat結(jié)合logstash帶來(lái)的好處:
(1)通過(guò) Logstash 具有基于磁盤的自適應(yīng)緩沖系統(tǒng),該系統(tǒng)將吸收傳入的吞吐量,從而減輕 Elasticsearch 持續(xù)寫入數(shù)據(jù)的壓力。
(2)從其他數(shù)據(jù)源(例如數(shù)據(jù)庫(kù),S3對(duì)象存儲(chǔ)或消息傳遞隊(duì)列)中提取
(3)將數(shù)據(jù)發(fā)送到多個(gè)目的地,例如S3,HDFS(Hadoop分布式文件系統(tǒng))或?qū)懭胛募?/p>
(4)使用條件數(shù)據(jù)流邏輯組成更復(fù)雜的處理管道
2.5、緩存/消息隊(duì)列(redis、kafka、RabbitMQ等)
可以對(duì)高并發(fā)日志數(shù)據(jù)進(jìn)行流量削峰和緩沖,這樣的緩沖可以一定程度的保護(hù)數(shù)據(jù)不丟失,還可以對(duì)整個(gè)架構(gòu)進(jìn)行應(yīng)用解耦。
2.6、Fluentd
是一個(gè)流行的開源數(shù)據(jù)收集器。由于 logstash 太重量級(jí)的缺點(diǎn),Logstash 性能低、資源消耗比較多等問(wèn)題,隨后就有 Fluentd 的出現(xiàn)。相比較 logstash,Fluentd 更易用、資源消耗更少、性能更高,在數(shù)據(jù)處理上更高效可靠,受到企業(yè)歡迎,成為 logstash 的一種替代方案,常應(yīng)用于 EFK 架構(gòu)當(dāng)中。在 Kubernetes 集群中也常使用 EFK 作為日志數(shù)據(jù)收集的方案。
在 Kubernetes 集群中一般是通過(guò) DaemonSet 來(lái)運(yùn)行 Fluentd,以便它在每個(gè) Kubernetes 工作節(jié)點(diǎn)上都可以運(yùn)行一個(gè) Pod。 它通過(guò)獲取容器日志文件、過(guò)濾和轉(zhuǎn)換日志數(shù)據(jù),然后將數(shù)據(jù)傳遞到 Elasticsearch 集群,在該集群中對(duì)其進(jìn)行索引和存儲(chǔ)。
三、ELK工作原理
(1)在所有需要收集日志的服務(wù)器上部署Logstash;或者先將日志進(jìn)行集中化管理在日志服務(wù)器上,在日志服務(wù)器上部署 Logstash。
(2)Logstash 收集日志,將日志格式化并輸出到 Elasticsearch 群集中。
(3)Elasticsearch 對(duì)格式化后的數(shù)據(jù)進(jìn)行索引和存儲(chǔ)。
(4)Kibana 從 ES 群集中查詢數(shù)據(jù)生成圖表,并進(jìn)行前端數(shù)據(jù)的展示。
總結(jié):logstash作為日志搜集器,從數(shù)據(jù)源采集數(shù)據(jù),并對(duì)數(shù)據(jù)進(jìn)行過(guò)濾,格式化處理,然后交由Elasticsearch存儲(chǔ),kibana對(duì)日志進(jìn)行可視化處理。
input :數(shù)據(jù)采集
output :數(shù)據(jù)輸出
filter :數(shù)據(jù)過(guò)濾
四、實(shí)例演示
ip地址 | 服務(wù) | |
node1 (mysql2) | 192.168.11.22 | elasticsearch |
node2 (mysql3) | 192.168.11.23 | elasticsearch elasticsearch-head kibana |
mysql3 (客戶端) | 192.168.11.24 | apache logstash |
192.168.11.10 (客戶端) | 192.168.11.12 | filebeat |
代碼演示:
Node1節(jié)點(diǎn)(2C/4G):node1/192.168.10.13 Elasticsearch Kibana
Node2節(jié)點(diǎn)(2C/4G):node2/192.168.10.14 Elasticsearch
Apache節(jié)點(diǎn):apache/192.168.10.15 Logstash Apachesystemctl stop firewalld
setenforce 0
------------------- ELK Elasticsearch 集群部署(在Node1、Node2節(jié)點(diǎn)上操作) ----------------------------------
1.環(huán)境準(zhǔn)備
#更改主機(jī)名、配置域名解析、查看Java環(huán)境
Node1節(jié)點(diǎn):hostnamectl set-hostname node1
Node2節(jié)點(diǎn):hostnamectl set-hostname node2vim /etc/hosts
192.168.10.13 node1
192.168.10.14 node2 注:版本問(wèn)題
java -version #如果沒(méi)有安裝,yum -y install java
openjdk version "1.8.0_131"
OpenJDK Runtime Environment (build 1.8.0_131-b12)
OpenJDK 64-Bit Server VM (build 25.131-b12, mixed mode)建議使用jdk2.部署 Elasticsearch 軟件
(1)安裝elasticsearch—rpm包
#上傳elasticsearch-5.5.0.rpm到/opt目錄下
cd /opt
rpm -ivh elasticsearch-5.5.0.rpm (2)加載系統(tǒng)服務(wù)
systemctl daemon-reload
systemctl enable elasticsearch.service(3)修改elasticsearch主配置文件
cp /etc/elasticsearch/elasticsearch.yml /etc/elasticsearch/elasticsearch.yml.bak
vim /etc/elasticsearch/elasticsearch.yml
--17--取消注釋,指定集群名字
cluster.name: my-elk-cluster
--23--取消注釋,指定節(jié)點(diǎn)名字:Node1節(jié)點(diǎn)為node1,Node2節(jié)點(diǎn)為node2
node.name: node1
--33--取消注釋,指定數(shù)據(jù)存放路徑
path.data: /data/elk_data
--37--取消注釋,指定日志存放路徑
path.logs: /var/log/elasticsearch/
--43--取消注釋,改為在啟動(dòng)的時(shí)候不鎖定內(nèi)存
bootstrap.memory_lock: false
--55--取消注釋,設(shè)置監(jiān)聽(tīng)地址,0.0.0.0代表所有地址
network.host: 0.0.0.0
--59--取消注釋,ES 服務(wù)的默認(rèn)監(jiān)聽(tīng)端口為9200
http.port: 9200
--68--取消注釋,集群發(fā)現(xiàn)通過(guò)單播實(shí)現(xiàn),指定要發(fā)現(xiàn)的節(jié)點(diǎn) node1、node2
discovery.zen.ping.unicast.hosts: ["node1", "node2"]grep -v "^#" /etc/elasticsearch/elasticsearch.yml(4)創(chuàng)建數(shù)據(jù)存放路徑并授權(quán)
mkdir -p /data/elk_data
chown elasticsearch:elasticsearch /data/elk_data/(5)啟動(dòng)elasticsearch是否成功開啟
systemctl start elasticsearch.service
netstat -antp | grep 9200(6)查看節(jié)點(diǎn)信息
瀏覽器訪問(wèn) http://192.168.10.13:9200 、 http://192.168.10.14:9200 查看節(jié)點(diǎn) Node1、Node2 的信息。瀏覽器訪問(wèn) http://192.168.10.13:9200/_cluster/health?pretty 、 http://192.168.10.14:9200/_cluster/health?pretty查看群集的健康情況,可以看到 status 值為 green(綠色), 表示節(jié)點(diǎn)健康運(yùn)行。瀏覽器訪問(wèn) http://192.168.10.13:9200/_cluster/state?pretty 檢查群集狀態(tài)信息。#使用上述方式查看群集的狀態(tài)對(duì)用戶并不友好,可以通過(guò)安裝 Elasticsearch-head 插件,可以更方便地管理群集。3.安裝 Elasticsearch-head 插件
Elasticsearch 在 5.0 版本后,Elasticsearch-head 插件需要作為獨(dú)立服務(wù)進(jìn)行安裝,需要使用npm工具(NodeJS的包管理工具)安裝。
安裝 Elasticsearch-head 需要提前安裝好依賴軟件 node 和 phantomjs。
node:是一個(gè)基于 Chrome V8 引擎的 JavaScript 運(yùn)行環(huán)境。
phantomjs:是一個(gè)基于 webkit 的JavaScriptAPI,可以理解為一個(gè)隱形的瀏覽器,任何基于 webkit 瀏覽器做的事情,它都可以做到。(1)編譯安裝 node
#上傳軟件包 node-v8.2.1.tar.gz 到/opt
yum install gcc gcc-c++ make -ycd /opt
tar zxvf node-v8.2.1.tar.gzcd node-v8.2.1/
./configure
make && make install(2)安裝 phantomjs(前端的框架)
#上傳軟件包 phantomjs-2.1.1-linux-x86_64.tar.bz2 到
cd /opt
tar jxvf phantomjs-2.1.1-linux-x86_64.tar.bz2 -C /usr/local/src/
cd /usr/local/src/phantomjs-2.1.1-linux-x86_64/bin
cp phantomjs /usr/local/bin(3)安裝 Elasticsearch-head 數(shù)據(jù)可視化工具
#上傳軟件包 elasticsearch-head.tar.gz 到/opt
cd /opt
tar zxvf elasticsearch-head.tar.gz -C /usr/local/src/
cd /usr/local/src/elasticsearch-head/
npm install(4)修改 Elasticsearch 主配置文件
vim /etc/elasticsearch/elasticsearch.yml
......
--末尾添加以下內(nèi)容--
http.cors.enabled: true #開啟跨域訪問(wèn)支持,默認(rèn)為 false
http.cors.allow-origin: "*" #指定跨域訪問(wèn)允許的域名地址為所有systemctl restart elasticsearch(5)啟動(dòng) elasticsearch-head 服務(wù)
#必須在解壓后的 elasticsearch-head 目錄下啟動(dòng)服務(wù),進(jìn)程會(huì)讀取該目錄下的 gruntfile.js 文件,否則可能啟動(dòng)失敗。
cd /usr/local/src/elasticsearch-head/
npm run start &> elasticsearch-head@0.0.0 start /usr/local/src/elasticsearch-head
> grunt serverRunning "connect:server" (connect) task
Waiting forever...
Started connect web server on http://localhost:9100#elasticsearch-head 監(jiān)聽(tīng)的端口是 9100
netstat -natp |grep 9100(6)通過(guò) Elasticsearch-head 查看 Elasticsearch 信息
通過(guò)瀏覽器訪問(wèn) http://192.168.10.13:9100/ 地址并連接群集。如果看到群集健康值為 green 綠色,代表群集很健康。(7)插入索引
#通過(guò)命令插入一個(gè)測(cè)試索引,索引為 index-demo,類型為 test。//輸出結(jié)果如下:curl -X PUT 'localhost:9200/index-demo1/test/1?pretty&pretty' -H 'content-Type: application/json' -d '{"user":"zhangsan","mesg":"hello world"}'{
"_index" : "index-demo",
"_type" : "test",
"_id" : "1",
"_version" : 1,
"result" : "created",
"_shards" : {
"total" : 2,
"successful" : 2,
"failed" : 0
},
"created" : true
}瀏覽器訪問(wèn) http://192.168.10.13:9100/ 查看索引信息,可以看見(jiàn)索引默認(rèn)被分片5個(gè),并且有一個(gè)副本。
點(diǎn)擊“數(shù)據(jù)瀏覽”,會(huì)發(fā)現(xiàn)在node1上創(chuàng)建的索引為 index-demo,類型為 test 的相關(guān)信息。---------------------- ELK Logstash 部署(在 Apache 節(jié)點(diǎn)上操作) ----------------------------------------
Logstash 一般部署在需要監(jiān)控其日志的服務(wù)器。在本案例中,Logstash 部署在 Apache 服務(wù)器上,用于收集 Apache 服務(wù)器的日志信息并發(fā)送到 Elasticsearch。1.更改主機(jī)名
hostnamectl set-hostname apache2.安裝Apahce服務(wù)(httpd)
yum -y install httpd
systemctl start httpd3.安裝Java環(huán)境
yum -y install java
java -version4.安裝logstash
#上傳軟件包 logstash-5.5.1.rpm 到/opt目錄下
cd /opt
rpm -ivh logstash-5.5.1.rpm
systemctl start logstash.service
systemctl enable logstash.serviceln -s /usr/share/logstash/bin/logstash /usr/local/bin/5.測(cè)試 Logstash
Logstash 命令常用選項(xiàng):
-f:通過(guò)這個(gè)選項(xiàng)可以指定 Logstash 的配置文件,根據(jù)配置文件配置 Logstash 的輸入和輸出流。
-e:從命令行中獲取,輸入、輸出后面跟著字符串,該字符串可以被當(dāng)作 Logstash 的配置(如果是空,則默認(rèn)使用 stdin 作為輸入,stdout 作為輸出)。
-t:測(cè)試配置文件是否正確,然后退出。定義輸入和輸出流:
#輸入采用標(biāo)準(zhǔn)輸入,輸出采用標(biāo)準(zhǔn)輸出(類似管道)
logstash -e 'input { stdin{} } output { stdout{} }'
......
www.baidu.com #鍵入內(nèi)容(標(biāo)準(zhǔn)輸入)
2020-12-22T03:58:47.799Z node1 www.baidu.com #輸出結(jié)果(標(biāo)準(zhǔn)輸出)
www.sina.com.cn #鍵入內(nèi)容(標(biāo)準(zhǔn)輸入)
2017-12-22T03:59:02.908Z node1 www.sina.com.cn #輸出結(jié)果(標(biāo)準(zhǔn)輸出)//執(zhí)行 ctrl+c 退出#使用 rubydebug 輸出詳細(xì)格式顯示,codec 為一種編解碼器
logstash -e 'input { stdin{} } output { stdout{ codec=>rubydebug } }'
......
www.baidu.com #鍵入內(nèi)容(標(biāo)準(zhǔn)輸入)
{"@timestamp" => 2020-12-22T02:15:39.136Z, #輸出結(jié)果(處理后的結(jié)果)"@version" => "1","host" => "apache","message" => "www.baidu.com"
}#使用 Logstash 將信息寫入 Elasticsearch 中
logstash -e 'input { stdin{} } output { elasticsearch { hosts=>["192.168.10.13:9200"] } }'輸入 輸出 對(duì)接
......
www.baidu.com #鍵入內(nèi)容(標(biāo)準(zhǔn)輸入)
www.sina.com.cn #鍵入內(nèi)容(標(biāo)準(zhǔn)輸入)
www.google.com #鍵入內(nèi)容(標(biāo)準(zhǔn)輸入)//結(jié)果不在標(biāo)準(zhǔn)輸出顯示,而是發(fā)送至 Elasticsearch 中,可瀏覽器訪問(wèn) http://192.168.10.13:9100/ 查看索引信息和數(shù)據(jù)瀏覽。6.定義 logstash配置文件
Logstash 配置文件基本由三部分組成:input、output 以及 filter(可選,根據(jù)需要選擇使用)。
input:表示從數(shù)據(jù)源采集數(shù)據(jù),常見(jiàn)的數(shù)據(jù)源如Kafka、日志文件等
filter:表示數(shù)據(jù)處理層,包括對(duì)數(shù)據(jù)進(jìn)行格式化處理、數(shù)據(jù)類型轉(zhuǎn)換、數(shù)據(jù)過(guò)濾等,支持正則表達(dá)式
output:表示將Logstash收集的數(shù)據(jù)經(jīng)由過(guò)濾器處理之后輸出到Elasticsearch。#格式如下:
input {...}
filter {...}
output {...}#在每個(gè)部分中,也可以指定多個(gè)訪問(wèn)方式。例如,若要指定兩個(gè)日志來(lái)源文件,則格式如下:
input {file { path =>"/var/log/messages" type =>"syslog"}file { path =>"/var/log/httpd/access.log" type =>"apache"}
}#修改 Logstash 配置文件,讓其收集系統(tǒng)日志/var/log/messages,并將其輸出到 elasticsearch 中。
chmod +r /var/log/messages #讓 Logstash 可以讀取日志vim /etc/logstash/conf.d/system.conf
input {file{path =>"/var/log/messages" #指定要收集的日志的位置type =>"system" #自定義日志類型標(biāo)識(shí)start_position =>"beginning" #表示從開始處收集}
}
output {elasticsearch { #輸出到 elasticsearchhosts => ["192.168.10.13:9200"] #指定 elasticsearch 服務(wù)器的地址和端口index =>"system-%{+YYYY.MM.dd}" #指定輸出到 elasticsearch 的索引格式}
}systemctl restart logstash 瀏覽器訪問(wèn) http://192.168.10.13:9100/ 查看索引信息---------------------- ELK Kiabana 部署(在 Node1 節(jié)點(diǎn)上操作) ----------------------------------------
1.安裝 Kiabana
#上傳軟件包 kibana-5.5.1-x86_64.rpm 到/opt目錄
cd /opt
rpm -ivh kibana-5.5.1-x86_64.rpm2.設(shè)置 Kibana 的主配置文件
vim /etc/kibana/kibana.yml
--2--取消注釋,Kiabana 服務(wù)的默認(rèn)監(jiān)聽(tīng)端口為5601
server.port: 5601
--7--取消注釋,設(shè)置 Kiabana 的監(jiān)聽(tīng)地址,0.0.0.0代表所有地址
server.host: "0.0.0.0"
--21--取消注釋,設(shè)置和 Elasticsearch 建立連接的地址和端口
elasticsearch.url: "http://192.168.10.13:9200"
--30--取消注釋,設(shè)置在 elasticsearch 中添加.kibana索引
kibana.index: ".kibana"3.啟動(dòng) Kibana 服務(wù)
systemctl start kibana.service
systemctl enable kibana.servicenetstat -natp | grep 56014.驗(yàn)證 Kibana
瀏覽器訪問(wèn) http://192.168.10.13:5601
第一次登錄需要添加一個(gè) Elasticsearch 索引:
Index name or pattern
//輸入:system-* #在索引名中輸入之前配置的 Output 前綴“system”單擊 “create” 按鈕創(chuàng)建,單擊 “Discover” 按鈕可查看圖表信息及日志信息。
數(shù)據(jù)展示可以分類顯示,在“Available Fields”中的“host”,然后單擊 “add”按鈕,可以看到按照“host”篩選后的結(jié)果5.將 Apache 服務(wù)器的日志(訪問(wèn)的、錯(cuò)誤的)添加到 Elasticsearch 并通過(guò) Kibana 顯示
vim /etc/logstash/conf.d/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.10.13:9200"]index => "apache_access-%{+YYYY.MM.dd}"}}if [type] == "error" {elasticsearch {hosts => ["192.168.10.13:9200"]index => "apache_error-%{+YYYY.MM.dd}"}}
}cd /etc/logstash/conf.d/
/usr/share/logstash/bin/logstash -f apache_log.conf瀏覽器訪問(wèn) http://192.168.10.13:9100 查看索引是否創(chuàng)建瀏覽器訪問(wèn) http://192.168.10.13:5601 登錄 Kibana,單擊“Create Index Pattern”按鈕添加索引, 在索引名中輸入之前配置的 Output 前綴 apache_access-*,并單擊“Create”按鈕。在用相同的方法添加 apache_error-*索引。
選擇“Discover”選項(xiàng)卡,在中間下拉列表中選擇剛添加的 apache_access-* 、apache_error-* 索引, 可以查看相應(yīng)的圖表及日志信息。
1.ELK之 部署"E"? Elasticsearch
兩臺(tái)node服務(wù)器同步操作:
?此處不是同步操作,在此處注意修改node.name行的時(shí)候,node1和node2不一樣,要修改!!!
?
瀏覽器訪問(wèn),查看節(jié)點(diǎn)信息,(這是elasticsearch原本的視圖界面,很簡(jiǎn)陋,不方便)
?
安裝Elasticsearch-head 插件
Elasticsearch 在 5.0 版本后,Elasticsearch-head 插件需要作為獨(dú)立服務(wù)進(jìn)行安裝,需要使用npm工具(NodeJS的包管理工具)安裝。
安裝 Elasticsearch-head 需要提前安裝好依賴軟件 node 和 phantomjs。
node:是一個(gè)基于 Chrome V8 引擎的 JavaScript 運(yùn)行環(huán)境。
phantomjs:是一個(gè)基于 webkit 的JavaScriptAPI,可以理解為一個(gè)隱形的瀏覽器,任何基于 webkit 瀏覽器做的事情,它都可以做到。
1、編譯安裝 node
把安裝elasticsearch-head所需要的前置插件的安裝包上傳到opt目錄下
安裝 phantomjs(前端的框架)?
(3)安裝 Elasticsearch-head 數(shù)據(jù)可視化工具
?(4)修改 Elasticsearch 主配置文件
(5)啟動(dòng) elasticsearch-head 服務(wù)?
必須在解壓后的 elasticsearch-head 目錄下啟動(dòng)服務(wù),進(jìn)程會(huì)讀取該目錄下的 gruntfile.js 文件,否則可能啟動(dòng)失敗。
(6)通過(guò) Elasticsearch-head 查看 Elasticsearch 信息?
(7)插入索引
通過(guò)命令插入一個(gè)測(cè)試索引,索引為 index-demo,類型為 test
輸出結(jié)果如下:curl -X PUT 'localhost:9200/index-demo1/test/1?pretty&pretty' -H 'content-Type: application/json' -d '{"user":"zhangsan","mesg":"hello world"}'
2. ELK之 部署"L"? Logstash(在 Apache 節(jié)點(diǎn)上操作)
Logstash 一般部署在需要監(jiān)控其日志的服務(wù)器。在本案例中,Logstash 部署在 Apache 服務(wù)器上,用于收集 Apache 服務(wù)器的日志信息并發(fā)送到 Elasticsearch。
使用 rubydebug 輸出詳細(xì)格式顯示,codec 為一種編解碼器
?修改 Logstash 配置文件,讓其收集系統(tǒng)日志/var/log/messages,并將其輸出到 elasticsearch 中。
?訪問(wèn)192.168.11.23:9100查看Elasticsearch存儲(chǔ)的日志索引信息
3. ELK之部署"K"? Kibana服務(wù)
?????
?
?
?
?