elk日志分析系统

文章目录

一,ELK日志分析系统简介

1.ELK 是一套开源工具,用于日志管理、搜索和数据分析。

三个核心组件:

  • Elasticsearch

是一个分布式搜索和分析引擎,能够高效地存储和检索大量数据。它适用于结构化和非结构化数据,擅长全文搜索和数据聚合。

  • Logstash

是用于数据收集和处理的工具,能够从多种数据源(如日志文件、数据库等)获取数据,对其进行解析、过滤,并将处理后的数据发送到 Elasticsearch 或其他目标系统。

  • Kibana

是一个可视化工具,提供用户界面,用于展示和分析存储在 Elasticsearch 中的数据。Kibana 支持创建交互式仪表盘和可视化图表,适用于实时监控和数据分析。

2.ELK 的应用场景 包括日志管理与监控实时数据分析安全事件监控

例如,ELK 常用于服务器、应用程序或网络设备的日志收集与管理。结合 Kibana,用户可以通过交互式的仪表盘实时分析系统日志或发现系统异常。 ELK 的优势 在于其扩展性强可以通过增加节点来处理大规模数据实时性 好,能够快速响应数据变化 ;同时具备强大的可视化能力,帮助用户深入理解和展示数据。 因此,ELK 堆栈被广泛用于企业日志管理和数据分析,是运维、开发和分析人员的常用工具。

  1. 日志包括系统、应用程序和安全日志,运维和开发人员通过分析日志可以了解服务器状态、排查错误并监控性能。单台服务器的日志可以用 grepawk 等工具进行分析,但在管理大量服务器时,逐台查看日志效率低下。集中化日志管理(如 syslog)可以汇总所有服务器的日志,简化管理。然而,面对复杂的查询和大规模日志,传统工具处理效率有限。特别是在分布式系统中,集中式日志系统有助于快速定位问题,提升故障排查效率。

二,ELK日志分析系统组成

1. Elasticsearch

Elasticsearch 是一个基于 Apache Lucene 构建的分布式搜索和分析引擎,专门用于处理大规模数据,能够快速执行全文搜索、结构化数据查询和分析任务。它广泛应用于日志分析、搜索引擎和实时数据分析等场景,凭借其出色的搜索性能和可扩展性,成为许多企业的重要工具。 Elasticsearch 能够将数据以 JSON (JavaScript Object Notation)格式存储,并通过 RESTful API 接口与外部系统交互。它通过分片(sharding)和副本(replication)技术来确保数据的高可用性和查询的高效性,尤其适用于需要高性能和高可靠性的系统。

1.1Elasticsearch 的主要特点:

  • 全文搜索

Elasticsearch最广为人知的功能是全文搜索。它能够对文本数据进行快速的全文索引和搜索,是实现复杂搜索功能的理想工具。

  • 实时数据分析

支持实时的数据更新和查询,适合用于日志分析、监控数据的实时处理等场景。

  • 分布式架构

Elasticsearch基于分布式架构设计,支持跨集群的数据存储和检索,使其在扩展性和性能上具有很大优势。

  • RESTful API

Elasticsearch使用简单的HTTP接口(RESTful API),支持通过各种语言和平台进行集成。(软件间沟通协议)

1.2 Elasticsearch 架构和主要组件

  • 集群(Cluster)

由一个或多个 Elasticsearch 节点组成,所有节点协同工作,负责共享数据和分担处理负载,以实现高性能和高可用性。

  • 节点(Node)

是运行 Elasticsearch 的单个实例。节点可根据角色分为不同类型,如主节点、数据节点等,负责存储数据、处理查询以及管理集群中的其他任务。

  • 索引(Index)

相当于传统数据库中的表,包含了某个数据集。每个索引都有唯一的名称,用于引用其中的文档集合。

  • 文档(Document)

是 Elasticsearch 中的最小数据单元,存储在索引中。每个文档以 JSON 格式表示,包含了该文档的所有字段和数据。

  • 分片(Shard)

一个索引可以分为多个分片,每个分片都是一个独立的 Lucene 索引。分片提供了数据的分布式存储和并行处理能力,从而提升了系统的可扩展性和性能。 (目的是快速处理大量数据)

  • 副本(Replica)

每个分片都可以有一个或多个副本。副本用于提高数据的冗余性和容错能力,确保在部分节点发生故障时数据不会丢失,同时也提升了查询性能。

1.3Elasticsearch使用范围

  • 日志和事件数据分析

Elasticsearch 非常适合处理大规模的日志和事件流数据,提供实时查询和分析能力。常与 Logstash 和 Kibana 结合,组成 ELK Stack,用于系统日志监控、故障排查等场景。(收集分析日志数据)

  • 全文搜索应用

