一、ELK日志分析系統(tǒng)
1、ELK的組成部分
E: Elasticsearch
L: Logstash
K: Kibana
2、日志服務器
優(yōu)點
- 提高安全性
- 集中化管理
缺點
- 對日志分析困難
3、日志處理步驟
①將日志進行集中化管理
②將日志格式化(Logstash)并輸出到Elasticsearch
③對格式化后的數(shù)據(jù)進行索引和存儲
④前端數(shù)據(jù)的展示(Kibana)
二、Elastticsearsh概述
- 提供了一個分布式多用戶能力的全文搜索引擎
1、Elasticsearch特性
Elasticsearch的核心概念
接近時實(NRT)
- 搜索速度非常的快,輕微的延遲。
集群(cluster)
- 將一個或多個節(jié)點組織在一起,組成一個cluster集群。
- 集群有一個唯一標志的名字,默認Elasticasearch,每個節(jié)點基于集群名字加入到集群中,且在集群中使用自己的名字來身份標識。
節(jié)點(node)
- 每一個節(jié)點就是一臺單臺服務器。
索引(index)
- 一個索引由一個名字來標識(必須全部是小寫字母),并且當我們要多對應這個索引中的文檔進行索引、更新、刪除的時候,都要使用到這個名字。
類型(type)
- 在一個索引中,你可以定義一個或多種類型。
- 比如:當我們存儲一個購物平臺的數(shù)據(jù)時,可以定義一個用戶數(shù)據(jù)類型,產(chǎn)品數(shù)據(jù)類型等
文檔(document)
- 一個文檔是一個可被索引的基礎信息單元
#索引(庫)----》類型(表)------》文檔(記錄)
2、分片和副本
什么是分片?
- 索引存儲的數(shù)據(jù)可能超過單個節(jié)點的硬件限制。
- 為了解決這個問題,ES提供了將索引分成多個分片的功能,當在創(chuàng)建索引時,可以定義想要的分片數(shù)量,每一個分片就是一個全功能獨立的索引。
為什么要分片?
- 水平分割擴展,增大存儲量
- 分布式并跨越分片操作, 提高性能和吞吐量
什么是副本?
- 為了健壯性,高可用性,可以故障切換。
- es將分片復制一份或多份放在不同的節(jié)點主機上,稱為分片副本。
什么是副本?
- 為了健壯性,高可用性,可以故障切換。
- es將分片復制一份或多份放在不同的節(jié)點主機上,稱為分片副本。
3、es和傳統(tǒng)數(shù)據(jù)庫的區(qū)別
①結(jié)構(gòu)名稱不同
- 關(guān)系型數(shù)據(jù)庫:數(shù)據(jù)庫–>表–>行—>列
- Elasticsearch:索引—>類型—>文檔---->字段
②ES分布式,傳統(tǒng)數(shù)據(jù)庫遍歷式索引
- ES支持分片和復制,從而方便水平分割和擴展,復制保證可es的高可用與高吞吐。
- 在es中,當你創(chuàng)建一個索引(數(shù)據(jù)庫)的時候,你可以指定你想要的分片的數(shù)量,每個分片本身也是一個功能完善并且獨立的索引(數(shù)據(jù)庫),索引可以被防止到集群中的任何節(jié)點上。
分片的優(yōu)點
1、允許你水平分割/擴展你的內(nèi)容容量
2、允許你在分片之上進行分布式的,并行的操作,進而提高性能/吞吐量
3、分片的分布,它的文檔怎么聚合回搜索請求,完全有Elasticsearch管理
③ES采用倒排索引,傳統(tǒng)數(shù)據(jù)庫采用B+樹索引
- 正排索引:id---->values
- 倒排索引:values—>id
④ES沒有用戶驗證和權(quán)限控制
⑤ES沒有事務的概念,不支持回滾,誤刪不能恢復
⑥ES免費,完全開源,傳統(tǒng)的數(shù)據(jù)庫部分免費
二、Logstash概述
- 一款強大的數(shù)據(jù)處理工具
- 可實現(xiàn)數(shù)據(jù)傳輸、格式處理、格式化輸出
- 數(shù)據(jù)輸入、數(shù)據(jù)加工(過濾、改寫等)以及數(shù)據(jù)輸出
由三個組件組成:Input、Output、Filter Plugin
- Input:獲取日志
- Output:輸出日志
- Filter Plugin:過濾日志、格式處理
1、Log Stash主要組件
-
**Shipper(日志收集):**負責監(jiān)控本地日志文件的變化,及時把日志文件的最新內(nèi)容收集起來。通常遠程代理端(agent)只需要運行這個組件即可
-
**Indexer(日志存儲):**負責接收日志并寫入到本地文件
-
**Broker(日志Hub):**負責連接多個Shipper和多個Indexer
-
**Search and Storage:**允許對事件進行搜索和存儲
-
**Web Interface:**基于Web的展示界面
三、Kibana 概述
- 一個針對Elastcsearch的開源分析及可視化平臺
- 搜索、查看存儲在ES 索引中的數(shù)據(jù)
- 通過各種圖標進行高級數(shù)據(jù)分析及展示
1、Kibana主要功能
①Elasticsearch無縫之集成
- kibana架構(gòu)為ES 定制,可以將任意結(jié)構(gòu)和非結(jié)構(gòu)加入到ES索引
②整合數(shù)據(jù)
- 更好的對ES 數(shù)據(jù)進行分析處理 。能夠處理海量數(shù)據(jù),智能的分析數(shù)據(jù)。
③讓更多團隊成員收益
④接口靈活,分享容易
- 使用Kibana可以更加方便地創(chuàng)建、保存、分享數(shù)據(jù),并將可視化數(shù)據(jù)快速交流。
⑤配置簡單
- 自帶web服務器,快速啟動運行
⑥可視化多數(shù)據(jù)源
- Kibana可以非常方便地把來自Logstash、ES-Hadoop、Beats或第三方技術(shù)的數(shù)據(jù)整合到Elasticsearch,支持的第三方技術(shù)包括Apache flume、 Fluentd 等。
⑦簡單數(shù)據(jù)導出
- Kibana可以方便地導出感興趣的數(shù)據(jù),與其它數(shù)據(jù)集合并融合后快速建模分析,發(fā)現(xiàn)新結(jié)果。
四、ELK的優(yōu)點
**1、處理方式靈活:**Elasticsearch是全文索引,具有強大的搜索能力
**2、配置相對簡單,**Kibana的配置非常簡單,Eslasticsearch則全部使用Json接口,配置也不復雜,Logstash的配置使用模塊的方式,配置也相對簡單。
**3、檢索性高,**ELK架構(gòu)通??梢赃_到百億數(shù)據(jù)的查詢秒級響應
**4、集群線性擴展,**Elasticsearch本身沒有單點的掛念,自動默認集群模式,Elasticsearch和Logstash都可以
5、靈活擴展
6、頁面美觀。
5、靈活擴展
6、頁面美觀。
1、部署環(huán)境
1.1 了解架構(gòu)部署
主機名 | ip地址 | 主要軟件 | 系統(tǒng) |
---|---|---|---|
node1 | 20.0.0.55 | ElasticSearh、Kibana | centos7.5 |
node2 | 20.0.0.56 | ElasticSearh | centos7.5 |
node2 | 20.0.0.56 | ElasticSearh | centos7.5 |
日志分析系統(tǒng)原理
-
首先有Apache產(chǎn)生大量的日志在本機中,那么Logstash就會input獲取日志,然后進行Filter Plugin(過濾日志和格式處理),最后將處理好的日志outpu發(fā)送日志到ES的cluster集群中。
-
ES將收到的日志進行索引和存儲。
-
最后可以使用Kibana進行查看分析日志。
1.2 關(guān)閉防火墻、修改主機名(所有主機)
systemctl disable --now firewalld
setenforce 0
hostnamectl set-hostname {名字}
3、部署ElasticSearch(node1、node2)
3.1 安裝ES服務
node1和node2配置基本類似,唯一區(qū)別就是在配置文件中主機名不一樣。下面以node1為例配置。
#安裝JDK,默認的是open jdk,不建議使用(ES是java開發(fā)的)。上傳jdk的rpm包到/opt目錄下安裝
cd /opt
tar -zxvf jdk-8u91-linux-x64.tar.gz -C /usr/local
vim /etc/profile
export JAVA_HOME=/usr/local/jdk1.8.0_91
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH
source /etc/profile
java -version
===============配置本機主機名解析=================
echo "20.0.0.55 node1" >> /etc/hosts
echo "20.0.0.56 node2" >> /etc/hosts
==============安裝Elsaticsearch================
#上傳rpm包到/opt目錄下
cd /opt
rpm -ivh elasticsearch-5.5.0.rpm
systemctl daemon-reload
systemctl enable elasticsearch.service
#安裝好后,生成的配置文件路徑為:/etc/elasticsearch/elasticsearch.yml
cp /etc/elasticsearch/elasticsearch.yum{,.bak}
vim /etc/elasticsearch/elasticsearch.yum
##17行,取消注釋,指定群集名稱
cluster.name: my-elk-cluster
##23行,取消注釋,指定節(jié)點名稱(node1節(jié)點為node1,node2節(jié)點為node2)
node.name: node1
##33行,取消注釋,指定數(shù)據(jù)存放路徑
path.data: /data/elk_data
##37行,取消注釋,指定日志存放路徑
path.logs: /var/log/elasticsearch/
##43行,取消注釋,不在啟動的時候鎖定內(nèi)存(前端緩存,與IOPS-性能測試方式,每秒讀寫次數(shù)相關(guān))
bootstrap.memory_lock: false
##55行,取消注釋,設置監(jiān)聽地址,0.0.0.0代表所有地址
network.host: 0.0.0.0
##59行,取消注釋,ES服務的默認監(jiān)聽端口為9200
http.port: 9200
##68行,取消注釋,集群發(fā)現(xiàn)通過單播實現(xiàn),指定要發(fā)現(xiàn)的節(jié)點node1、node2
discovery.zen.ping.unicast.hosts: ["node1", "node2"]
grep -v "^#" /etc/elasticsearch/elasticsearch.yml
mkdir -p /data/elk_data
chown elasticsearch:elasticsearch /data/elk_data/
systemctl start elasticsearch
netstat -antp |grep 9200
3.2 真機訪問,查看節(jié)點信息
20.0.0.55:9200
20.0.0.56:9200
3.3 真機檢測集群健康,查看集群狀態(tài)
20.0.0.55:9200/_cluster/health?pretty
20.0.0.56:9200/_cluster/health?pretty
4、安裝Elasticsearch-head插件(node1、node2)
為什么要安裝這個插件?
- 因為上述查看集群的方式,非常不方便,所以可以通過安裝這個插件,來管理集群。
- 安裝 Elasticsarch-head 需要提前安裝好依賴軟件 node 和 phantomjs。
注意:兩臺機器安裝步驟一樣,這邊還是以node1為例
4.1 編譯安裝node
node是一個基于 Chrome V8 引擎的 JavaScript 運行環(huán)境。
yum -y install gcc gcc-c++ make
cd /opt
tar xzvf node-v8.2.1.tar.gz
cd node-v8.2.1/
./configure
make -j4 &&make install
4.2 安裝phantomjs
phantomjs是一個基于 webkit 的 JavaScriptAPI,可以理解為一個隱形的瀏覽器,任何基于 webkit 瀏覽器做的事情,它都可以做到
#上傳安裝包上傳到/opt目錄下
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
4.3 安裝 Elasticsearch-head 數(shù)據(jù)可視化工具
上面兩個插件安裝好后,就可以安裝ElasticSearch-head可視化工具
#將包上傳到/opt目錄下
tar -zxvf elasticsearch-head.tar.gz -C /usr/local/src/
cd /usr/local/src/elasticsearch-head
npm install
4.4 修改Elasticsearch主配置文件
vim /etc/elasticsearch/elasticsearch.yml
##末行添加以下內(nèi)容
http.cors.enabled: true ##開啟跨域訪問支持,默認為false
http.cors.allow-origin: "*" ##指定跨域訪問允許的域名地址為所有
systemctl restart elasticsearch
netstat -natp |grep 9200
4.5 啟動elasticsearch-head服務
cd /usr/local/src/elasticsearch-head
npm run start &
netstat -natp |grep 9100
4.5 通過Elasticsearch-head 查看ES信息
瀏覽器訪問:20.0.0.55:9100地址并連接群集,如果看到群集的健康值為green,代表群集很健康
20.0.0.55:9100
20.0.0.56:9100
4.6 插入索引
curl -XPUT 'localhost:9200/index-demo/test/1?pretty&pretty' -H 'content-Type: application/json' -d '{"user":"zhangsan","mesg":"hello world"}'
#插入索引
4.8 瀏覽器查看索引信息
瀏覽器訪問 20.0.0.55:9100 查看索引信息,可以看見索引默認被分片為 5 個,并且有一個副本。
點擊 數(shù)據(jù)瀏覽,會發(fā)現(xiàn)在 node1 上創(chuàng)建的索引為 index-demo,類型為 test 的相關(guān)信息。
5、部署 Logstash服務(Apache節(jié)點操作)
- Logstash 一般部署在需要監(jiān)控其日志的服務器。在本案例中,Logstash 部署在 Apache 服務器上,用于收集 Apache 的日志信息并發(fā)送到 Elasticsearch。
5.1 安裝logstash
yum -y install httpd
systemctl start httpd
5.2 安裝java環(huán)境(jdk)
#將jdk包上傳至/opt目錄下
cd /opt
tar -zxvf jdk-8u91-linux-x64.tar.gz -C /usr/local
vim /etc/profile
export JAVA_HOME=/usr/local/jdk1.8.0_91
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH
source /etc/profile
java -version
5.3 安裝logstash
#上傳壓縮包到/opt目錄下
cd /opt
rpm -ivh logstash-5.5.1.rpm
systemctl start logstash
systemctl enable logstash
ln -s /usr/share/logstash/bin/logstash /usr/local/bin/
5.4 測試logstash(端口5044)
①logstasg命令常用選項
常用選項 | 說明 |
---|---|
-f | 通過這個選項可以指定logstash的配置文件,根據(jù)配置文件配置logstash的輸入和輸出 |
-e | 從命令行中獲取,輸入、輸出后面跟著字符串,該字符串可以被當做logstash的配置(如果是空,則默認使用stdin作為輸入,stdout作為輸出) |
-t | 測試配置文件是否正確,然后退出 |
②定義輸入和輸出流
- 標準輸入、輸出: 輸入財通標準輸入,輸出采用標準輸出(類似管道)
logstash -e 'input { stdin{} } output { stdout{} }'
- rubydebug 輸出: 使用rubydebug輸出詳細格式顯示.
- codec: 為一種解碼器。將內(nèi)容解碼后輸出
logstash -e 'input { stdin{} } output { stdout { codec=>rubydebug} }'
③ 使用logstash將信息寫入Elasticsearch中,輸入輸出對接
logstash -e 'input { stdin{} } output { elasticsearch { hosts=>["20.0.0.55:9200"] } }'
結(jié)果不在標準輸出顯示,而是發(fā)送至 ES,可瀏覽器訪問 http://20.0.0.55:9100 查看索引和數(shù)據(jù)
5.5 做對接配置(logstas—>ES)
#修改配置文件,讓其收集系統(tǒng)日志/var/log/messgaes,并將其輸入到ES中
chmod +r /var/log/messages
vim /etc/logstash/conf.d/system.conf
input {
file{
path =>"/var/log/messages"
##指定要收集的日志的位置
type =>"system"
##自定義日志類型標識
start_position =>"beginning"
##表示從開始處收集
}
}
output {
elasticsearch{
##輸出到ES
hosts =>["20.0.0.55:9200", "20.0.0.56:9200"]
##指定ES服務器的地址和端口,為避免單機故障,建議寫全
index =>"system-%{+YYYY.MM.dd}"
##指定輸出到ES的索引格式
}
}
systemctl restart logstash.service
5.6 訪問測試
瀏覽器訪問 20.0.0.55:9100 查看索引信息
6、部署Kibana(在node1節(jié)點上操作)
6.1 安裝kibana
#將安裝包上傳/opt目錄下
rpm -ivh kibana-5.5.1-x86_64.rpm
6.2 修改kibana的主配置文件
cp /etc/kibana/kibana.yml{,.bak}
vim /etc/kibana/kibana.yml
##2行,取消注釋,kibana服務的默認監(jiān)聽端口為5601
server.port: 5601
##7行,取消注釋,設置kibana的監(jiān)聽地址,0.0.0.0代表所有地址
server.host: "0.0.0.0"
##21行,取消注釋,設置和ES建立連接的地址和端口
elasticsearch.url: "http://20.0.0.55:9200"
##30行,取消注釋,設置在ES中添加.kibana索引
kibana.index: ".kibana"
6.3 啟動kibana服務
systemctl start kibana.service
systemctl enable kibana.service
netstat -natp | grep 5601
6.4 驗證kibana
瀏覽器訪問:20.0.0.55:5601
第一次登錄需要添加一個 ES 索引
點擊 create 創(chuàng)建
索引添加完成后,點擊 Discover 按鈕可查看圖表信息及日志信息
數(shù)據(jù)展示可以分類顯示,例如:在 Available Fileds 中的 host
6.5 將Apache服務器日志(訪問的、錯誤的)添加到ES并通過Kibaba顯示apache服務器
在apache服務器上操作
[root@apache opt]# 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 => ["20.0.0.55:9200", "20.0.0.56:9200"]
index => "apache_access-%{+YYYY.MM.dd}"
}
}
if [type] == "error" {
elasticsearch {
hosts => ["20.0.0.55:9200", "20.0.0.56:9200"]
index => "apache_error-%{+YYYY.MM.dd}"
}
}
}
[root@apache opt]# cd /etc/logstash/conf.d
[root@apache conf.d]# /usr/share/logstash/bin/logstash -f apache_log.conf
6.6 瀏覽器訪問
瀏覽器訪問20.0.0.55:9100 查看索引是否創(chuàng)建文章來源:http://www.zghlxwxcb.cn/news/detail-600753.html
瀏覽器訪問20.0.0.55:5601 登錄kibana,添加apache_access-*和apache_error-*索引,查看日志信息。文章來源地址http://www.zghlxwxcb.cn/news/detail-600753.html
到了這里,關(guān)于ELK日志分析系統(tǒng)概述及部署的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!