• 热点
  • 图片
  • 科技
  • 娱乐
  • 游戏
  • 体育
  • 汽车
  • 财经
  • 搞笑
  • 军事
  • 国际
  • 时尚
  • 旅游
  • 探索
  • 育儿
  • 养生
  • 美文
  • 历史
  • 美食
  • 当前位置: 小苹果范文网 > 美文 > 正文

    基于Elasticsearch的Nginx日志分析平台的研究与实现

    时间:2023-10-25 09:35:11 来源:小苹果范文网 本文已影响 小苹果范文网手机站

    宋斌伟?邓汪涛?马骋犇?阮晓龙

    摘  要:Nginx日志详细记录了网站访问信息,可从中了解网站运行实况和用户访问行为,分析Nginx日志,可洞悉业务整体负载情况,帮助优化服务器结构,避免业务安全和运行事故,提升竞争力。基于Elasticsearch,构建日志实时采集、清洗、存储的完整日志处理流程,自主开发Nginx日志分析平台,实现日志实时分析与可视化,并探讨总结了平台自底向上的高可用设计。在实践中应用表明,该平台具有很高的日志分析、业务洞悉能力,能有效指导智能监控运维工作。

    关键词:Nginx;日志分析;Elasticsearch;实时监控;智能监控

    中图分类号:TP311       文献标识码:A文章编号:2096-4706(2022)06-0001-08

    Research and Implementation of Nginx Log Analysis Platform Based on Elasticsearch

    SONG Binwei1, DENG Wangtao1, MA Chengben1, RUAN Xiaolong2

    (1.Shangzhen Shuyuan, Henan University of Chinese Medicine, Zhengzhou  450046, China; 2.School of Information Technology, Henan University of Chinese Medicine, Zhengzhou  450046, China)

    Abstract:
    The Nginx log records the access information of the website in detail, from which we can understand the current operation situation of the website and the users access behavior. Analyzing the Nginx log can insight into the overall load situation of the business, help to optimize the server structure, avoid business security and operation accidents, and enhance competitiveness. Based on Elasticsearch, this paper constructs a complete log processing flow of real-time log collection, cleaning and storage, independently develops the log analysis platform of Nginx, realizes real-time log analysis and visualization, and discusses and summarizes the bottom-up high availability design of the platform. The practical application shows that the platform has high ability of log analysis and business insight, which can effectively guide the operation and maintenance of intelligent monitoring.

    Keyword:
    Nginx; log analysis; Elasticsearch; real-time monitoring; intelligent monitoring

    0  引  言

    日志一般指服務器自动创建和维护的文件,是系统运行监控、异常服务预警、服务器性能监控的重要数据来源,对于任何平台而言均是重要的构成部分。随着5G互联网时代的到来,服务器日志数量正在呈指数级增长且分散存储,日志结构日趋复杂,结构化与非结构化日志混杂,导致传统的日志分析方式[1,2]已不能满足现如今的日志分析需求。以往,运维人员只能通过远程管理工具连接到对应的服务器,以人工的方式进行事故后、静态的日志分析和审计操作。正是因为这种状况的普遍存在,所以出现了以Elastic Stack为代表的日志分析套件,主要包括Beats、Logstash、Elasticsearch和Kibana等软件组合,通过组合使用以实现完整日志可视化分析。这种方式具备众多优点,如配置便捷、数据可视等,但是也存在局限性,比如特定业务使用其Kibana组件,并不能满足定制化日志分析需求。

    针对Elastic Stack自身功能存在的局限性,本文基于其核心组件Elasticsearch自主设计开发了一套Nginx日志分析平台。在开发过程中设计了体系完整的Nginx日志分析模型,以实现多元化日志可视化分析。在部署过程中进行了整体高可用设计,以满足平台的无间断服务需求。整个平台旨在将日志数据实时、完整、清晰地呈现在运维人员或用户面前,打造一个建的成、看得见、管得住、用得好的日志大数据分析平台。

    1  相关研究

    国内外很多研究机构和重点实验室均做了日志分析领域的相关研究,如莫斯科技术大学、清华大学智能技术与系统国家重点实验室、中国科学技术大学等。

    文献[3]分析了大数据的可能来源以及相关处理的问题,提出了一种基于Elasticsearch引擎和MapReduce模型的系统来解决用户验证的问题。文献[4]通过研究日志大数据分析,来提高搜索引擎查询信息的能力。文献[5]使用了Flume、Elasticsearch以及Kibana等技术手段,提出一种分布式的日志采集分析系统,论证了Flume的分布式的日志采集分析系统方案具有可行性。文献[6]基于ELK Stack建设系统,探索了其工作原理。文献[7]设计了一种基于云计算的Hadoop集群框架的Web日志分析平台,在集群中运用分布式算法处理海量的Web日志数据。文献[8]基于ELK技术栈,结合Kafka探索了智慧运维大数据分析平台的解决方案。5201FFD8-8CFA-400F-A3C5-4C10FFCBC5BA

    可见,在日志分析领域大多使用开源技术栈来进行,特别是以Elastic Stack为代表的开源日志解决方案,在高校校园网[9]、天文系统[10]、气象学[11]等均有相关的运用和实践,并且有着相对不错的应用效果。但是基于开源软件建设日志分析平台,对于特定业务场景下的日志分析工作,凸显出分析模型单一、配置不够灵活多样的问题,不能很好根据实际状况满足分析需求。本文在此基础之上,基于Elasticsearch进一步自主研发Nginx日志分析平台,满足Nginx日志分析的特定需求。

    2  基于Elasticsearch的日志分析平台

    2.1  架构设计

    本平台结合Nginx日志所存储的服务器物理环境多样化的实际情况,为保證平台的可靠性、可扩展性,结合多服务器采集的分布式平台架构的核心思想,分层设计了主要包括日志采集、日志清洗、日志存储、可视化平台等4大模块,架构如图1所示。

    2.2  日志实时采集

    日志实时采集是日志分析平台的基础工程,目前很多应用服务是分布在不同的物理或虚拟化服务器上的,怎样将这些分散的日志聚合起来,是需要解决的重要问题。本平台采用了Beats进行分布式部署,构建日志实时采集系统。

    Beats是各种单一采集器的集合,安装后被作为轻量型Agent。常用的Beats采集器有采集日志文件的Filebeat、采集服务器性能指标的Metricbeat、采集网络数据的PacketBeat等。

    本平台采用Filebeat采集Nginx日志数据。Filebeat工作时会启动一个或多个探测器,根据提前指定的文件路径找到日志文件。对于找到的每个日志文件,探测器会启动相应的harvester进程,进行日志文件的实时收集,并不断发送到Spooler中集合,最后将日志送往指定的区域。本平台中是把日志发送到Logstash中进一步处理,工作流程如图2所示。

    2.3  日志清洗

    日志清洗是通过切分数据、静态连接等方式,将日志数据转换为Key-Value的过程。本平台使用Logstash实现日志清洗,其在日志分析中充当porter,是数据源与数据存储之间的桥梁。

    Logstash接收从多种数据源头的输入,对数据进行分析、过滤、统一格式后输出到用户指定的储存库当中。Logstash工作时创建Pipeline,包括Input、Filter和Output完整的工作流程,其中Input用于从数据源获取数据,Filter用于处理数据,Output用于数据输出。

    本平台将分布式的Beats中的日志数据作为Input,通过Filter将日志数据进行清洗,最后Output将数据输出到Elasticsearch集群中进行存储。在这个过程中Filter是关键,一般使用Grok插件实现正则过滤,清洗原始日志,工作步骤如图3所示。

    2.4  日志存储

    Elasticsearch是一个在Lucene基础之上建立起来的分布式多用户能力的全文搜索引擎,可以集中进行数据存储,基于RESTful API,具有实时搜索、稳定、可靠、快速的特性,可满足日志大据分析的存储需求。

    Elasticsearch以集群方式部署,节点分为Master Node、Data Node、Client Node。Master Node负责集群当中的数据负载均衡和数据索引的创建、删除等;Data Node负责数据的存储、搜索和索引,负载压力较大,对服务器的配置要求相对较高;Client Node负责路由请求,对不同的请求进行分发、汇总的操作,本质上是负载均衡,以适合高并发的日志存储场景。

    本平台使用5台服务器建设Elasticsearch存储集群,服务器使用CentOS操作系统,建设1个Master Node、4个Data Node的以实现高容量、高可靠、高性能的存储,拓扑结构如图4所示。

    2.5  日志分析平台

    日志分析平台是日志大数据分析的最后一步,可视化呈现将数据库中抽象的数据转换成直观的图表,帮助用户看见重要信息,通过图表洞悉业务。

    本平台自主研发构建日志可视化分析平台。前端使用Vue可以极大的缩减开发周期,View UI是建立在Vue的开源UI库,使用这两个框架,进行快速开发迭代,给平台的界面带来了美观的直观感受,充分提升了用户体验。后端使用PHP框架Yii实现MVC设计模式,后端代码更简洁优雅,对关系型和非关系型数据库提供查询生成器,对RESTful API进行支持。本平台使用Yii框架与Elasticsearch集群交互,获取实时日志数据,实现秒级数据读取和前端渲染。Mariadb数据库主要作为数据缓冲池,并存储日志分析平台所需要的账号信息等。

    日志可视化分析平台,使用容器技术docker,分别部署Web服务集群和数据库服务集群。部署结构如图5所示。

    部署的关键脚本为:

    # pull docker images

    docker pull php:7.2.34-apache

    docker pull mariadb:10.7

    # create directory

    mkdir -p /data/qianniuhua-app/manage

    mkdir -p /data/qianniuhua-app/portal

    mkdir -p /data/qianniuhua-db

    mkdir -p /data/qianniuhua-conf

    # create network5201FFD8-8CFA-400F-A3C5-4C10FFCBC5BA

    docker network create -d bridge qianniuhua-network

    # run container

    docker run -d -p 3306:3306 --privileged=true --network qianniuhua-network -e MYSQL_ROOT_PASSWORD=qianniuhua@1q2w -v /data/qianniuhua-db/:/var/lib/mysql:rw --name qianniuhua-db mariadb:10.7

    docker run -d -p 80:80 --privileged=true --network qianniuhua-network -v /data/qianniuhua-app/:/var/www/html:rw -v /data/qianniuhua-conf/:/etc/apache2/sites-enabled:rw --name qianniuhua-app php:7.2.34-apache

    cp -r app/* /data/qianniuhua-app/

    cp -r conf/* /data/qianniuhua-conf/

    docker restart qianniuhua-app

    3  高可用設计

    3.1  日志采集清洗的高可用

    日志采集清洗要保证在服务器日志采集、日志推送、日志清洗过程的高效性和可靠性。

    本平台将Filebeat部署在不同目标服务器上,实现单台服务器内部的日志集中采集和主动推送。由于日志数据量大,为避免数据丢失,提高峰值处理能力,在日志推送过程中加入Kafka消息队列,对日志数据进行队列化管理直到日志被处理,防止丢失。在日志量激增时,Kafka采用的缓冲机制,可有效提高日志数据处理能力,保证高效性。

    部署多节点Logstash,避免因单点故障造成日志清洗功能不可用,实现数据处理的容灾。在Logstash集群中,对每一个Logstash配置允许多个输入源,用于处理Kafka中Filebeat推送的日志,对于输出也配置允许多个输出源,配合Elasticsearch集群,输出到不同的Data Node节点,实现数据的多复制、多备份,实现日志采集清洗的高可用。

    3.2  日志存储系统的高可用

    日志存储系统的高可用,就是对数据写入、存储、读取过程采用弹性伸缩和冗余机制,保证数据高效读写和数据多备份。

    本平台采用集群实现高可用,使用了多台物理服务器和物理存储作为部署的基础环境,在此基础上采用Kubernetes架构,部署主节点和工作节点,实现可以承载容器的云原生环境,通过docker部署Elasticsearch集群实现数据的冗余存储和备份。由于集群docker处在Kubernetes构建的云原生环境,因此具备弹性伸缩和修复能力。

    在Kubernetes的管理下,Elasticsearch集群可以保持在数据存储过程中,出现资源不够情况下自动创建容器,为Elasticsearch集群增添Data Node。Kubernetes主节点中关键组件Controller Manager是高可用的关键,提供了故障,愈功能,在工作节点上运行的容器,旦出现故障,Kubernetes会自动拉起一个新的容器,如果是工作节点自身的故障,会进行自动故障转移,保证在Kubernetes管理下的容器可以实现无间断服务,实现了日志存储系统的高可用。

    3.3  日志分析平台的高可用

    日志分析平台的高可用从本质上来讲,就是Web服务系统的高可用。

    本项目使用Docker集群部署2个日志分析平台,通过Nginx反向代理进行负载均衡的发布。使用Docker集群部署3个MariaDB数据库服务,通过主从同步方式建设MariaDB Cluster,实现数据库服务的读写分离,并保证数据一致性。部署结构如图6所示。

    3.4  安全加固

    本平台通过安全加固保证Web服务的稳定性,数据库的安全性。具体如下:

    (1)操作系统层面。利用防火墙和SELinux,限制访问关键性端口,配置仅保留一个入口供代理服务器访问。严格系统账户管理,禁止root用户远程登录,删除非必要用户。

    (2)业务服务层面。使用Nginx反向代理,将客户端直接到Web服务端的连接方式分离开,隐藏Web服务真实IP,提供安全保障。同时,代理服务器可作为应用层防火墙,为网站提供多种防护。

    (3)数据库层面。配置数据库到内部不常用端口,并限制其只对内部提供服务,外部禁止连接。

    (4)安全防护层面。使用Nmap定期对服务器和各项业务进行扫描,检测操作系统、云原生平台、容器、网站服务、数据库的安全性,扫描常见漏洞和弱口令,开展针对性的安全加固配置。

    4  应用成效

    4.1  日志分析平台的建设成效

    本平台的日志数据来源为河南中医药大学信息技术学院教学云平台,教学云平台目前提供有17套软件服务、68项网站服务,每日新增访问日志数据为2~5万条。本系统对教学云平台的业务服务日志进行分析,实现访问数据概览、业务运行实况、网站访问分析、资源访问分析和用户画像等。

    本平台访问时需要登录,如图7所示,输入账号密码并完成验证后登录。数据概览功能通过生成多种图表来展示日志数据,洞悉教学云平台实时运行服务状态,如图8所示。运行实况功能监控实时访问情况,每60 s刷新访问量曲线和访问详情列表,如图9所示。访客分析功能包括访客分布、访问方式等子功能,形成访客画像,洞察用户使用何种浏览器、操作系统浏览网站最多等,指导运维人员对服务器和业务针对性优化,提升服务质量,如图10所示。数据洞察功能包括盯屏分析、数据统计、数据透视的子功能,具体是统计并展示整体的日志数据指标,如图11所示。5201FFD8-8CFA-400F-A3C5-4C10FFCBC5BA

    4.2  Nginx日志分析模型

    本平臺结合Nginx原始日志字段,在数据清洗时引入GeoIP等数据,清洗后数据存储的字段共67个,关键字段含义如表1所示。

    清洗后JSON格式的日志数据的单条示例为:

    {

    “type”:
    “agwlog”,

    “content_type”:
    “-”,

    “client_addr”:
    “外网”,

    “request_method”:
    “GET”,

    “sent_http_connection”:
    “close”,

    “server_addr”:
    “211.69.33.161”,

    “args”:
    [

    “...”

    ],

    “@timestamp”:
    “2022-01-19T10:36:35.757Z”,

    “sent_http_location”:
    “-”,

    “nginx_version”:
    “1.14.1”,

    “sent_http_keep_alive”:
    “-”,

    “index_array”:
    [

    “...”

    ],

    “sent_http_last_modified”:
    “Tue, 11 Jan 2022 11:07:46 GMT”,

    “messagedata”:
    “topic”,

    “scheme”:
    “http”,

    “http_referer”:
    “-”,

    “ua_os”:
    “Windows 7”,

    “sent_http_transfer_encoding”:
    “chunked”,

    “sent_http_cache_control”:
    “-”,

    “server_name”:
    “it.hactcm.edu.cn”,

    “ua_br”:
    “IE 9”,

    “binary_remote_addr”:
    “tr\\x15\\x0A”,

    “content_length”:
    “-”,

    “request_uri”:
    “/”,

    “pid”:
    “14016”,

    “ua_se”:
    “direct”,

    “request_body”:
    “-”,

    “remote_user”:
    “-”,

    “remote_addr”:
    “116.114.21.10”,

    “server_port”:
    “80”,

    “query_string”:
    “-”,

    “limit_rate”:
    “0”,

    “realpath_root”:
    “/usr/share/nginx/html”,

    “http_x_forwarded_for”:
    “\”-\””,

    “sent_http_content_length”:
    “-”,

    “sent_http_content_type2”:
    [

    “...”

    ],

    “request_completion”:
    “OK”,

    “accept_length”:
    365,

    “http_post”:
    “-”,

    “n_host”:
    “it.hactcm.edu.cn”,

    “request”:
    “\”GET / HTTP/1.1\””,

    “document_root”:
    “/usr/share/nginx/html”,

    “sent_http_content_type”:
    [

    “...”

    ],

    “uri”:
    “/”,

    “request_body_file”:
    “-”,

    “server_protocol”:
    “HTTP/1.1”,

    “local_time”:
    “2022-01-19T10:36:48.000Z”,

    “server_name_ana_arr”:
    [

    “...”

    ],

    “status”:
    “200”,

    “sent_http_content_type_addr”:
    “html”,

    “local_time_arr”:
    {},

    “sent_http_content_type1”:
    “ text”,

    “body_bytQes_sent”:
    “ 378”,

    “http_cookie”:
    “”,

    “geoip”:
    {},

    “@version”:
    “1”,

    “http_x_forwarder_for”:
    “-”,

    “document_uri”:
    “/”,

    “ua_sb”:
    “PC端”,

    “remote_port”:
    “43400”,

    “server_name_ana”:
    “hactcm.edu.cn”,

    “body_bytes”:
    0,

    “hostname”:
    “it-nginx”,

    “http_user_agent”:
    “Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0”,5201FFD8-8CFA-400F-A3C5-4C10FFCBC5BA

    “_index”:
    “asc-ser-sevi-agw-agwlog-211069033161-2022.01.19”,

    “_type”:
    “_doc”,

    “_id”:
    “0szocX4BVDckT1ER6EIc”

    }

    本平台针对Web业务的访问特性和清洗后的字段,设计了体系的分析模型[12],形成了数据概览、运行实况、网站分析、访客分析、数据洞察六个分析模块,具体分析模型如表2所示。

    5  结  论

    本文基于Elasticsearch自主开发实现了Nginx日志分析平台,针对Nginx日志分析这一特定场景,满足了日志实时采集清洗、存储、可视化的需要,详细研究了日志分析平台构建的各个过程,定制化设计Nginx日志分析模型,洞察日志关键信息。在整体上为平台设计高可用,形成一套行之有效的Nginx日志分析平台解决方案。

    本文还有许多不足之处,如在分析过程中只是直接进行清洗后日志数据分析,没有进一步分析日志各字段深层联系,对日志的关联分析和智能分析不足;日志与业务数据关联没有建立起来,使得日志分析与业务的耦合度不够;预警消息的自动化推送尚未设计和实现。以上不足是今后需要重点研究和解决的问题。后期继续在本文之上,探索人工智能技术与运维场景有机结合,使用海量日志数据训练AIOps模型,打造一套智能监控运维解决方案。

    参考文献:

    [1] 胡庆宝,姜晓巍,石京燕,等.基于Elasticsearch的实时集群日志采集和分析系统实现 [J].科研信息化技术与应用,2016,7(3):13-18.

    [2] 姚攀,马玉鹏,徐春香.基于ELK的日志分析系统研究及应用 [J].计算机工程与设计,2018,39(7):2090-2095.

    [3] VOIT A,STANKUS A,MAGOMEDOV S,et al. Big Data Processing for Full-Text Search and Visualization with Elasticsearch [J].International Journal of Advanced Computer Science and Applications,2017,8(12):76-83.

    [4] 余慧佳,刘奕群,张敏,等.基于大规模日志分析的网络搜索引擎用户行为分析 [J].中文信息学报,2007,21(1):109-114.

    [5] 陈飞,艾中良.基于Flume的分布式日志采集分析系统设计与实现 [J].软件,2016,37(12):82-88.

    [6] 李祥池.基于ELK和Spark Streaming的日志分析系统设计与实现 [J].电子科学技术,2015,2(6):674-678.

    [7] 程苗,陈华平.基于Hadoop的Web日志挖掘 [J].计算机工程,2011,37(11):37-39.

    [8] 阮晓龙,贺路路.基于ELK+Kafka的智慧运维大数据分析平台研究与实现 [J].软件导刊,2020,19(6):150-154.

    [9] 周德荣.基于ELK的高校校园网日志平台研究 [J].赤峰学院学报(自然科学版),2019,35(10):45–47.

    [10] 陈亚杰,王锋,邓辉,等.ElasticSearch分布式搜索引擎在天文大数据检索中的应用研究 [J].天文学报,2016,57(2):241-251.

    [11] 王立柱,朱茜.实时日志分析系统在河南气象信息化中的应用 [J].气象水文海洋仪器,2018,35(3):65-69.

    [12] 阮晓龙,张浩林.基于ELK的Apache日志实时分析系统探索与分析模型研究 [J].电脑与信息技术,2020,28(1):54-57.

    作者简介:宋斌伟(1998—),男,汉族,河南驻马店人,本科在读,研究方向:日志大数据与AIOps;邓汪濤(2001—),男,汉族,河南开封人,本科在读,研究方向:面向互联网的软件开发;马骋犇(2001—),男,汉族,河南洛阳人,本科在读,研究方向:网络与信息系统的运维管理;通讯作者:阮晓龙(1981—),男,汉族,河南郑州人,副教授,经济学学士学位,工学学士学位,研究方向:智能运维计算机网络软件技术。

    收稿日期:2022-02-20

    基金项目:教育部2021年第一批产学合作协同育人项目(202101327018);河南省教育厅2021年大学生创新创业训练计划项目(S202110471018);河南中医药大学2021年苗圃工程(MP2021-118)5201FFD8-8CFA-400F-A3C5-4C10FFCBC5BA

    猜你喜欢 日志集群运维 高效管理日志文件用命令行就可以电脑爱好者(2021年21期)2021-11-04读扶贫日志诗选刊(2020年12期)2020-12-03基于GPS的电力运维轨迹定位系统信息技术时代·上旬刊(2019年2期)2019-09-10IT运维管理系统的设计及应用科学导报·科学工程与电力(2019年33期)2019-09-10雅皮的心情日志思维与智慧·上半月(2018年10期)2018-11-30雅皮的心情日志思维与智慧·上半月(2018年9期)2018-09-22勤快又呆萌的集群机器人知识就是力量(2017年2期)2017-01-21集群品牌是集群整体的品牌还是集群产品的品牌?商业研究(2016年8期)2016-12-20电子政务甲方运维管理的全生命周期信息化建设(2009年2期)2009-06-02

    • 生活居家
    • 情感人生
    • 社会财经
    • 文化
    • 职场
    • 教育
    • 电脑上网