一,ELK
1.ELK日誌分析系統
ELK日誌分析系統是Logstash、Elasticsearch、Kibana開源軟體的集合,對外是作為一個日誌管理系統的開源方案,它可以從任何來源、任何格式進行日誌搜尋、分析與視覺化展示。
2.ELK日誌分析系統組成
elasticsearch(
es
):透過搭建群集;儲存日誌資料,索引日誌資料;
logstash :收集日誌,收集到了後給
es
儲存;
kibana :檢視形式展現日誌資訊,更加人性化。
3.日誌處理步驟
1
,將日誌進行集中化管理(
beats)
2
,將日誌格式化(Logstash),然後將格式化後的資料輸出到Elasticsearch
3
,對格式化後的資料進行索引和儲存(Elasticsearch)
4
,前端資料的展示(Kibana)
4.Elasticsearch
Elasticsearch
:提供了一個分散式多使用者能力的全文搜尋引擎,用java開發,設計用於雲計算中,能夠達到即時搜尋,穩定,可靠,快速,安裝使用方便。
Elasticsearch
核心概念:
1
.接近即時(
NRT
):
elasticsearch
是一個接近即時的搜尋平臺,這意味著,從索引一個文件直到這個文件能夠被搜尋到有一個輕微的延遲(通常是
1
秒)
2
.叢集(cluster):
一個叢集就是由一個或多個節點組織在一起,它們共同持有你整個的資料,並一起提供索引和搜尋功能。其中一個節點為主節點,這個主節點是可以透過選舉產生的,並提供跨節點的聯合索引和搜尋的功能。叢集有一個唯一性標示的名字,預設是elasticsearch,叢集名字很重要,每個節點是基於叢集名字加入到其叢集中的。因此,確保在不同環境中使用不同的叢集名字。一個叢集可以只有一個節點。建議在配置elasticsearch時,配置成叢集模式。
3
.節點(node):
節點就是一臺單一的伺服器,是叢集的一部分,儲存資料並參與叢集的索引和搜尋功能。節點也是透過名字來標識,預設是在節點啟動時隨機分配的字元名。可自己定義。
4
.索引(
type
):
在一個索引中,可以定義一種或多種型別。一個型別是索引的一個邏輯上的分類/分割槽,其語義完全自己來定。通常,會為具有一組共同欄位的文件定義一個型別。
型別相對於關係型資料庫的表,
索引(庫)–> 型別(表)-> 文件(記錄)
5
.分片和副本(shards & replicas):
在實際情況下,索引儲存的資料可能超過單個節點的硬體限制。如一個
10
億文件需1TB空間可能不適合儲存在單個節點的磁碟上,或者從單個節點搜尋請求太慢了。為了解決這個問題,elasticsearch提供將索引分成多個分片的功能。當在建立索引時,可以定義想要分片的數量。每一個分片就是一個全功能的獨立的索引,可以位於叢集中任何節點上。
每個索引可以被分成多個分片。一個索引也可以被複制
0
次(意思是沒有複製)或多次。一旦複製了,每個索引就有了主分片(作為複製源的原來的分片)和複製分片(主分片的複製)之別。分片和副本的數量可以在索引建立的時候指定。
在索引建立之後,可以在任何時候動態地改變副本的數量,但是事後不能改變分片的數量。
預設情況下,
Elasticsearch
中的每個索引被分片
5
個主分片和
1
個副本,這意味著,如果叢集中至少有兩個節點,索引將會有
5
個主分片和另外
5
個副本分片(
1
個完全複製),這樣的話每個索引總共就有
10
個分片。
5.LogStash
一款強大的資料處理工具;
可實現資料傳輸、格式處理、格式化輸出;
資料輸入(從業務輸入)、資料加工(如過濾、改寫等)以及資料輸出(輸出到Elasticsearch群集)。
Logstash的主要元件:
shipper:日誌收集者,負責監控本地日誌檔案的變化,及時把日誌檔案的最新內容收集起來。通常,遠端代理端(agent)只需要執行這個元件即可;
indexer:日誌儲存者,負責接收日誌並寫入到本地檔案;
broker:日誌hub,負責連線多個shipper和多個indexer;
search
and
storage:允許對事件進行搜尋和儲存;
web interface:基於Web的展示介面。
6.Kibana
一個針對Elasticsearch的開源分析及視覺化平臺;
搜尋、檢視儲存在Elasticsearch索引中的資料;
透過各種圖表進行高階資料分析及展示。
主要功能:
Elasticsearch無縫之整合
整合資料,複雜資料分析
讓更多團隊成員收益
介面靈活,分享更容易
配置簡單,視覺化多資料來源
簡單資料匯出
二,部署ELK日誌分析系統
環境:
node1 192.168.118.13
node2 192.168.118.14
apache 192.168.118.128
1,關閉防火牆及核心防護
systemctl stop firewalld
systemctl
disable
firewalld
setenforce 0
2,配置elasticsearch環境
node1+node2
echo'192.168.118.13 node1'
>> /etc/hosts
echo'192.168.118.14 node2'
>> /etc/hosts
java -version
#如果沒有安裝,yum -y install java
3,部署elasticsearch軟體
1)安裝elasticsearch—rpm包
上傳elasticsearch-5.5.0.rpm到/opt目錄下
cd
/opt
rpm -ivh elasticsearch-5.5.0.rpm
2)載入系統服務
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行;取消註釋,修改;節點名字(node2修改成node2)
node.name: node1
#33行;取消註釋,修改;資料存放路徑
path.data: /data/elk_data
#37行;取消註釋,修改;日誌存放路徑
path.logs: /var/log/elasticsearch
#43行;取消註釋,修改;不在啟動的時候鎖定記憶體
bootstrap.memory_lock:
false
#55行;取消註釋,修改;提供服務繫結的IP地址,0.0.0.0代表所有地址
network.host: 0.0.0.0
#59行;取消註釋;偵聽埠為9200(預設)
http.port: 9200
#68行;取消註釋,修改;叢集發現透過單播實現,指定要發現的節點 node1、node2
discovery.zen.ping.unicast.hosts: [
"node1"
,
"node2"
]
檢驗配置
grep -v
"^#"
/etc/elasticsearch/elasticsearch.yml
4)建立資料存放路徑並授權
mkdir
-p /data/elk_data
chown
elasticsearch:elasticsearch /data/elk_data/
5)啟動elasticsearch是否成功開啟
systemctl start elasticsearch
netstat -antp |grep 9200
6)檢視節點資訊
瀏覽器訪問:
http://192.168.118.13:9200
http://192.168.118.14:9200
真機檢測叢集健康、檢視叢集狀態
http://192.168.118.13:9200/_cluster/health?pretty
http://192.168.118.14:9200/_cluster/health?pretty
http://192.168.118.13:9200/_cluster/state?pretty
http://192.168.118.14:9200/_cluster/state?pretty






