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