边鹏飞 郝 丽
(河北省地震局,河北石家庄 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 日志系统的日志收集、处理以及展示功能。为地震行业网运维提供了一种实时监控和分析日志数据的解决方案,具有一定的推广应用价值。