热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

ELK6.x搭建大规模日志实时处理系统

背景 日志主要包括系统日志、应用程序日志和安全日志。系统运维和开发人员可以通过日志了解服务器软硬件信息、检查配置过程中的错误及错误发生的原因。经常分析日志可以了解服务器的负荷,性能安全性,从而及时
背景

日志主要包括系统日志、应用程序日志和安全日志。系统运维和开发人员可以通过日志了解服务器软硬件信息、检查配置过程中的错误及错误发生的原因。经常分析日志可以了解服务器的负荷,性能安全性,从而及时采取措施纠正错误。

通常,日志被分散的储存不同的设备上。如果你管理数十上百台服务器,你还在使用依次登录每台机器的传统方法查阅日志。这样是不是感觉很繁琐和效率低下。当务之急我们使用集中化的日志管理,例如:开源的syslog,将所有服务器上的日志收集汇总。

集中化管理日志后,日志的统计和检索又成为一件比较麻烦的事情,一般我们使用grep、awk和wc等Linux命令能实现检索和统计,但是对于要求更高的查询、排序和统计等要求和庞大的机器数量依然使用这样的方法难免有点力不从心。

开源实时日志分析ELK平台能够完美的解决我们上述的问题,ELK由ElasticSearch、Logstash和Kiabana三个开源工具组成。官方网站:https://www.elastic.co/products

ELK Stack 是软件集合 Elasticsearch、Logstash、Kibana 的简称,由这三个软件及其相关的组件可以打造大规模日志实时处理系统。

Elasticsearch 是一个基于 Lucene 的、支持全文索引的分布式存储和索引引擎,主要负责将日志索引并存储起来,方便业务方检索查询。

Logstash 是一个日志收集、过滤、转发的中间件,主要负责将各条业务线的各类日志统一收集、过滤后,转发给 Elasticsearch 进行下一步处理。

Kibana 是一个可视化工具,主要负责查询 Elasticsearch 的数据并以可视化的方式展现给业务方,比如各类饼图、直方图、区域图等。

所谓“大规模”,指的是 ELK Stack 组成的系统以一种水平扩展的方式支持每天收集、过滤、索引和存储 TB 规模以上的各类日志。

架构
ELK 6.x 搭建大规模日志实时处理系统

上图是 ELK Stack 实际应用中典型的一种架构,其中 Log4j 文件在具体的业务机器上,通过实时的方式获取增量的日志,并转发到 Kafka 消息系统暂存。

Kafka 以高吞吐量的特征,作为一个消息系统的角色,接收从 filebeat 收集转发过来的日志,通常以集群的形式提供服务。

然后,Logstash 从 Kafka 中获取日志,并通过 Input-Filter-Output 三个阶段的处理,更改或过滤日志,最终输出我们感兴趣的数据。通常,根据 Kafka 集群上分区(Partition)的数量,1:1 确定 Logstash 实例的数量,组成 Consumer Group 进行日志消费。

最后,Elasticsearch 存储并索引 Logstash 转发过来的数据,并通过 Kibana 查询和可视化展示,达到实时分析日志的目的。

Elasticsearch/Kibana 还可以通过安装 x-pack 插件实现扩展功能,比如监控 Elasticsearch 集群状态、数据访问授权等。

实现

1. log4j.properties文件配置

log4j.rootLogger=INFO,console,kafka

#log4j.logger.com.demo.kafka=DEBUG,kafka
# appender kafka
log4j.appender.kafka=kafka.producer.KafkaLog4jAppender
log4j.appender.kafka.topic=elk_log_topic
# multiple brokers are separated by comma ",".
log4j.appender.kafka.brokerList=10.108.4.203:9092,10.108.4.204:9092,10.108.4.205:9092
log4j.appender.kafka.compressiOnType=none
log4j.appender.kafka.syncSend=false
log4j.appender.kafka.layout=org.apache.log4j.PatternLayout
#log4j.appender.kafka.layout.COnversionPattern=%d [%-5p] [%t] - [%l] %m%n
log4j.appender.kafka.layout.COnversionPattern=[%d] [%p] [%t] %m%n

# appender console
log4j.appender.cOnsole=org.apache.log4j.ConsoleAppender
log4j.appender.console.target=System.out
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.COnversionPattern=[%d] [%p] [%t] %m%n
#log4j.appender.console.layout.COnversionPattern=%d [%-5p] [%t] - [%l] %m%n

2. Kafka

创建Topic:

[root@hadoop1 fc]# kafka-topics  --create --zookeeper 10.108.4.203:2181,10.108.4.204:2181,10.108.4.205:2181 --partitions 3 --replication-factor 2 --topic elk_log_topic
3. Logstash部署

添加配置文件logstash.conf:

input {
  kafka {
    codec => "line"
    topics_pattern => "elk_.*"
    bootstrap_servers => "10.108.4.203:9092,10.108.4.204:9092,10.108.4.205:9092"
    auto_offset_reset => "latest"
    group_id => "logstash_g1"
  }
}

