赞
踩
目录
在前面课程中,已经详细介绍了 ELK 各个组件之间的关系,并且可以通过 ELK 收集简单 的系统日志, 其中只有 Logstash、Elasticsearch 和 Kibana 实例。这种架构非常简单并且有缺 陷。初学者可以搭建这个架构,了解 ELK 是如何工作的。本章基于 Docker + FKLEK 架构详细 介绍生产环境下的日志收集与分析。
日志采集的工具有很多种,如 Fluentd、Flume、Logstash、Betas 等等。引入 Filebeat 作 为日志搜集器,主要是为了解决 Logstash 开销大的问题。启动一个 Logstash 就需要消耗 500M 左右的内存,而 Filebeat 只需要 10 来 M 内存资源。常用的 ELK 日志采集方案中,大部 分的做法就是将所有节点的日志内容通过 Filebeat 送到 Kafka 消息队列, 再使用 Logstash 集 群读取消息队列内容, 根据配置文件进行过滤。然后将过滤之后的文件输送到 Elasticsearch 中, 通过 Kibana 去展示。
Filebeat 是 ELK 组件的新成员, 也是 Beat 成员之一。基于 Go 语言开发, 无任何依赖, 并且比 Logstash 更加轻量, 不会带来过高的资源占用, 非常适合安装在生产机器上。轻量意 味着简单,Filebeat 并没有集成和 Logstash 一样的正则处理功能, 而是将收集的日志原样输 出。
以下是 Filebeat 的工作流程:当开启 Filebeat 程序的时候,它会启动一个或多个检测进程 (prospectors) 找到指定的日志目录或文件。对于探测器找出的每一个日志文件,Filebeat 启 动读取进程(harvester)。每读取一个日志文件的新内容,便发送这些新的日志数据到处理程 序(spooler)。最后,Filebeat 会发送数据到指定的地点(比如 logstash、elasticserach)。
正是以上原因, 目前, Filebeat 已经完全替代了 Logstash 成为新一代的日志采集器。同 时,鉴于它的轻量、安全等特点,越来越多人开始使用它。
Kafka是Apache旗下的一款分布式流媒体平台,Kafka是一种高吞吐量、持久性、分布式的发布订阅的消息队列系统。 它最初由LinkedIn(领英)公司发布,使用Scala语言编写,与2010年12月份开源,成为Apache的顶级子项目。 它主要用于处理消费者规模网站中的所有动作流数据。动作指(网页浏览、搜索和其它用户行动所产生的数据)。
Kafka的增长是爆炸性的。财富500强企业中超过三分之一使用卡夫卡。这些公司包括十大旅游公司,十大银行中的七家,十大保险公司中的八家,十大电信公司中的九家,等等。LinkedIn,微软(Microsoft)和Netflix每天用Kafka处理一兆(1,000,000,000,000)的信息。Kafka用于实时数据流,收集大数据,或做实时分析(或两者兼而有之)。Kafka与内存中的微服务一起使用以提供耐用性,并且可以用于向CEP(复杂事件流式传输系统)和IoT / IFTTT式自动化系统提供事件。
Kafka通常用于实时流式数据体系结构以提供实时分析。由于Kafka是一个快速,可扩展,耐用和容错的发布、订阅消息传递系统,Kafka被用于JMS,RabbitMQ和AMQP可能因为数量和响应速度而不被考虑的情况。Kafka具有更高的吞吐量,可靠性和复制特性,使其适用于跟踪服务呼叫(跟踪每个呼叫)或跟踪传统MOM可能不被考虑的物联网传感器数据。
高吞吐量、低延迟:kafka每秒可以处理几十万条消息,它的延迟最低只有几毫秒,每个topic可以分多个partition, consumer group 对partition进行consume操作;
可扩展性:kafka集群支持热扩展;
持久性、可靠性:消息被持久化到本地磁盘,并且支持数据备份防止数据丢失;
容错性:允许集群中节点失败(若副本数量为n,则允许n-1个节点失败);
高并发:支持数千个客户端同时读写;
支持实时在线处理和离线处理:可以使用Storm这种实时流处理系统对消息进行实时进行处理,同时还可以使用Hadoop这种批处理系统进行离线处理;
当Kafka作为消息队列在ELK架构中使用时,其主要作用是确保日志数据的可靠传递、防止数据丢失,并提供解耦和水平扩展的优势。让我们详细解释这些方面:
可靠传递:
Kafka采用分布式的、持久性的消息日志,确保一旦消息被接收,它就会被保存,即使消费者当前不可用。
生产者将消息发布到Kafka主题(topic),而消费者则从主题中订阅消息。这种发布-订阅模型使得即使某个消费者不可用,消息仍然会被保存在Kafka中,等待消费者重新连接并处理。
防止数据丢失:
Kafka的持久性和日志复制机制确保即使在某个Kafka节点失败时,数据仍然可用。每个消息都会被复制到多个节点上,以确保可靠性。
生产者发送消息后,不会立即删除,而是经过一段时间(根据配置)才会删除。这种机制确保即使消费者处理消息的速度较慢,也不会因为消息被删除而导致数据丢失。
解耦:
使用Kafka可以实现生产者和消费者之间的解耦。生产者只关心将消息发送到Kafka,而不需要知道消息会被哪些消费者处理。
同样,消费者只需要从Kafka中订阅感兴趣的主题,而不需要知道消息是由哪个生产者生成的。这种解耦性使得系统的组件可以独立演化和扩展,降低了系统的复杂性。
水平扩展:
Kafka支持水平扩展,可以通过增加更多的节点来处理更多的消息流量。这种能力对于处理大规模日志数据非常重要。
当日志数据量增加时,可以简单地增加Kafka集群的节点数量,而无需对整个架构进行大规模调整。这使得系统更具弹性,能够适应不断增长的数据负载。
综合而言,Kafka作为消息队列在ELK架构中的作用不仅仅是简单的数据传递,它提供了一种可靠、持久、分布式的消息传递机制,使整个系统更具弹性、可伸缩性和容错性。这对于处理大规模的日志数据是非常关键的。
Logstash是一个用于日志和事件数据的开源数据收集引擎。它被设计用于收集、处理、转换和发送日志、事件和其他数据,以便将它们发送到不同的存储和分析系统。Logstash是Elastic公司(先前称为Elasticsearch公司)提供的ELK技术栈中的一个关键组件之一。
以下是Logstash的主要特点和功能:
数据收集:
Logstash支持从各种来源收集数据,包括日志文件、消息队列、网络流量等。
可以通过不同的输入插件配置Logstash,以适应不同数据源的格式和协议。
数据处理和转换:
Logstash提供强大的过滤和转换功能,可以对收集到的数据进行处理。
支持多种过滤器,如Grok(用于解析结构化文本数据)、Date插件(用于解析和标准化日期)、GeoIP(用于处理地理位置信息)等。
插件生态系统:
Logstash具有丰富的插件生态系统,包括输入插件、过滤器插件和输出插件,使其可以与各种系统和服务集成。
用户可以根据需要选择和配置不同的插件,以满足特定的数据收集和处理要求。
支持多种输出:
支持将处理后的数据发送到各种目标,包括Elasticsearch、Kafka、Amazon S3、Relational Databases等。
这使得Logstash可以集成到不同的存储和分析系统中,根据需求进行定制。
可扩展性:
Logstash是可扩展的,可以通过增加多个Logstash实例来处理大规模的数据流。
它还可以与其他ELK技术栈的组件(如Elasticsearch、Kibana)一起工作,构建完整的日志和事件处理解决方案。
日志和监控:
Logstash本身产生的日志和监控信息可以帮助用户追踪和调试数据收集和处理过程。
这有助于保持系统的健康状态,并及时发现和解决潜在的问题。
综合而言,Logstash在ELK技术栈中扮演着数据收集和处理的关键角色,为用户提供了一个灵活、可定制的工具,以满足不同环境中日志和事件数据的处理需求。
Elasticsearch(简称ES)是一个开源的分布式搜索和分析引擎,属于Elastic公司的产品之一。它被设计用于处理大规模数据集,提供实时的搜索、分析和可视化功能。Elasticsearch最初是作为Lucene搜索引擎的分布式扩展而创建的,但它不仅仅局限于搜索,还提供了强大的分析和聚合功能。
以下是Elasticsearch的主要特点和功能:
分布式架构:
Elasticsearch采用分布式架构,可以在多个节点上水平扩展。每个节点都存储数据的一部分,并能够响应用户的搜索和分析请求。
分布式架构使得Elasticsearch能够处理大规模的数据,同时提供高可用性和容错性。
实时搜索:
Elasticsearch提供实时搜索能力,用户可以立即看到索引中的新添加或修改的文档。
这使得Elasticsearch适用于需要快速、实时响应的应用场景,如日志分析、监控系统等。
多种数据类型支持:
Elasticsearch不仅支持全文搜索,还支持结构化数据和地理位置数据等多种数据类型的索引和查询。
这使得它适用于不同类型的应用,包括文档检索、日志分析、业务分析等。
强大的查询语言:
Elasticsearch使用JSON格式的查询语言,用户可以使用丰富的查询语法进行高级搜索。
支持全文搜索、范围查询、聚合等多种查询和分析功能。
聚合和分析:
Elasticsearch支持聚合框架,用户可以对数据进行聚合和分析,生成各种统计信息和可视化。
这使得Elasticsearch成为一个强大的分析引擎,适用于业务智能和数据可视化领域。
与Kibana的集成:
Elasticsearch通常与Kibana(一个开源的数据可视化工具)一起使用,形成ELK技术栈。
Kibana提供了用户友好的界面,允许用户创建仪表板、图表和报告,以便实时监控和分析Elasticsearch中的数据。
总体而言,Elasticsearch是一个全功能的搜索和分析引擎,广泛应用于各种场景,包括日志分析、企业搜索、业务智能等。其分布式、实时、多数据类型的特性使得它成为处理大规模数据集的强大工具。
Kibana是一个开源的数据可视化工具,通常与Elasticsearch一起使用,构成ELK技术栈(Elasticsearch、Logstash、Kibana)。Kibana提供了用户友好的界面,使用户能够以直观的方式探索、分析和可视化存储在Elasticsearch中的数据。
以下是Kibana的主要特点和功能:
数据可视化:
Kibana允许用户创建各种数据可视化,包括折线图、柱状图、饼图、地图等。这些可视化可以直观地展示存储在Elasticsearch中的数据。
用户可以根据需要在仪表板上组合多个可视化组件,以创建定制的数据仪表板。
实时数据监控:
Kibana提供实时的数据监控功能,用户可以实时监控数据的变化和趋势。这对于监控系统、日志分析等实时应用场景非常有用。
搜索和过滤:
Kibana允许用户使用强大的搜索和过滤功能,以准确定位感兴趣的数据。
用户可以通过简单的查询语言或使用高级查询DSL(Domain Specific Language)来过滤和检索数据。
仪表板和报告:
用户可以创建仪表板,将不同的可视化组合在一起,形成一个完整的监控和分析视图。
Kibana还支持生成报告,用户可以将仪表板中的数据导出为PDF或其他格式的文件,以便与团队或其他利益相关者分享分析结果。
插件生态系统:
Kibana具有丰富的插件生态系统,用户可以根据需要安装和使用各种插件,以扩展Kibana的功能。
插件可以提供额外的可视化类型、数据处理功能、安全功能等。
安全性和权限控制:
Kibana提供用户认证和授权机制,允许管理员配置不同用户的权限,以确保对敏感数据的访问受到控制。
这对于在多用户环境中共享和保护数据非常重要。
总体而言,Kibana为用户提供了一个强大而直观的工具,用于探索和可视化存储在Elasticsearch中的数据。通过与Elasticsearch的紧密集成,Kibana使用户能够轻松地创建个性化的数据仪表板,进行实时监控和深入分析。
操作系统 | 主机名 | 配置 | IP |
CentOS7.3.1611 | bogon | 4C8G | 192.168.207.131 |
- systemctl stop firewalld
- systemctl disable firewalld
- setenforce 0
- sed -i "s/.*SELINUX=.*/SELINUX=disabled/g" /etc/selinux/config
- yum install -y yum-utils device-mapper-persistent-data lvm2
-
- yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
-
- yum -y install docker-ce docker-ce-cli containerd.io
-
- # 启动服务
- systemctl start docker
- systemctl enable docker
- curl -L "https://github.com/docker/compose/releases/download/1.24.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
-
- chmod +x /usr/local/bin/docker-compose
- ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
-
- docker-compose --version
- # 设置es所需配置
- cat > /etc/security/limits.d/es.conf << EOF
- * soft nproc 655360
- * hard nproc 655360
- * soft nofile 655360
- * hard nofile 655360
- EOF
-
- cat >> /etc/sysctl.conf << EOF
- vm.max_map_count=655360
- EOF
- sysctl -p
需要资源包的同志们,可以评论区评论找我,无偿提供
- # 准备测试容器nginx所需目录
- mkdir /var/log/nginx
- chmod -R 777 /var/log/nginx
-
- [root@bogon ~]# tar zxvf FKLEK.tar.gz
- [root@bogon ~]# cd FKLEK/
- [root@bogon FKLEK]# docker-compose up --build -d
- [root@bogon FKLEK]# docker-compose ps
- Name Command State Ports
- -------------------------------------------------------------------------------------
- elasticsearch su - es /data/elasticsearc Up 0.0.0.0:9200->9200/tcp,:::920
- ... 0->9200/tcp, 0.0.0.0:9300->93
- 00/tcp,:::9300->9300/tcp
- filebeat /data/filebeat/filebeat-7. Up
- ...
- kafka /run.sh Up 0.0.0.0:9092->9092/tcp,:::909
- 2->9092/tcp
- kibana su - kibana /data/kibana/k Up 0.0.0.0:5601->5601/tcp,:::560
- ... 1->5601/tcp
- logstash /data/logstash/logstash-7. Up
- ...
- nginx /docker-entrypoint.sh ngin Up 0.0.0.0:80->80/tcp,:::80->80/
- ... tcp
备注:
启动ElasticSearch报错:
error updating geoip database
在elasticsearch.yml中添加如下配置:
ingest.geoip.downloader.enabled: false
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。