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

圖2 Kibana 搜索過濾日志信息界面截圖Fig.2 Screenshot of Kibana search filter log information interface

圖3 Kibana 創建統計圖界面截圖Fig.3 Screenshot of Kibana creating a statistical chart interface
筆者介紹了利用ELK 開源組件搭建的一套日志系統,并在河北地震行業網中進行了應用。通過實驗驗證了ELK 日志系統的日志收集、處理以及展示功能。為地震行業網運維提供了一種實時監控和分析日志數據的解決方案,具有一定的推廣應用價值。