ELK 簡介
ELK平臺是一套完整的日志集中處理解決方案,將 ElasticSearch、Logstash 和 Kiabana 三個開源工具配合使用, 完成更強大的用戶對日志的查詢、排序、統(tǒng)計需求
?ELK各組件介紹
ElasticSearch:
- 是基于Lucene(一個全文檢索引擎的架構(gòu))開發(fā)的分布式存儲檢索引擎,用來存儲各類日志。
- Elasticsearch 是用 Java 開發(fā)的,可通過 RESTful Web 接口,讓用戶可以通過瀏覽器與Elasticsearch 通信。
- Elasticsearch是一個實時的、分布式的可擴展的搜索引擎,允許進行全文、結(jié)構(gòu)化搜索,它通常用于索引和搜索大容量的日志數(shù)據(jù),也可用于搜索許多不同類型的文檔
Kiabana:
- Kibana 通常與 Elasticsearch 一起部署,Kibana 是 Elasticsearch 的一個功能強大的數(shù)據(jù)可視化 Dashboard,Kibana 提供圖形化的 web 界面來瀏覽 Elasticsearch 日志數(shù)據(jù),可以用來匯總、分析和搜索重要數(shù)據(jù)
Logstash:
- 作為數(shù)據(jù)收集引擎。它支持動態(tài)的從各種數(shù)據(jù)源搜集數(shù)據(jù),并對數(shù)據(jù)進行過濾、分析、豐富、統(tǒng)一格式等操作,然后存儲到用戶指定的位置,一般會發(fā)送給 Elasticsearch。
- Logstash 由 Ruby 語言編寫,運行在 Java 虛擬機(JVM)上,是一款強大的數(shù)據(jù)處理工具, 可以實現(xiàn)數(shù)據(jù)傳輸、格式處理、格式化輸出。Logstash 具有強大的插件功能,常用于日志處理。
過濾模塊是logstash的核心功能
可以添加的其它組件:
Filebeat:
- 輕量級的開源日志文件數(shù)據(jù)搜集器。通常在需要采集數(shù)據(jù)的客戶端安裝 Filebeat,并指定目錄與日志格式,F(xiàn)ilebeat 就能快速收集數(shù)據(jù),并發(fā)送給 logstash 進行解析,或是直接發(fā)給 Elasticsearch 存儲,性能上相比運行于 JVM 上的 logstash 優(yōu)勢明顯,是對它的替代。常應(yīng)用于 EFLK 架構(gòu)當中。(如果要使用過濾功能的話,F(xiàn)ilebeat不能完全替代logstash,F(xiàn)ilebeat沒有過濾功能,收集數(shù)據(jù)后需要發(fā)送給 logstash 進行處理)
filebeat 結(jié)合 logstash 帶來好處:
- 通過 Logstash 具有基于磁盤的自適應(yīng)緩沖系統(tǒng),該系統(tǒng)將吸收傳入的吞吐量,從而減輕 Elasticsearch 持續(xù)寫入數(shù)據(jù)的壓力。
- 從其他數(shù)據(jù)源(例如數(shù)據(jù)庫,S3對象存儲或消息傳遞隊列)中提取。
- 將數(shù)據(jù)發(fā)送到多個目的地,例如S3,HDFS(Hadoop分布式文件系統(tǒng))或?qū)懭胛募?/li>
- 使用條件數(shù)據(jù)流邏輯組成更復(fù)雜的處理管道。
緩存/消息隊列(redis、kafka、RabbitMQ等):
- 可以對高并發(fā)日志數(shù)據(jù)進行流量削峰和緩沖,這樣的緩沖可以一定程度的保護數(shù)據(jù)不丟失,還可以對整個架構(gòu)進行應(yīng)用解耦。
Fluentd:
- 是一個流行的開源數(shù)據(jù)收集器。由于 logstash 太重量級的缺點,Logstash 性能低、資源消耗比較多等問題,隨后就有 Fluentd 的出現(xiàn)。相比較 logstash,F(xiàn)luentd 更易用、資源消耗更少、性能更高,在數(shù)據(jù)處理上更高效可靠,受到企業(yè)歡迎,成為 logstash 的一種替代方案,常應(yīng)用于 EFK 架構(gòu)當中。在 Kubernetes 集群中也常使用 EFK 作為日志數(shù)據(jù)收集的方案。
- 在 Kubernetes 集群中一般是通過 DaemonSet 來運行 Fluentd,以便它在每個 Kubernetes 工作節(jié)點上都可以運行一個 Pod。 它通過獲取容器日志文件、過濾和轉(zhuǎn)換日志數(shù)據(jù),然后將數(shù)據(jù)傳遞到 Elasticsearch 集群,在該集群中對其進行索引和存儲
ELK、ELFK、EFLKL
ELK:??ES+logstash+kibana
ELFK:??ES+logstash+filebeat+kibana
ELFK:??ES+filebeat+logstash+kafka+kibana
為什么要使用 ELK
日志主要包括系統(tǒng)日志、應(yīng)用程序日志和安全日志。系統(tǒng)運維和開發(fā)人員可以通過日志了解服務(wù)器軟硬件信息、檢查配置過程中的錯誤及錯誤發(fā)生的原因。經(jīng)常分析日志可以了解服務(wù)器的負荷,性能安全性,從而及時采取措施糾正錯誤。
往往單臺機器的日志我們使用grep、awk等工具就能基本實現(xiàn)簡單分析,但是當日志被分散的儲存不同的設(shè)備上。如果你管理數(shù)十上百臺服務(wù)器,你還在使用依次登錄每臺機器的傳統(tǒng)方法查閱日志。這樣是不是感覺很繁瑣和效率低下。當務(wù)之急我們使用集中化的日志管理,例如:開源的syslog,將所有服務(wù)器上的日志收集匯總。集中化管理日志后,日志的統(tǒng)計和檢索又成為一件比較麻煩的事情,一般我們使用 grep、awk和wc等Linux命令能實現(xiàn)檢索和統(tǒng)計,但是對于要求更高的查詢、排序和統(tǒng)計等要求和龐大的機器數(shù)量依然使用這樣的方法難免有點力不從心。
一般大型系統(tǒng)是一個分布式部署的架構(gòu),不同的服務(wù)模塊部署在不同的服務(wù)器上,問題出現(xiàn)時,大部分情況需要根據(jù)問題暴露的關(guān)鍵信息,定位到具體的服務(wù)器和服務(wù)模塊,構(gòu)建一套集中式日志系統(tǒng),可以提高定位問題的效率
完整日志系統(tǒng)基本特征
收集:??能夠采集多種來源的日志數(shù)據(jù)。
傳輸:??能夠穩(wěn)定的把日志數(shù)據(jù)解析過濾并傳輸?shù)酱鎯ο到y(tǒng)。
存儲:??存儲日志數(shù)據(jù)。
分析:??支持 UI 分析。
警告:??能夠提供錯誤報告,監(jiān)控機制
ELK 的工作原理
(1)在所有需要收集日志的服務(wù)器上部署Logstash;或者先將日志進行集中化管理在日志服務(wù)器上,在日志服務(wù)器上部署 Logstash。
(2)Logstash 收集日志,將日志格式化并輸出到 Elasticsearch 群集中。
(3)Elasticsearch 對格式化后的數(shù)據(jù)進行索引和存儲。
(4)Kibana 從 ES 群集中查詢數(shù)據(jù)生成圖表,并進行前端數(shù)據(jù)的展示
總結(jié):logstash作為日志搜集器,從數(shù)據(jù)源采集數(shù)據(jù),并對數(shù)據(jù)進行過濾,格式化處理,然后交由Elasticsearch存儲,kibana對日志進行可視化處理
三、ELK日志分析系統(tǒng)集群部署
服務(wù)器類型 | 系統(tǒng)和IP地址 | 需要安裝的組件 | 硬件方面 |
---|---|---|---|
node01節(jié)點 | CentOS7.4(64 位) 192.168.52.110 | Elasticsearch 、 Kibana | 2核4G |
node02節(jié)點 | CentOS7.4(64 位) 192.168.52.120 | Elasticsearch | |
Apache節(jié)點 | CentOS7.4(64 位) 192.168.52.130 | Logstash Apache |
初始化環(huán)境(所有節(jié)點)
#關(guān)閉防火墻
systemctl stop firewalld.service
setenforce 0
ELK Elasticsearch 集群部署(在Node1、Node2節(jié)點上操作)
#設(shè)置Java環(huán)境
java -version
#如果沒有安裝,
yum -y install java
部署 Elasticsearch 軟件
安裝elasticsearch—rpm包
上傳elasticsearch-5.5.0.rpm到/opt目錄下
rpm -ivh elasticsearch-5.5.0.rpm
修改主機名
#以node01為例
hostnamectl set-hostname node01
su
vim /etc/hosts
192.168.137.10 node01
192.168.137.15 node02
修改elasticsearch主配置文件
cp /etc/elasticsearch/elasticsearch.yml /etc/elasticsearch/elasticsearch.yml.bak
vim /etc/elasticsearch/elasticsearch.yml
--17--取消注釋,指定集群名字
cluster.name: my-elk-cluster
--23--取消注釋,指定節(jié)點名字:Node1節(jié)點為node1,Node2節(jié)點為node2
node.name: node1
node.master: true#是否master節(jié)點,false為否
node.data: true#是否數(shù)據(jù)節(jié)點,false為否
--34--取消注釋,指定數(shù)據(jù)存放路徑
path.data: /var/lib/elasticsearch
--38--取消注釋,指定日志存放路徑
path.logs: /var/log/elasticsearch
--44--取消注釋,避免es使用swap交換分區(qū)
bootstrap.memory_lock: false
--56--取消注釋,設(shè)置監(jiān)聽地址,0.0.0.0代表所有地址
network.host: 0.0.0.0
--60--取消注釋,ES 服務(wù)的默認監(jiān)聽端口為9200
http.port: 9200 #指定es集群提供外部訪問的接口
transport.tcp.port: 9300 #指定es集群內(nèi)部通信接口
--69--取消注釋,集群發(fā)現(xiàn)通過單播實現(xiàn),指定要發(fā)現(xiàn)的節(jié)點
discovery.zen.ping.unicast.hosts: ["192.168.137.15:9300", "192.168.137.10:9300"]
grep -v "^#" /etc/elasticsearch/elasticsearch.yml
es 性能調(diào)優(yōu)參數(shù)
#優(yōu)化最大內(nèi)存大小和最大文件描述符的數(shù)量需重啟生效
vim /etc/security/limits.conf
......
* soft nofile 65536 可打開的文件描述符的最大數(shù)(軟限制)
* hard nofile 131072 可打開的文件描述符的最大數(shù)(硬限制)
* soft memlock unlimited 單個用戶可用的最大進程數(shù)量(軟限制)
* hard memlock unlimited 單個用戶可用的最大進程數(shù)量(硬限制)
優(yōu)化elasticsearch用戶擁有的內(nèi)存權(quán)限
由于ES構(gòu)建基于lucene, 而lucene設(shè)計強大之處在于lucene能夠很好的利用操作系統(tǒng)內(nèi)存來緩存索引數(shù)據(jù),以提供快速的查詢性能。lucene的索引文件segements是存儲在單文件中的,并且不可變,對于OS來說,能夠很友好地將索引文件保持在cache中,以便快速訪問;因此,我們很有必要將一半的物理內(nèi)存留給lucene ; 另一半的物理內(nèi)存留給ES(JVM heap )。所以, 在ES內(nèi)存設(shè)置方面,可以遵循以下原則:
- 當機器內(nèi)存小于64G時,遵循通用的原則,50%給ES,50%留給操作系統(tǒng),供lucene使用
- 當機器內(nèi)存大于64G時,遵循原則:建議分配給ES分配 4~32G 的內(nèi)存即可,其它內(nèi)存留給操作系統(tǒng),供lucene使用
?
vim /etc/sysctl.conf
#一個進程可以擁有的最大內(nèi)存映射區(qū)域數(shù),參考數(shù)據(jù)(分配 2g/262144,4g/4194304,8g/8388608)
vm.max_map_count=262144
sysctl -p 重載配置文件
sysctl -a | grep vm.max_map_count
啟動elasticsearch是否成功開啟
systemctl start elasticsearch.service
systemctl enable elasticsearch.service
netstat -antp | grep 9200
查看節(jié)點信息
瀏覽器訪問 2http://192.168.137.10:9200 、 2http://192.168.137.15:9200 查看節(jié)點 Node01、Node02 的信息。
瀏覽器訪問 2http://192.168.137.10:9200/_cluster/health?pretty 、 http://192.168.137.15:9200/_cluster/health?pretty查看群集的健康情況,可以看到 status 值為 green(綠色), 表示節(jié)點健康運行。
瀏覽器訪問 http://192.168.137.10:9200/_cluster/state?pretty 檢查群集狀態(tài)信息
使用上述方式查看群集的狀態(tài)對用戶并不友好,可以通過安裝 Elasticsearch-head 插件,可以更方便地管理群集。
安裝 Elasticsearch-head 插件
Elasticsearch 在 5.0 版本后,Elasticsearch-head 插件需要作為獨立服務(wù)進行安裝,需要使用npm工具(NodeJS的包管理工具)安裝。
安裝 Elasticsearch-head 需要提前安裝好依賴軟件 node 和 phantomjs。
node:是一個基于 Chrome V8 引擎的 JavaScript 運行環(huán)境。
phantomjs:是一個基于 webkit 的JavaScriptAPI,可以理解為一個隱形的瀏覽器,任何基于 webkit 瀏覽器做的事情,它都可以做到
編譯安裝 node
#上傳軟件包 node-v8.2.1.tar.gz 到/opt
yum install gcc gcc-c++ make -y
cd /opt
tar zxvf node-v8.2.1.tar.gz
cd node-v8.2.1/
./configure
make && make install
安裝 phantomjs
#上傳軟件包 phantomjs-2.1.1-linux-x86_64.tar.bz2 到opt
cd /opt
tar xvf phantomjs-2.1.1-linux-x86_64.tar.bz2
cd /opt/phantomjs-2.1.1-linux-x86_64/bin
ln -s phantomjs /usr/local/bin
安裝 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
修改 Elasticsearch 主配置文件
vim /etc/elasticsearch/elasticsearch.yml
......
--末尾添加以下內(nèi)容--
http.cors.enabled: true
#開啟跨域訪問支持,默認為 false
http.cors.allow-origin: "*"
#指定跨域訪問允許的域名地址為所有
systemctl restart elasticsearch
啟動 elasticsearch-head 服務(wù)
必須在解壓后的 elasticsearch-head 目錄下啟動服務(wù),進程會讀取該目錄下的 gruntfile.js 文件,否則可能啟動失敗
cd /usr/local/src/elasticsearch-head/
npm run start &
> elasticsearch-head@0.0.0 start /usr/local/src/elasticsearch-head
> grunt server
Running "connect:server" (connect) task
Waiting forever...
Started connect web server on http://localhost:9100
#elasticsearch-head 監(jiān)聽的端口是 9100
netstat -natp |grep 9100
通過 Elasticsearch-head 查看 Elasticsearch 信息
通過瀏覽器訪問?http://192.168.137.10:9100/?地址并連接群集。如果看到群集健康值為 green 綠色,代表群集很健康。
插入索引
#通過命令插入一個測試索引,索引為 index-demo,類型為 test。
curl -X PUT 'localhost:9200/index-demo/test/1?pretty&pretty' -H 'content-Type: application/json' -d '{"user":"zhangsan","mesg":"hello world"}'
//輸出結(jié)果如下:
{
"_index": "index-demo",
"_type" : "test",
"_id": "1",
"_version": 1,
"result" : "created",
"_shards" : {
"total" : 2,
"successful" : 2,
"failed" : 0
},
"created" : true
}
瀏覽器訪問 http://192.168.52.10:9100/ 查看索引信息,可以看見索引默認被分片5個,并且有一個副本。
點擊“數(shù)據(jù)瀏覽”,會發(fā)現(xiàn)在node1上創(chuàng)建的索引為 index-demo,類型為 test 的相關(guān)信息。
ELK Logstash 部署(在 Apache 節(jié)點上操作)
Logstash 一般部署在需要監(jiān)控其日志的服務(wù)器。在本案例中,Logstash 部署在 Apache 服務(wù)器上,用于收集 Apache 服務(wù)器的日志信息并發(fā)送到 Elasticsearch。
更改主機名
hostnamectl set-hostname apache
su
安裝Apahce服務(wù)(httpd)
yum -y install httpd
systemctl start httpd
安裝Java環(huán)境
yum -y install java
java -version
安裝logstash
#上傳軟件包 logstash-5.5.1.rpm 到/opt目錄下
cd /opt
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/
測試 Logstash
Logstash 命令常用選項:
-f | 通過這個選項可以指定 Logstash 的配置文件,根據(jù)配置文件配置 Logstash 的輸入和輸出流。 |
---|---|
-t | 測試配置文件是否正確,然后退出。 |
-e | 從命令行中獲取,輸入、輸出后面跟著字符串,該字符串可以被當作 Logstash 的配置(如果是空,則默認使用 stdin 作為輸入,stdout 作為輸出)。 |
定義輸入和輸出流:
#輸入采用標準輸入,輸出采用標準輸出(類似管道)
logstash -e 'input { stdin{} } output { stdout{} }'
......
www.baidu.com #鍵入內(nèi)容(標準輸入)
#輸出結(jié)果(標準輸出)
www.sina.com.cn #鍵入內(nèi)容(標準輸入)
#輸出結(jié)果(標準輸出)
//執(zhí)行 ctrl+c 退出
定義 logstash配置文件
Logstash 配置文件基本由三部分組成:input、output 以及 filter(可選,根據(jù)需要選擇使用)。
input | 表示從數(shù)據(jù)源采集數(shù)據(jù),常見的數(shù)據(jù)源如Kafka、日志文件等 |
---|---|
filter | 表示數(shù)據(jù)處理層,包括對數(shù)據(jù)進行格式化處理、數(shù)據(jù)類型轉(zhuǎn)換、數(shù)據(jù)過濾等,支持正則表達式 |
output | 表示將Logstash收集的數(shù)據(jù)經(jīng)由過濾器處理之后輸出到Elasticsearch。 |
#格式如下:
input {...}
filter {...}
output {...}
#在每個部分中,也可以指定多個訪問方式。例如,若要指定兩個日志來源文件,則格式如下:
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" #指定要收集的日志的位置</span>
type =>"system" #自定義日志類型標識
start_position =>"beginning" #表示從開始處收集
}
}
output {
elasticsearch { #輸出到 elasticsearch
hosts => ["192.168.52.110:9200","192.168.52.120:9200"] #指定 elasticsearch 服務(wù)器的地址和端口
index =>"system-%{+YYYY.MM.dd}" #指定輸出到 elasticsearch 的索引格式
}
}
systemctl restart logstash
瀏覽器訪問?http://192.168.137.10:9100/?查看索引信息
ELK Kiabana 部署(在 Node1 節(jié)點上操作)
安裝 Kiabana
#上傳軟件包 kibana-5.5.1-x86_64.rpm 到/opt目錄
cd /opt
rpm -ivh kibana-5.5.1-x86_64.rpm
設(shè)置 Kibana 的主配置文件
vim /etc/kibana/kibana.yml
--2--取消注釋,Kiabana 服務(wù)的默認監(jiān)聽端口為5601
server.port: 5601
--7--取消注釋,設(shè)置 Kiabana 的監(jiān)聽地址,0.0.0.0代表所有地址
server.host: "0.0.0.0"
--21--取消注釋,配置es服務(wù)器的ip,如果是集群則配置該集群中master節(jié)點的ip
elasticsearch.url: "http://192.168.137.10:9200","http://192.168.137.15:9200"
--30--取消注釋,設(shè)置在 elasticsearch 中添加.kibana索引
kibana.index: ".kibana"
--86--取消注釋,配置kibana的日志文件路徑(需手動創(chuàng)建),不然默認是messages里記錄日志
logging.dest: /var/log/kibana.log
創(chuàng)建日志文件,啟動 Kibana 服務(wù)
touch /var/log/kibana.log
chown kibana:kibana /var/log/kibana.log
systemctl start kibana.service
systemctl enable kibana.service
netstat -natp | grep 5601
驗證 Kibana
瀏覽器訪問?http://192.168.137.10:5601
第一次登錄需要添加一個 Elasticsearch 索引:
Index name or pattern
//輸入:system-* #在索引名中輸入之前配置的 Output 前綴“system”
單擊 “create” 按鈕創(chuàng)建,單擊 “Discover” 按鈕可查看圖表信息及日志信息。
數(shù)據(jù)展示可以分類顯示,在“Available Fields”中的“host”,然后單擊 “add”按鈕,可以看到按照“host”篩選后的結(jié)果
將 Apache 服務(wù)器的日志(訪問的、錯誤的)添加到 Elasticsearch 并通過 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.137.10:9200","192.168.137.15:9200"]
index => "apache_access-%{+YYYY.MM.dd}"
}
}
if [ type] == "error"{
elasticsearch {
hosts => ["192.168.137.10:9200","192.168.137.15:9200"]
index => "apache_access-%{+YYYY.MM.dd}
}
}
}
cd /etc/logstash/conf.d/
/usr/share/logstash/bin/logstash -f apache_log.conf
瀏覽器訪問?http://192.168.137.10:9100?查看索引是否創(chuàng)建文章來源:http://www.zghlxwxcb.cn/news/detail-491750.html
瀏覽器訪問?http://192.168.137.10:5601?登錄 Kibana文章來源地址http://www.zghlxwxcb.cn/news/detail-491750.html
單擊“Index ->Create Index Pattern”按鈕添加索引, 在索引名中輸入之前配置的 Output
前綴 apache_access-*,并單擊“Create”按鈕。
用相同的方法添加 apache_error-*索引。
選擇“Discover”選項卡,在中間下拉列表中選擇剛添加的 apache_access-* 、apache_error-* 索引, 可以查看相應(yīng)的圖表及日志信息。
到了這里,關(guān)于DAY 74 ELK企業(yè)級日志分析系統(tǒng)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!