4,安裝elasticsearch-head外掛
1)編譯安裝node元件依賴包
node1+node2
yum -y install gcc gcc-c++ make
上傳軟體包 node-v8.2.1.tar.gz 到/opt
cd
/opt
tar zxvf node-v8.2.1.tar.gz
cd
node-v8.2.1/
./configure && make && make install
2)安裝phantomjs(前端框架)
上傳軟體包 phantomjs-2.1.1-linux-x86_64.tar.bz2 到/opt目錄下
cd
/opt
tar jxf 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(資料視覺化工具)
上傳軟體包 elasticsearch-head.tar.gz 到/opt
cd
/opt
tar zxf elasticsearch-head.tar.gz -C /usr/local/src/
cd
/usr/local/src/elasticsearch-head/
npm install
4)修改主配置檔案
vim /etc/elasticsearch/elasticsearch.yml
#末尾;新增以下內容
http.cors.enabled:
true#開啟跨域訪問支援,預設為 false
http.cors.allow-origin:
"*"#指定跨域訪問允許的域名地址為所有
systemctl restart elasticsearch.service
5)啟動elasticsearch-head
必須在解壓後的 elasticsearch-head 目錄下啟動服務,程序會讀取該目錄下的 gruntfile.js 檔案,否則可能啟動失敗。
cd
/usr/local/src/elasticsearch-head/
npm run start &
> [email protected] 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 監聽的埠是 9100
netstat -natp |grep 9100
6)使用elasticsearch-head外掛檢視叢集狀態
瀏覽器上訪問:
http://192.168.118.13:9100
在Elasticsearch 後面的欄目中輸入
http://192.168.118.13:9200
http://192.168.118.14:9100
在Elasticsearch 後面的欄目中輸入
http://192.168.118.14:9200
7)建立索引
node1(192.168.118.13)
建立索引為index-demo,型別為
test
curl -XPUT
'localhost:9200/index-demo/test/1?pretty&pretty'
-H
'content-Type: application/json'
-d
'{"user":"srs","mesg":"hello world"}'
向本機的頁面localhost:9200/index-demo/test/1?pretty&pretty提交資料H新增HTTP請求標頭-d新增的資料
開啟瀏覽器輸入地址,檢視索引資訊
http://192.168.118.13:9100






