邊鵬飛 郝 麗
(河北省地震局,河北石家莊 050021)
河北省地震行業(yè)網(wǎng)絡(luò)系統(tǒng)在“十五”時(shí)期進(jìn)行了大規(guī)模擴(kuò)建,成為了地震行業(yè)重要的數(shù)據(jù)傳輸、共享和發(fā)布的基礎(chǔ)平臺(tái)。但隨著網(wǎng)絡(luò)規(guī)模的不斷擴(kuò)大,網(wǎng)絡(luò)安全問題日益突出[1]。及時(shí)查看設(shè)備、系統(tǒng)及業(yè)務(wù)應(yīng)用日志,快速地發(fā)現(xiàn)問題和定位故障,是保障網(wǎng)絡(luò)及業(yè)務(wù)系統(tǒng)安全正常運(yùn)行的重要手段之一。然而大量日志信息分散存儲(chǔ)在各種設(shè)備中,并且需要以人工命令查看,效率低,難以滿足快速發(fā)現(xiàn)和定位故障的要求。ELK 日志系統(tǒng)是一種重要的解決方案,它通過集中收集、存儲(chǔ)和分析大規(guī)模的日志數(shù)據(jù),幫助運(yùn)維人員更好地利用這些數(shù)據(jù)。本文將詳細(xì)介紹ELK 日志系統(tǒng)的組成部分及其功能,并重點(diǎn)探討其在地震行業(yè)網(wǎng)中的應(yīng)用。
前人對(duì)ELK 技術(shù)棧的研究主要集中在架構(gòu)、原理和技術(shù)細(xì)節(jié)等方面,也有一些研究關(guān)注ELK 日志系統(tǒng)在不同領(lǐng)域的應(yīng)用。例如,Ngo 等[2]對(duì)環(huán)境數(shù)據(jù)收集、存儲(chǔ)和分析進(jìn)行了研究。龔錦紅等[3]探討了ELK在高校校園網(wǎng)的應(yīng)用。李書達(dá)等[4]研究了ELK 在企業(yè)運(yùn)維中的應(yīng)用。珠海華潤(rùn)銀行日志管理與分析平臺(tái)課題組等[5]探討了ELK 在金融系統(tǒng)的應(yīng)用。謝磊等[6]探討了ELK 日志系統(tǒng)在電網(wǎng)系統(tǒng)的應(yīng)用。然而,目前關(guān)于ELK 日志系統(tǒng)在地震行業(yè)網(wǎng)中的應(yīng)用研究還相對(duì)較少。因此,本文旨在通過實(shí)驗(yàn)設(shè)計(jì)和真實(shí)數(shù)據(jù)集的測(cè)試,對(duì)ELK 日志系統(tǒng)在地震行業(yè)網(wǎng)中的應(yīng)用進(jìn)行全面的評(píng)估和分析。
結(jié)合河北省地震行業(yè)網(wǎng)實(shí)際環(huán)境,日志系統(tǒng)應(yīng)具有以下功能:
(1)能夠?qū)崟r(shí)收集行業(yè)網(wǎng)中網(wǎng)絡(luò)設(shè)備、安全設(shè)備、業(yè)務(wù)系統(tǒng)等產(chǎn)生的各種日志數(shù)據(jù);
(2)能夠?qū)⑹占降拇罅繑?shù)據(jù)進(jìn)行存儲(chǔ);
(3)能夠?qū)κ占娜罩緮?shù)據(jù)進(jìn)行統(tǒng)計(jì)分析及可視化展示。
圖1 展示了ELK 日志系統(tǒng)的基本架構(gòu),各組成部分詳解如下。
2.2.1 日志采集
日志的集中存儲(chǔ)和分析展示首先要解決日志收集問題,大量的網(wǎng)絡(luò)設(shè)備、安全設(shè)備以及應(yīng)用系統(tǒng)的日志都分布在不同的設(shè)備上,需要通過Filebeat 和Logstash 搭建日志的收集模塊。
Filebeat 是一個(gè)使用GO 語言開發(fā)的文件型日志采集器。在啟動(dòng)時(shí),其prospector 組件會(huì)監(jiān)控指定的日志文件路徑或某個(gè)特定文件。每個(gè)日志文件都會(huì)啟動(dòng)一個(gè)harvester,harvester 會(huì)根據(jù)文件的最后讀取位置的偏移量來判斷是否有新的日志內(nèi)容。如果有新內(nèi)容,它會(huì)將該內(nèi)容發(fā)送至后臺(tái)的libbeat 程序。
在日志采集中,Logstash 起到管道和橋梁的作用,由3 個(gè)主要部分組成:輸入(Input)、過濾(Filter)和輸出(Output)。Input 負(fù)責(zé)指定日志數(shù)據(jù)的采集源,Logstash 支持多種數(shù)據(jù)格式,包括File、Syslog、Redis、Beats 等。Filter 是核心組件,負(fù)責(zé)對(duì)日志進(jìn)行清洗和解析。Output 用于指定數(shù)據(jù)的輸出目的地,通常選擇的是Elasticsearch。
2.2.2 日志存儲(chǔ)
日志存儲(chǔ)后還需要具有可擴(kuò)展性才能夠滿足不斷增長(zhǎng)的需求,并且能夠?qū)崿F(xiàn)快速檢索大量的日志數(shù)據(jù)。因此需要利用Elasticsearch 搭建日志系統(tǒng)的存儲(chǔ)和搜索分析模塊。
Elasticsearch 是一個(gè)基于Lucene 的搜索引擎,具有分布式、可擴(kuò)展、高可靠性和RESTful API 等特點(diǎn)。在Elasticsearch 中,數(shù)據(jù)以索引的形式存儲(chǔ),每個(gè)索引包含類型和文檔。索引、類型和文檔的概念與關(guān)系型數(shù)據(jù)庫(kù)中的數(shù)據(jù)庫(kù)、表和記錄類似。
2.2.3 日志可視化
為了便于運(yùn)維人員使用,日志系統(tǒng)還需具備友好的日志分析及展示界面。需要通過Kibana 將Elasticsearch 中的數(shù)據(jù)以圖表、表格等形式展示出來。
Kibana 是一款圖形展示軟件,它提供了發(fā)現(xiàn)功能,允許用戶使用Lucene 語句或Query DSL 語句來檢索Elasticsearch 中的數(shù)據(jù)。此外,Kibana 還內(nèi)置了多種類型的圖表,包括柱狀圖、餅圖、條形圖和熱力地圖等。這些圖表可以通過可視化方式創(chuàng)建,然后創(chuàng)建儀表盤,由用戶自定義加載和顯示哪些圖表。
本節(jié)將詳細(xì)介紹我們將如何使用ELK 系統(tǒng)來處理地震行業(yè)網(wǎng)的日志數(shù)據(jù)。由于利用Logstash 作為日志收集器這種架構(gòu)資源占用要比Filebeat 的整體資源占用高很多[7]。因此,我們利用Filebeat 作為日志收集器。
本次日志系統(tǒng)的搭建采用一臺(tái)安裝了CentOS7操作系統(tǒng)的虛擬機(jī)作為基礎(chǔ)平臺(tái)。由于Elasticsearch、Logstash 各組件需要依賴JAVA 環(huán)境運(yùn)行,因此在開始安裝ELK 之前,需要安裝JDK,并配置環(huán)境變量。建議選擇安裝比較穩(wěn)定的版本,本次實(shí)施我們采用的是JDK8 版本。
(1)首先,使用yum 方式安裝Elasticsearch,默認(rèn)安裝到/usr/share/elasticsearch 目錄下。配置文件默認(rèn)在/etc/elasticsearch/目錄下。安裝完成后,修改配置文件elasticsearch.yml 中主機(jī)地址為服務(wù)器IP 地址。Elasticsearch 默認(rèn)的http 端口為9200,配置完成后可以通過使用http://IP:9200/進(jìn)行驗(yàn)證Elasticsearch 服務(wù)是否正常,如果服務(wù)無法訪問,需注意防火墻配置。
(2)使用yum 方式安裝Kibana,默認(rèn)安裝在/opt/kibana 目錄下,配置文件路徑為/opt/kibana/config/kibana.yml。Kibana 默認(rèn)端口為5601。安裝完成后修改配置文件中主機(jī)地址和Elasticsearch 服務(wù)地址,由于本次采用同一臺(tái)服務(wù)器,修改為同一個(gè)IP 地址即可。如果使用多臺(tái)服務(wù)器或集群時(shí)需根據(jù)實(shí)際情況修改配置文件中IP 地址。
(3)使用yum 方式安裝Logstash,默認(rèn)安裝在/opt/logstash 目錄下,所有的配置均在/etc/logstash/conf.d目錄下。Input、Filter、Output 組件均在該目錄下創(chuàng)建并配置。配置Input 需要指定從哪里接收數(shù)據(jù);Filter可根據(jù)需求配置合適的參數(shù)對(duì)不必要的字段進(jìn)行過濾;Output 需要指定Logstash 將數(shù)據(jù)發(fā)送到何處,我們一般需配置輸出到Elasticsearch。需要注意的是,Logstash 配置文件使用YAML 格式編寫,需要遵循YAML 語法規(guī)范,以避免配置錯(cuò)誤或無法正常啟動(dòng)Logstash。建 議通過命令service logstash configtest 運(yùn)行檢驗(yàn)配置文件正確性,如果顯示Configuration OK則表示沒有任何語法錯(cuò)誤。
(4)在需采集日志的服務(wù)器上下載并安裝合適的版本(例如Windows、Linux 等),并進(jìn)行相應(yīng)的配置和優(yōu)化。Linux 系統(tǒng)Filebeat 默認(rèn)安裝后其配置文件為/etc/filebeat/filebeat.yml;Windows 系統(tǒng)默認(rèn)安裝在C:Program FilesFilebeat 目錄下,修改配置文件將Filebeat 收集的日志輸出到Logstash。同時(shí)還需要在filebeat.yml 配置文件中設(shè)置連接Elasticsearch 和Kibana的詳細(xì)信息。
(5)配置示例:以下配置是通過Filebeat 監(jiān)控指定路徑下的日志文件,并將數(shù)據(jù)發(fā)送到Logstash 的監(jiān)聽端口。Logstash 接收到數(shù)據(jù)后,會(huì)進(jìn)一步處理和過濾日志數(shù)據(jù),并將其發(fā)送到Elasticsearch 進(jìn)行存儲(chǔ)和搜索。
在filebeat.yml 中添加以下配置,表示filebeat 收集/var/log/目錄下所有以.log 結(jié)尾的日志文件,輸出到logstash:
filebeat:
prospectors:
-
paths:
- "/var/log/*.log"
document_type: syslog
output:
logstash:
bulk_max_size: 1024
hosts:
- " localhost:5044"
tls:
certificate_authorities:
- /etc/pki/tls/certs/logstash-forwarder.crt
在logstash.yml 中添加以下配置,表示接收5044端口數(shù)據(jù),并通過過濾器對(duì)日志進(jìn)行解析處理,輸出到Elasticsearch:
input {
beats {
port => 5044
}
}
這里使用beats input,監(jiān)聽在5044 端口上。
# 添加其他過濾器插件來解析和處理日志數(shù)據(jù)
filter {
#為syslog 創(chuàng)建一個(gè)filter
if [type] == "syslog" {
grok {
match => { "message" => "%{SYSLOGTIM ESTAMP:syslog_timestamp}%{SYSLOGHOST:syslog_hostname}%{DATA:syslog_program}(?:[%{POSINT:syslog_pid}])?: %{GREEDYDATA:syslog_message}" }
add_field => ["received_at", "%{@timesta mp}"]
add_field => [ "received_from", "%{host}" ]
}
syslog_pri { }
date {
match => [ "syslog_timestamp", "MMM d HH:mm:ss", "MMM dd HH:mm:ss" ]
}
}
}
output {
elasticsearch {
hosts => ["localhost:9200"] # Elasticsearch 服務(wù)的地址
index => "myindex" # 數(shù)據(jù)推送的索引名稱
}
}
在地震行業(yè)網(wǎng)生產(chǎn)環(huán)境中部署了測(cè)試的日志系統(tǒng),該系統(tǒng)成功實(shí)現(xiàn)了對(duì)各類操作系統(tǒng)、交換機(jī)、防火墻、服務(wù)器軟硬件等多種日志數(shù)據(jù)的集中采集。同時(shí)還實(shí)現(xiàn)了日志數(shù)據(jù)過濾和日志數(shù)據(jù)分析展示功能。如圖2 所示,系統(tǒng)可通過事件判斷對(duì)日志進(jìn)行分類,并創(chuàng)建唯一索引以方便搜索。根據(jù)工作需求,系統(tǒng)過濾并展示日志信息。如圖3 所示,用戶還可以在Kibana 中創(chuàng)建數(shù)據(jù)統(tǒng)計(jì)分析圖表和定制儀表板,以便于運(yùn)維人員分析和查看。
圖2 Kibana 搜索過濾日志信息界面截圖Fig.2 Screenshot of Kibana search filter log information interface
圖3 Kibana 創(chuàng)建統(tǒng)計(jì)圖界面截圖Fig.3 Screenshot of Kibana creating a statistical chart interface
筆者介紹了利用ELK 開源組件搭建的一套日志系統(tǒng),并在河北地震行業(yè)網(wǎng)中進(jìn)行了應(yīng)用。通過實(shí)驗(yàn)驗(yàn)證了ELK 日志系統(tǒng)的日志收集、處理以及展示功能。為地震行業(yè)網(wǎng)運(yùn)維提供了一種實(shí)時(shí)監(jiān)控和分析日志數(shù)據(jù)的解決方案,具有一定的推廣應(yīng)用價(jià)值。