广泛应用于电子商务网站中的产品搜索和社交媒体平台的内容搜索,支持复杂的查询条件和高效的文本检索。

  • 监控和报警系统

通过与 Kibana 等工具结合,Elasticsearch 能够提供数据的可视化和实时监控,适用于构建性能监控和自动报警系统。

  • 商业智能(BI)

支持复杂的数据查询和分析,帮助企业从大规模数据中提取有价值的洞察,优化决策流程,推动业务发展。

1.4Elasticsearch优缺点

优点

  • 高性能:得益于Lucene的底层支持,Elasticsearch在处理全文搜索和分析操作时性能非常优越。
  • 易扩展:其分布式架构设计使得集群可以随着数据量的增长而轻松扩展。
  • 灵活性强:支持多种数据类型和复杂查询语法,可以适应各种不同的应用需求。
  • 开放源代码:免费且活跃的社区支持,用户可以自由定制和扩展。

缺点

  • 资源消耗:作为一个内存密集型应用,Elasticsearch对硬件资源的要求较高,尤其在处理大量数据时。
  • 学习困难:虽然Elasticsearch易于集成,但对于新手来说,理解其复杂的查询DSL(Domain Specific Language)和架构可能需要一些时间。
  • 管理复杂性:在大型分布式集群环境中,管理和调优Elasticsearch需要相当的专业知识, nodejs 安装包(软件下载网站https://nodejs.org/en/download

总结

ES·就是一个超级快速的搜索和分析工具,能在海量数据中快速查找需要的数据,实时和分析需要查询查询的数据。很多公司企业都在用

2. Logstash

Logstash介绍 Logstash 是一个强大的数据收集引擎,能够从各种数据源动态地收集数据,对其进行过滤、分析、格式化等处理,然后将处理后的数据发送到存储或分析系统,如 Elasticsearch。Logstash 由 Ruby 语言编写,运行在 Java 虚拟机(JVM)上,具备数据传输、格式处理和格式化输出的能力。它还具备丰富的插件功能,特别适用于日志处理。

相对 input(数据采集) filter(数据过滤) output(数据输出)

2.1Logstash主要特点

  • 数据收集

Logstash 能够从多种数据源(如日志文件、数据库、消息队列等)收集数据。它支持各种输入插件,帮助从不同系统或服务中提取数据,适用于复杂的多源数据环境。

  • 数据处理

Logstash 使用过滤器插件对数据进行处理,可以执行数据清洗、格式转换、字段解析等操作。它支持正则表达式解析、日期格式转换、字段拆分和合并等丰富的数据处理功能,确保数据在进入目标系统前得到优化。

  • 数据输出

Logstash 能够将处理后的数据发送到多种输出目标,如 Elasticsearch、关系型数据库、消息队列或文件系统。输出插件的灵活性使 Logstash 易于与多种系统进行集成,适用于多种应用场景。

  • 可扩展性

Logstash 的架构基于插件系统,允许用户通过插件轻松扩展功能。输入插件、过滤器插件、输出插件和编码插件等都可以根据需要自定义和扩展,满足特定的数据处理需求。

  • 实时处理

Logstash 支持实时数据处理,能够在数据产生的瞬间进行收集和处理,适用于实时日志监控、数据流分析等需要快速响应的场景。

2.2Logstash使用范围

  • 日志收集和分析

从各种日志文件中提取数据(如系统日志、应用日志),然后将数据发送到 Elasticsearch 进行集中化分析和监控。

  • 数据转换

在数据进入目标存储之前,对其进行清理、格式化和标准化处理,确保数据的一致性和准确性。

  • 数据流整合

从多种来源获取数据,将其汇聚到一个统一的平台,进行进一步的分析和决策支持,帮助企业实现全面的数据整合与分析。

2.3Logstash数据收集组件

(1)Filebeat

Filebeat 是一种轻量级的开源日志文件数据收集器,通常安装在需要采集数据的客户端上。通过指定目录和日志格式,Filebeat 可以快速收集日志数据,并将其发送给 Logstash 进行处理或直接发送到Elasticsearch 进行存储。相比运行在 JVM 上的 Logstash,Filebeat 的性能表现更加优异,尤其适合高效日志采集任务。Filebeat 通常在 EFLK(Elasticsearch、Filebeat、Logstash、Kibana) 架构中广泛应用。


Filebeat 结合 Logstash 优点:

  • 自适应缓冲系统

通过 Logstash 的基于磁盘的自适应缓冲系统,能够吸收 Filebeat 传入的日志数据吞吐量,减轻 Elasticsearch 持续写入的压力,从而确保系统稳定运行。

  • 多数据源支持

Logstash 能从其他数据源(如数据库、S3 对象存储或消息传递队列)提取数据,扩展 Filebeat 采集范围。

  • 多目标输出

使用 Logstash,处理后的数据可以被发送到多个目的地,如 S3、HDFS(Hadoop 分布式文件系统)或直接写入文件系统,增加了数据流处理的灵活性。

  • 复杂的处理管道

Logstash 支持使用条件数据流逻辑构建更复杂的处理管道,允许根据数据内容动态调整处理方式,实现高度自定义的数据处理。

  • 缓存/消息队列(如 Redis、Kafka、RabbitMQ 等)

可以在高并发环境下对日志数据进行流量削峰和缓冲,有效减少系统负载并保护数据不丢失。同时,这种缓冲机制也能够实现架构解耦,增加系统的灵活性。

Logstash 是由 Java 编写的,因此运行 Logstash 需要依赖 Java 虚拟机(JVM)。JVM 运行时会消耗系统的内存和 CPU 资源,尤其是在处理大量数据或复杂的日志过滤和处理任务时,这种资源占用会更加明显。由于 Logstash 需要加载 JVM,启动时间较长,并且在处理高负载情况下,其内存消耗较大。 这也是为什么在资源受限的环境中(如容器或小型服务器)或对于轻量级日志收集任务,FilebeatFluentd 等轻量级的工具更具优势,因为它们不依赖 JVM,资源占用较少,性能表现更高效。 因此,Logstash 的强大功能和灵活性需要以更多的资源为代价,而在轻量级和高效资源使用场景下,可能会选择使用更轻的日志收集器如 Filebeat 或 Fluentd。

(2) Fluentd

Fluentd 是一个流行的开源数据收集器,作为 Logstash 的替代方案出现。与 Logstash 相比,Fluentd 更轻量,资源消耗少,性能更高,在数据处理上更加高效可靠,因而受到了企业的广泛欢迎。Fluentd 通常用于 EFK(Elasticsearch、Fluentd、Kibana) 架构中。

在 Kubernetes 集群中,Fluentd 常用于日志收集。通过 DaemonSet 运行 Fluentd,可以确保每个 Kubernetes 工作节点上都运行一个 Fluentd Pod,从而实现集群级的日志收集和处理。Fluentd 获取容器的日志文件,过滤和转换日志数据,然后将这些数据发送到 Elasticsearch 进行索引和存储。

Fluentd 的特点:

  • 资源消耗少

相比 Logstash,Fluentd 更为轻量,适合在资源受限的环境中使用,尤其在 Kubernetes 等容器化环境中表现优异。

  • 高效数据处理

Fluentd 能高效处理和转换数据,提供强大的插件支持,适用于需要实时和可靠数据处理的场景。

  • 容器化支持

通过 DaemonSet 方式运行 Fluentd,可以轻松实现 Kubernetes 集群日志的自动化收集与管理,非常适合现代云原生架构。

Fluentd 的灵活性和高效性使其成为企业级日志收集系统中越来越受欢迎的选择,特别是在需要处理海量容器日志的云平台中,它是 Logstash 的可靠替代方案。



总结

logstash类似一个多功能的数据搬运工具,从各种地方抓取数据,整理后送到需要的地方。在数据分析,监控和处理过程中非常好用,更方便的处理各种数据

3.Kibana

Kibana 是一款开源的数据可视化和分析工具,专门用于与 Elasticsearch 集成。它允许用户通过图形化界面对存储在 Elasticsearch 中的数据进行可视化、查询、分析和监控。Kibana 是 ELK/Elastic Stack 中的重要组成部分,通常与 Elasticsearch、Logstash 或 Filebeat 一起使用,用于日志分析、系统监控、业务数据可视化等场景。

3.1Kibana 功能

  • 数据可视化(Visualizations)

Kibana 提供丰富的可视化工具,可以通过折线图、饼图、柱状图、地图等方式展示数据。

用户可以根据需求自定义图表样式,以便更好地分析和解读数据。

支持创建动态可视化,根据过滤器和时间范围即时更新显示内容。

  • 仪表板(Dashboards)

Kibana 的仪表板是一种用来展示多个可视化图表的集合,可以通过仪表板同时监控多个数据来源或系统状态。

仪表板支持交互式过滤器,用户可以在不同时间范围、不同条件下实时查看数据。

  • 日志管理和搜索(Log Management & Discovery)

Kibana 的 "Discovery" 功能提供了对 Elasticsearch 中存储的原始数据的实时搜索与过滤功能。

用户可以根据条件快速查询和检索日志、数据记录等内容,并使用强大的过滤器和查询语言(KQL 或 Lucene)来精准获取所需信息。

  • 时间序列分析(Time Series Analytics)

使用 Kibana 的 "TSVB"(Time Series Visual Builder),用户可以进行复杂的时间序列分析。

它支持创建基于时间的数据图表,常用于监控系统性能、用户活动趋势等。

  • 报警与监控(Alerts & Monitoring)

Kibana 可以通过与 Elasticsearch 和 Logstash 的集成提供数据监控、报警通知功能。

用户可以设置阈值,当数据达到某个条件时,Kibana 可以自动触发报警并发送通知。

  • 安全和访问控制(Security & Access Control)

Kibana 提供基于角色的访问控制,管理员可以根据用户角色来设置权限,例如是否允许访问某些数据或仪表板。

Kibana 支持与外部认证系统(如 LDAP、OAuth)集成。

  • 机器学习(Machine Learning)

Kibana 提供了与 Elastic Stack 的机器学习功能集成,用户可以对数据进行异常检测、趋势预测和自动模式识别。

可以通过无监督的机器学习算法自动检测数据中的异常行为。

  • 地图和地理可视化(Maps & Geospatial Visualization)

Kibana 提供了强大的地理数据可视化功能,通过 Elastic Maps可以显示地理数据、绘制地图并叠加数据层。

支持动态过滤和聚合地理数据,适用于位置数据分析、物流、地理信息系统等领域。

  • Canvas 和报告(Canvas & Reporting)

Canvas: Kibana 的 Canvas 功能允许用户创建高度自定义的、视觉吸引力强的报告和展示。

Reporting: Kibana 支持自动生成报告,可以通过预定义模板或自定义的方式导出 PDF、CSV 报告。

  • 监控(Monitoring)

Kibana 提供 Elastic Stack 组件的监控功能,帮助用户监控 Elasticsearch 集群、Logstash 管道等系统的健康状况、性能和资源使用情况。

3.2 Kibana 的使用范围

  • 日志管理与分析

通过 Kibana 可以对大量的日志数据进行集中管理与分析,帮助开发者、运维工程师及时发现系统故障、监控应用程序状态。

  • 实时监控

运用 Kibana 的仪表板和报警功能,用户可以对系统的性能和服务进行实时监控,并在异常时及时采取行动。

  • 业务数据分析

Kibana 可以用于对商业数据(如销售数据、用户行为数据)进行深度分析,帮助企业决策。

  • 安全分析与威胁检测

通过集成 Elastic Security,Kibana 可以用来检测网络中的安全威胁,分析安全日志,进行入侵检测。

  • 机器学习与数据预测

Kibana 提供的机器学习功能可用于自动化的数据预测、趋势识别和异常检测,适用于金融预测、系统监控等场景。

3.3 Kibana 的工作原理

  • 数据存储在 Elasticsearch 中

Kibana 本身不存储数据,而是依赖 Elasticsearch 作为数据存储与查询的后台。所有的数据都通过 Elasticsearch 进行存储,无论是通过 LogstashBeats 或其他 API 等来源输入的日志、事件或业务数据,都会被存储在 Elasticsearch 中供 Kibana 使用。

  • 查询和分析

用户通过 Kibana 的用户界面执行数据查询时,Kibana 会将这些查询转换为针对 Elasticsearch 的请求。用户可以使用 Kibana Query Language (KQL)Lucene 查询语法进行复杂的搜索和过滤。Elasticsearch 收到请求后,会检索匹配的数据并将结果返回给 Kibana。

  • 数据可视化和展示

Elasticsearch 将查询结果返回给 Kibana 后,Kibana 通过其内置的可视化工具将数据转化为用户可理解的形式。Kibana 支持多种可视化形式,如折线图、柱状图、饼图、地图等,并允许用户创建和自定义仪表盘,将不同类型的数据展示在一个集成视图中,帮助用户深入分析和监控数据。

这种工作流程使 Kibana 成为 Elasticsearch 的强大可视化工具,帮助用户从复杂的海量数据中提取有价值的信息。

总结

kibana 是一个能把数据变成图表,让人更容易看懂数据的工具,无论是监控系统,查询日志,分析业务数据,Kibana都能解决

4.配置ELK

4.1环境部署

官方网站中文版 :https://www.elastic.co/cn/downloads/

配置与名称 IP 服务
Node1 节点 192.168.88.70 Elasticsearch(集群), Kibana
Node2 节点 192.168.88.80 Elasticsearch(集群)
Apache 节点 192.168.88.90 Logstash, Apache

4.2 环境准备

plain 复制代码
关闭防火墙与增强功能
systectl stop firewalld
setenforce 0 

更改主机名、配置域名解析、查看Java环境
Node1节点:hostnamectl set-hostname node1
Node2节点:hostnamectl set-hostname node2

主机名与IP解析
vim /etc/hosts
192.168.88.70 node1
192.168.88.80 node2

java安装
注:版本问题

java -version #检查有没有没有安装没有安装
yum -y install
java
openjdk version "1.8.0_131"
OpenJDK Runtime Environment (build 1.8.0_131-b12)
OpenJDK 64-Bit Server VM (build 25.131-b12, mixed mode)
也可使用 jdk

4.3Elasticsearch 集群配置

Node1、Node2节点

plain 复制代码
配置 Elasticsearch 软件
(1)安装elasticsearch---rpm包
#上传elasticsearch-6.6.1.rpm到/opt目录下 
cd /opt
rpm -ivh elasticsearch-6.6.1.rpm 

(2)加载系统服务
systemctl daemon-reload    
systemctl enable elasticsearch.service

(3)修改elasticsearch主配置文件
cp /etc/elasticsearch/elasticsearch.yml /etc/elasticsearch/elasticsearch.yml.bak
修改前先保存

vim /etc/elasticsearch/elasticsearch.yml

17行取消注释,指定集群名字
cluster.name: my-elk-cluster

23行取消注释,指定节点名字:Node1节点为node1,Node2节点为node2
node.name: node1

33行取消注释,指定数据存放路径
path.data: /data/elk_data

37行取消注释,指定日志存放路径
path.logs: /var/log/elasticsearch/

43行取消注释,改为在启动的时候不锁定内存
bootstrap.memory_lock: false

55行取消注释,设置监听地址,0.0.0.0代表所有地址
network.host: 0.0.0.0

59行取消注释,ES 服务的默认监听端口为9200
http.port: 9200

68行取消注释,集群发现通过单播实现,指定要发现的节点 node1、node2
discovery.zen.ping.unicast.hosts: ["node1", "node2"]

用grep命令取反查看下刚刚的配置
grep -v "^#" /etc/elasticsearch/elasticsearch.yml

(4)创建数据存放路径并授权
mkdir -p /data/elk_data
chown elasticsearch:elasticsearch /data/elk_data/

(5)启动elasticsearch是否成功开启
systemctl start elasticsearch.service
netstat -antp | grep 9200

(6)查看节点信息
浏览器访问  
http://192.168.88.70:9200  http://192.168.88.80:9200 查看节点 Node1、Node2 的信息。

浏览器访问
http://192.168.88.70:9200/_cluster/health?pretty  http://192.168.88.80:9200/_cluster/health?pretty查看群集的健康情况,可以看到 status 值为 green(绿色), 表示节点健康运行。


绿色:健康  数据和副本 全都没有问题
红色:数据都不完整
黄色:数据完整,但副本有问题

浏览器访问 http://192.168.88.70:9200/_cluster/state?pretty  检查群集状态信息。

#使用上述方式查看群集的状态对用户并不友好,可以通过安装 Elasticsearch-head 插件,可以更方便地管理群集。

plain 复制代码
安装 Elasticsearch-head 插件
Elasticsearch 在 5.0 版本后,Elasticsearch-head 插件需要作为独立服务进行安装,需要使用npm工具(NodeJS的包管理工具)安装。
安装 Elasticsearch-head 需要提前安装好依赖软件 node 和 phantomjs。
node:是一个基于 Chrome V8 引擎的 JavaScript 运行环境。
phantomjs:是一个基于 webkit 的JavaScriptAPI,可以理解为一个隐形的浏览器,任何基于 webkit 浏览器做的事情,它都可以做到。


java -jar weifuwu.jar/war  


(1)编译安装 node
#上传软件包 node-v8.2.1.tar.gz 到/opt
yum install gcc gcc-c++ make -y

cd /opt
tar zxvf node-v8.2.1.tar.gz

cd node-v8.2.1/
./configure
make && make install
假设机器核数4个可以make -j 4 && make install 

(2)安装 phantomjs(前端的框架)
#上传软件包 phantomjs-2.1.1-linux-x86_64.tar.bz2 到
cd /opt
tar jxvf phantomjs-2.1.1-linux-x86_64.tar.bz2 -C /usr/local/src/

cd /usr/local/src/phantomjs-2.1.1-linux-x86_64/bin
cp phantomjs /usr/local/bin
或者
cp /usr/local/src/phantomjs-2.1.1-linux-x86_64/bin/phantomjs /usr/local/bin/


(3)安装 Elasticsearch-head 数据可视化工具
#上传软件包 elasticsearch-head.tar.gz 到/opt
cd /opt
tar zxvf elasticsearch-head.tar.gz -C /usr/local/src/
cd /usr/local/src/elasticsearch-head/
npm install

(4)修改 Elasticsearch 主配置文件
vim /etc/elasticsearch/elasticsearch.yml
......
--末尾添加以下内容--
http.cors.enabled: true				#开启跨域访问支持,默认为 false
http.cors.allow-origin: "*"			#指定跨域访问允许的域名地址为所有

systemctl restart elasticsearch

(5)启动 elasticsearch-head 服务
#必须在解压后的 elasticsearch-head 目录下启动服务,进程会读取该目录下的 gruntfile.js 文件,否则可能启动失败。
cd /usr/local/src/elasticsearch-head/
npm run start &

> elasticsearch-head@0.0.0 start /usr/local/src/elasticsearch-head
> grunt server

Running "connect:server" (connect) task
Waiting forever...
Started connect web server on http://localhost:9100

#elasticsearch-head 监听的端口是 9100
netstat -natp |grep 9100

(6)通过 Elasticsearch-head 查看 Elasticsearch 信息
通过浏览器访问 http://192.168.10.13:9100/ 地址并连接群集。如果看到群集健康值为 green 绿色,代表群集很健康。

(7)插入索引
#通过命令插入一个测试索引,索引为 index-demo,类型为 test。

//输出结果如下:curl -X PUT 'localhost:9200/index-demo1/test/1?pretty&pretty' -H 'content-Type: application/json' -d '{"user":"zhangsan","mesg":"hello world"}'


{
"_index" : "index-demo",
"_type" : "test",
"_id" : "1",
"_version" : 1,
"result" : "created",
"_shards" : {
"total" : 2,
"successful" : 2,
"failed" : 0
},
"created" : true
}

浏览器访问 http://192.168.10.13:9100/ 查看索引信息,可以看见索引默认被分片5个,并且有一个副本。
点击"数据浏览",会发现在node1上创建的索引为 index-demo,类型为 test 的相关信息。

4.4Logstash 配置

在 Apache 节点

plain 复制代码
Logstash 一般部署在需要监控其日志的服务器。在本案例中,Logstash 部署在 Apache 服务器上,用于收集 Apache 服务器的日志信息并发送到 Elasticsearch。

1.更改主机名
hostnamectl set-hostname apache

2.安装Apahce服务(httpd)
yum -y install httpd
systemctl start httpd

3.安装Java环境
yum -y install java
java -version
版本够用不用装

4.安装logstash
#上传软件包 logstash-6.6.1.rpm 到/opt目录下
cd /opt
rpm -ivh logstash-6.6.1.rpm                           
systemctl start logstash.service                      
systemctl enable logstash.service

ln -s /usr/share/logstash/bin/logstash /usr/local/bin/

5.测试 Logstash
Logstash 命令常用选项:
-f:通过这个选项可以指定 Logstash 的配置文件,根据配置文件配置 Logstash 的输入和输出流。
-e:从命令行中获取,输入、输出后面跟着字符串,该字符串可以被当作 Logstash 的配置(如果是空,则默认使用 stdin 作为输入,stdout 作为输出)。
-t:测试配置文件是否正确,然后退出。

定义输入和输出流:
#输入采用标准输入,输出采用标准输出(类似管道)
logstash -e 'input { stdin{} } output { stdout{} }'
......
www.baidu.com										#键入内容(标准输入)
2020-12-22T03:58:47.799Z node1 www.baidu.com		#输出结果(标准输出)
www.sina.com.cn										#键入内容(标准输入)
2017-12-22T03:59:02.908Z node1 www.sina.com.cn		#输出结果(标准输出)

//执行 ctrl+c 退出

#使用 rubydebug 输出详细格式显示,codec 为一种编解码器
logstash -e 'input { stdin{} } output { stdout{ codec=>rubydebug } }'
......
www.baidu.com										#键入内容(标准输入)
{
    "@timestamp" => 2020-12-22T02:15:39.136Z,		#输出结果(处理后的结果)
      "@version" => "1",
          "host" => "apache",
       "message" => "www.baidu.com"
}

#使用 Logstash 将信息写入 Elasticsearch 中
logstash -e 'input { stdin{} } output { elasticsearch { hosts=>["192.168.10.13:9200"] } }'
			          输入     				输出	           对接
......
www.baidu.com										  #键入内容(标准输入)
www.sina.com.cn										#键入内容(标准输入)
www.google.com										#键入内容(标准输入)

//结果不在标准输出显示,而是发送至 Elasticsearch 中,可浏览器访问 http://192.168.10.13:9100/ 查看索引信息和数据浏览。
plain 复制代码
6.定义 logstash配置文件
Logstash 配置文件基本由三部分组成:input、output 以及 filter(可选,根据需要选择使用)。
input:表示从数据源采集数据,常见的数据源如Kafka、日志文件等
filter:表示数据处理层,包括对数据进行格式化处理、数据类型转换、数据过滤等,支持正则表达式
output:表示将Logstash收集的数据经由过滤器处理之后输出到Elasticsearch。

#格式如下:
input {...}
filter {...}
output {...}

#在每个部分中,也可以指定多个访问方式。例如,若要指定两个日志来源文件,则格式如下:
input {
	file { path =>"/var/log/messages" type =>"syslog"}
	file { path =>"/var/log/httpd/access.log" type =>"apache"}
}

#修改 Logstash 配置文件,让其收集系统日志/var/log/messages,并将其输出到 elasticsearch 中。
chmod +r /var/log/messages					          #让 Logstash 可以读取日志

vim /etc/logstash/conf.d/system.conf
input {
    file{
        path =>"/var/log/messages"						#指定要收集的日志的位置
        type =>"system"									      #自定义日志类型标识
        start_position =>"beginning"					#表示从开始处收集
    }
}
output {
    elasticsearch {										        #输出到 elasticsearch
        hosts => ["192.168.88.70:9200"]				#指定 elasticsearch 服务器的地址和端口
        index =>"system-%{+YYYY.MM.dd}"				#指定输出到 elasticsearch 的索引格式
    }
}

systemctl restart logstash 

浏览器访问 http://192.168.88.70:9100/ 查看索引信息

4.5Kiabana配置

Node1 节点

plain 复制代码
官方网站 :https://www.elastic.co/cn/downloads/kibana/
wget https://artifacts.elastic.co/downloads/kibana/kibana-6.6.1-linux-x86_64.tar.gz
1.安装 Kiabana
#上传软件包 kibana-6.6.1-x86_64.rpm 到/opt目录
cd /opt
rpm -ivh kibana-6.6.1-x86_64.rpm

2.设置 Kibana 的主配置文件
vim /etc/kibana/kibana.yml
--2--取消注释,Kiabana 服务的默认监听端口为5601
server.port: 5601
--7--取消注释,设置 Kiabana 的监听地址,0.0.0.0代表所有地址
server.host: "0.0.0.0"
--28--取消注释,设置和 Elasticsearch 建立连接的地址和端口
elasticsearch.hosts: ["http://192.168.10.13:9200"] 
--37--取消注释,设置在 elasticsearch 中添加.kibana索引
kibana.index: ".kibana"

3.启动 Kibana 服务
systemctl start kibana.service
systemctl enable kibana.service

netstat -natp | grep 5601

4.验证 Kibana
浏览器访问 http://192.168.88.70:5601
第一次登录需要添加一个 Elasticsearch 索引:
Index Patterns
create index Patterns
//输入:system-*			#在索引名中输入之前配置的 Output 前缀"system"

然后Next step(下一步)
Time Filter field name
@timestarmp

单击 "create index Patterns" 按钮创建,
单击 "Discover" 按钮可查看图表信息及日志信息。
数据展示可以分类显示,在"Available Fields"中的"host",
然后单击 "add"按钮,可以看到按照"host"筛选后的结果



后面再次创建的步骤
Management
index Patterns
单击 "create index Patterns" 按钮创建

plain 复制代码
5.将 Apache 服务器的日志(访问的、错误的)添加到 Elasticsearch 并通过 Kibana 显示
vim /etc/logstash/conf.d/apache_log.conf
input {
    file{
        path => "/etc/httpd/logs/access_log"
        type => "access"
        start_position => "beginning"
    }
    file{
        path => "/etc/httpd/logs/error_log"
        type => "error"
        start_position => "beginning"
    }
}
output {
    if [type] == "access" {
        elasticsearch {
            hosts => ["192.168.88.70:9200"]
            index => "apache_access-%{+YYYY.MM.dd}"
        }
    }
	if [type] == "error" {
        elasticsearch {
            hosts => ["192.168.88.70:9200"]
            index => "apache_error-%{+YYYY.MM.dd}"
        }
    }
}

cd /etc/logstash/conf.d/
/usr/share/logstash/bin/logstash -f apache_log.conf

浏览器访问 http://192.168.88.70:9100 查看索引是否创建

浏览器访问 http://192.168.88.70:5601 登录 Kibana,



单击"Create Index Pattern"按钮添加索引,
在索引名中输入之前配置的 Output 前缀 apache_access-*,
并单击"Create"按钮。在用相同的方法添加 apache_error-*索引。
选择"Discover"选项卡,在中间下拉列表中选择刚添加的 apache_access-* 、apache_error-* 索引,
可以查看相应的图表及日志信息。

这里只有error说明整个日志被收集处理发送到es了,从流程开始分析为什么没有access日志

发现没有access日志,且 /etc/logstash/conf.d/apache_log.conf里的access配置错误,修改后 systemctl restart logstash然后/usr/share/logstash/bin/logstash -f apache_log.conf

打开192.168.88.90刷新几次

5.Filebeat+ELK配置

5.1环境部署

配置与名称 IP 服务
Node1节点(2C/4G) node1/192.168.88.70 Elasticsearch(集群) Kibana
Node2节点(2C/4G) node2/192.168.88.80 Elasticsearch(集群)
Apache节点 apache/192.168.88.90 Logstash Apache
Filebeat节点 filebeat/192.168.88.60 Filebeat

filebeat 下载网址https://www.elastic.co/cn/downloads/beats/filebeat

5.2Filebeat配置

Filebeat节点

plain 复制代码
1.关闭防火墙,增强功能
systemctl stop firewalld
setenforce 0 

2.改主机名
hostnamectl set-hostname fileat


3.安装 Filebeat 两种
(1) 二进制解包
#上传软件包 filebeat-6.6.1-linux-x86_64.tar.gz 到/opt目录
tar zxvf filebeat-6.6.1-linux-x86_64.tar.gz
mv filebeat-6.2.4-linux-x86_64/ /usr/local/filebeat

(2) 使用rpm包安装 上传包
rpm -ivh filebeat-6.6.1-x86_64.rpm 


4.设置 filebeat 的主配置文件
(1) 如果使用第一种方式按照如下配置
cd /usr/local/filebeat

vim filebeat.yml
filebeat.prospectors:
- type: log             #指定 log 类型,从日志文件中读取消息
  enabled: true         #开启
  paths:
    - /var/log/messages #指定监控的日志文件
    - /var/log/*.log
  fields:               #可以使用 fields 配置选项设置一些参数字段添加到 output 中
    service_name: filebeat
    log_type: log
    service_id: 192.168.88.60

--------------Elasticsearch output-------------------
(全部注释掉)

----------------Logstash output---------------------
output.logstash:
  hosts: ["192.168.88.90:5044"]      #指定 logstash 的 IP 和端口

#启动 filebeat
./filebeat -e -c filebeat.yml


(2) rpm包方式安装    配置都一样
配置前先保存
cp /etc/filebeat/filebeat.yml /etc/filebeat/filebeat.yml.bak

vim /etc/filebeat/filebeat.yml

Apache节点

plain 复制代码
5.在 Logstash 组件所在节点上新建一个 Logstash 配置文件
cd /etc/logstash/conf.d

vim logstash.conf
input {
    beats {
        port => "5044"
    }
}
output {
    elasticsearch {
        hosts => ["192.168.88.70:9200"]
        index => "%{[fields][service_name]}-%{+YYYY.MM.dd}"
    }
    stdout {
        codec => rubydebug
    }
}

#启动 logstash
logstash -f logstash.conf
plain 复制代码
6.浏览器访问 http://192.168.88.70:5601 登录 Kibana,

先点击Management
"Index Pattern"
"Create Index Pattern"按钮创建
选择输入"Index Pattern"
然后Next step
Time Filter field name
@timestarmp

单击 "Discover" 按钮可查看图表信息及日志信息。
按钮添加索引"filebeat-*"

之前的配置有问题,变量格式不对,第二次成功了


总结

** Filebeat + Elasticsearch + Kibana 是一个入门级架构,适合处理简单的日志数据。Filebeat 作为轻量级日志采集工具,负责收集日志并通过接口输出。随后,Logstash 对数据进行处理,并将其发送至 Elasticsearch,最终通过 Kibana 进行可视化展示,适用于网页端的日志分析。 **

相关推荐
必叫你大败而归1 天前
ELK日志分析系统
elk
確定饿的猫1 天前
ELK环境部署
elk
YCyjs1 天前
ELK 企业级日志分析系统
elk
码农郁郁久居人下1 天前
ELK 企业级日志分析系统
elk
史努比.3 天前
ELK 企业级日志分析系统
elk
檀越剑指大厂3 天前
【Elasticsearch系列四】ELK Stack
大数据·elk·elasticsearch
2401_840192273 天前
ELFK日志分析平台,架构和通信
elk·elasticsearch·架构
ygqygq26 天前
ElK 8 收集 Nginx 日志
nginx·elk
纪佰伦9 天前
ELK在Linux服务器下使用docker快速部署(超详细)
linux·服务器·elk