5.安裝logstash
1)安裝Apahce服務(httpd)和Java環境
apache 192.168.118.128上:
yum -y install httpd
systemctl start httpd
安裝yum -y install java
java -version
2)安裝logstash
上傳logstash-5.5.1.rpm到/opt目錄下
cd
/opt
rpm -ivh logstash-5.5.1.rpm
systemctl start logstash.service
systemctl
enable
logstash.service
#建立logstash軟連線
ln
-s /usr/share/logstash/bin/logstash /usr/local/bin/
3)測試logstash命令
欄位描述解釋:
-f 透過這個選項可以指定logstash的配置檔案,根據配置檔案配置logstash
-e 後面跟著字串 該字串可以被當做logstash的配置(如果是” ”,則預設使用stdin做為輸入、stdout作為輸出)
-t 測試配置檔案是否正確,然後退出
定義輸入和輸出流:
輸入採用標準輸入,輸出採用標準輸出(類似管道)
logstash -e
'input { stdin{} } output { stdout{} }'
使用rubydebug顯示詳細輸出,codec為一種編解碼器
logstash -e
'input { stdin{} } output { stdout{ codec=>rubydebug } }'
使用 Logstash 將資訊寫入 Elasticsearch 中
logstash -e
'input { stdin{} } output { elasticsearch { hosts=>["192.168.118.13:9200"] } }'
4)在Apache主機上做對接配置
chmod
o+r /var/log/messages
ll /var/log/messages
vim /etc/logstash/conf.d/system.conf
input {
file{
path =>
"/var/log/messages"
type
=>
"system"
start_position =>
"beginning"
}
}
output {
elasticsearch {
hosts => [
"192.168.118.13:9200"
]
index =>
"system-%{+YYYY.MM.dd}"
}
}
systemctl restart logstash.service
瀏覽器檢視,索引資訊:
http://192.168.118.13:9100




6.安裝kibana
node1上:
上傳kibana-5.5.1-x86_64.rpm 到/opt目錄
cd
/opt
rpm -ivh kibana-5.5.1-x86_64.rpm
cd
/etc/kibana/
cp
kibana.yml kibana.yml.bak
vim kibana.yml
#2行;取消註釋;kibana開啟的埠(預設5601)
server.port: 5601
#7行;取消註釋,修改;kibana偵聽的地址
server.host:
"0.0.0.0"
#21行;取消註釋,修改;和elasticsearch建立聯絡
elasticsearch.url:
"http://192.168.221.20:9200"
#30行;取消註釋;在elasticsearch中新增.kibana索引
kibana.index:
".kibana"
systemctl start kibana.service
systemctl
enable
kibana.service
瀏覽器訪問:
192.168.118.13:5601
首次登入建立一個索引 名字:system-* (這是對接系統日誌檔案)
然後點最下面的出面的create 按鈕建立
對接Apache主機的Apache 日誌檔案(訪問日誌、錯誤日誌)
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.118.13:9200"
]
index =>
"apache_access-%{+YYYY.MM.dd}"
}
}
if
[
type
] ==
"error"
{
elasticsearch {
hosts => [
"192.168.118.13:9200"
]
index =>
"apache_error-%{+YYYY.MM.dd}"
}
}
}
/usr/share/logstash/bin/logstash -f apache_log.conf
瀏覽器訪問192.168.118.128,製造訪問記錄
開啟瀏覽器 輸入http://192.168.118.13:9100/ 檢視索引資訊
開啟瀏覽器 輸入http://192.168.118.13:5601




文末福利

即將步入2025年,不少小夥伴在考慮來年的工作方向。
僅目前來說,傳統運維衝擊年薪30W+的轉型方向就是SRE&DevOps崗位。