filter {
}

output {
  elasticsearch {
    hosts => ["10.108.4.203:9200","10.108.4.204:9200","10.108.4.205:9200"]
    index => "logstash-%{type}-%{+YYYY.MM.dd}"
  }
}

配置文件主要分为三大部分: Input / Filter / Output,对应收集、过滤、转发三个阶段。显然,Input 阶段只需要指定 Kafka 集群相关信息即可,Output 阶段只需要指定 Elasticsearch 服务器相关的信息即可,比较复杂的是 Filter 过滤阶段。

启动:
[root@hadoop3 logstash-6.2.4]# bin/logstash -f config/logstash.conf
4. ES集群部署

Elasticsearch6.x集群部署
ES集群web可视化集群管理Cerebro

5. 配置并启动 Kibana 服务
server.host: "10.108.4.203"
server.name: "bi-Kibana"
elasticsearch.url: "http://hadoop3:9200/"
kibana.index: ".kibana"

启动 Kibana 进程:
nohup ./bin/kibana &

然后,就可以在浏览器访问 Kibana 了:

ELK 6.x 搭建大规模日志实时处理系统

推荐阅读
  • ES基本原理名词解释In-memorybuffer:ES内存缓冲区,新建的document写入的地方document:索引和搜索的 ... [详细]
  • 本文介绍了Python高级网络编程及TCP/IP协议簇的OSI七层模型。首先简单介绍了七层模型的各层及其封装解封装过程。然后讨论了程序开发中涉及到的网络通信内容,主要包括TCP协议、UDP协议和IPV4协议。最后还介绍了socket编程、聊天socket实现、远程执行命令、上传文件、socketserver及其源码分析等相关内容。 ... [详细]
  • Java序列化对象传给PHP的方法及原理解析
    本文介绍了Java序列化对象传给PHP的方法及原理,包括Java对象传递的方式、序列化的方式、PHP中的序列化用法介绍、Java是否能反序列化PHP的数据、Java序列化的原理以及解决Java序列化中的问题。同时还解释了序列化的概念和作用,以及代码执行序列化所需要的权限。最后指出,序列化会将对象实例的所有字段都进行序列化,使得数据能够被表示为实例的序列化数据,但只有能够解释该格式的代码才能够确定数据的内容。 ... [详细]
  • RouterOS 5.16软路由安装图解教程
    本文介绍了如何安装RouterOS 5.16软路由系统,包括系统要求、安装步骤和登录方式。同时提供了详细的图解教程,方便读者进行操作。 ... [详细]
  • 开发笔记:Python之路第一篇:初识Python
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了Python之路第一篇:初识Python相关的知识,希望对你有一定的参考价值。Python简介& ... [详细]
  • 无法打开install.wim怎么办
    运维|windows运维install.wim运维-windows运维空间留言网站源码,vscode标准代码,adamsubuntu,tomcat连接共享,sqlite软件基本操作 ... [详细]
  • OpenStackQ版本已经发布了一段时间了。今天,小编来总结一下OpenStackQ版本核心组件的各项主要新功能,再来汇总一下最近2年来OpenStackN、O、P、Q各版本核心 ... [详细]
  • Windows简单部署Exceptionless
    部署准备Elasticsearch、Exceptionless.API、Exceptionless.UI、URLRewrite、.NET运行时 1、安装ElasticSearch1 ... [详细]
  • Java工程师书单(初级,中级,高级)
    简介怎样学习才能从一名Java初级程序员成长为一名合格的架构师,或者说一名合格的架构师应该有怎样的技术知识体系,这是不仅一个刚刚踏入职场的初级程序员也是工作一两年之后开始迷茫的程序 ... [详细]
  • Elasticsearch:Pinyin分词器
    Elastic的Medcl提供了一种搜索Pinyin搜索的方法。拼音搜索在很多的应用场景中都有被用到。比如在百度搜索中,我们使用拼音就可以出现汉字:对于我们中国人来说,拼音搜索也是 ... [详细]
  • 解决虚拟机 /dev/mapper/centosroot爆满问题
    最近查看自己的虚拟机磁盘使用情况时,发现/dev/mapper/centos-r ... [详细]
  • Nexus3.0.0+Maven的使用(一)
    1、Nexus介绍Nexus是一个强大的Maven仓库管理器,它极大地简化了自己内部仓库的维护和外部仓库的访问。利用Nexus你可以只在一个地方就能够完全控制访问和部署在你所维护仓 ... [详细]
  • 图解redis的持久化存储机制RDB和AOF的原理和优缺点
    本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ... [详细]
  • k8s+springboot+Eureka如何平滑上下线服务
    k8s+springboot+Eureka如何平滑上下线服务目录服务平滑上下线-k8s版本目录“上篇介绍了springboot+Euraka服务平滑上下线的方式,有部分小伙伴反馈k ... [详细]
  • 简短的问题是:是否可以从远程服务器中提取日志(在日志文件中)并将其提取到 ... [详细]
author-avatar
用最优秀的你去面对爱你的人
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有