ELK日志分析系统,ELFK详解部署

发布时间:2023年12月25日

概念简述

ELK日志分析系统是一个开源的日志管理平台,它由三个主要组件组成,分别是Elasticsearch、Logstash和Kibana。这三个组件协同工作,提供了一个完整的解决方案,用于收集、存储、搜索、分析和可视化大规模的日志数据。以下是ELK日志分析系统的主要组件及其功能:

Elasticsearch:

  • 基于Lucene的分布式存储检索引擎,用于存储各类日志。

  • 通过RESTful Web接口进行通信,允许用户通过浏览器与Elasticsearch交互。

  • 实时、分布式、可扩展的搜索引擎,支持全文和结构化搜索。通常用于索引和搜索大容量的日志数据,也适用于其他类型的文档。

Kibana:

  • 与Elasticsearch一起部署,是Elasticsearch的数据可视化Dashboard。

  • 提供图形化的web界面,用于浏览、汇总、分析和搜索Elasticsearch日志数据,方便用户快速理解和利用数据。

Logstash:

  • 作为数据收集引擎,支持动态地从各种数据源收集数据。

  • 对数据进行过滤、分析、丰富和格式统一等操作,然后将处理后的数据存储到用户指定的位置,通常发送给Elasticsearch。

  • 使用Ruby语言编写,运行在Java虚拟机上,拥有强大的数据处理能力和插件功能。通常用于日志处理,其工作流程涉及输入(数据采集)、过滤(数据过滤)、输出(数据输出)的处理过程。

ELK的优势在于集成了这三个工具,形成一个完整的日志处理生态系统,使用户能够从数据采集、清洗、存储到可视化展示,完成对日志数据的全方位管理和利用。

工作流程:

  • Logstash负责采集、处理和转发日志数据。

  • Elasticsearch用于存储和索引处理后的数据,提供高效的检索和分析功能。

  • Kibana通过Web界面与Elasticsearch交互,提供用户友好的数据可视化和分析工具。

应用场景:

  • ELK日志分析系统广泛用于监控和分析应用程序日志、系统日志、安全事件等。

  • 它可以帮助系统管理员、开发人员和运维团队追踪问题、进行故障排除、监测系统性能,并提供实时的可视化报告。

为什么使用ELK呢?ELK 是一个广泛使用的开源工具组合,由 ElasticSearch、Logstash 和 Kibana 组成,它们合作来实现日志管理、分析和可视化。

  1. 集中式管理:当日志分散在不同设备上时,传统的查看方法变得低效且繁琐。ELK 的 Logstash 组件可以帮助集中收集来自各服务器的日志,并将它们统一存储在 ElasticSearch 中,简化了日志管理的复杂性。

  2. 分析和检索:在日志量庞大、服务器数量众多的情况下,使用传统的 grep、awk 或 Linux 命令来搜索和统计日志信息效率较低。ElasticSearch 提供了强大的搜索和查询功能,通过使用其灵活的查询语言,可以更高效地检索和分析日志数据。

  3. 分布式系统支持:对于大型分布式系统,问题的定位需要迅速而精准的信息定位。ELK 通过收集和索引分布在不同服务器上的日志数据,结合 Kibana 的可视化功能,使得定位问题的效率大大提高,能够快速定位到具体的服务器和服务模块。

综上所述,ELK 提供了集中式的日志管理、强大的搜索和分析功能,以及分布式系统支持,使得管理者和开发人员能够更高效地管理、分析和定位问题,尤其适用于大规模的分布式架构环境。


可以添加的其他组件

虽然ELK本身已经是一个强大的日志分析系统,但用户可以根据特定的需求和场景,添加其他组件来扩展其功能和增强性能。以下是一些常见的与ELK组合使用的其他组件:

Filebeat:

  • 轻量级的开源日志文件数据搜集器。

  • 安装在需要采集数据的客户端,可指定目录与日志格式。

  • 快速收集数据并发送给 Logstash 或直接发送给 Elasticsearch 存储。

  • 相对于运行在JVM上的Logstash,具有明显的性能优势,常用于EFLK(Elasticsearch + Filebeat + Logstash + Kibana)架构。

  1. Filebeat 结合 Logstash 的好处:
  • Logstash 具有基于磁盘的自适应缓冲系统,可减轻 Elasticsearch 持续写入数据的压力。

  • 可从其他数据源提取数据,发送到多个目的地,使用条件数据流逻辑组成更复杂的处理管道。

  1. 缓存/消息队列(如Redis、Kafka、RabbitMQ等):
  • 用于对高并发日志数据进行流量削峰和缓冲。

  • 缓冲可以一定程度地保护数据不丢失,同时对整个架构进行应用解耦。

  1. Fluentd:
  • 开源数据收集器,常用于EFK(Elasticsearch + Fluentd + Kibana)架构。

  • 相对于Logstash,Fluentd更易用、资源消耗更少、性能更高,成为Logstash的替代方案。

  • 在Kubernetes集群中通过DaemonSet运行,通过获取容器日志文件、过滤和转换日志数据,将数据传递到Elasticsearch集群。

完整日志系统基本特征

  1. 日志收集(Collection): 能够采集多种来源的日志数据,包括系统日志、应用程序日志、安全日志等。这确保系统管理员和开发人员能够获取全面的信息,从而更好地了解系统的运行状况。

  2. 日志传输(Transmission): 能够稳定地把日志数据解析、过滤并传输到存储系统。这确保了日志数据能够安全、及时地传递到日志存储的地方,以备后续的分析和查询。

  3. 日志存储(Storage): 能够有效地存储日志数据。这可能涉及到数据的归档、索引和压缩,以便在需要时能够快速检索和分析历史日志数据。

  4. 日志分析(Analysis): 提供对日志数据的分析功能,通常通过用户界面(UI)实现。这使得用户能够以直观的方式理解日志信息,发现潜在的问题或趋势,并作出相应的决策。

  5. 错误报告和警告(Alerting): 能够提供错误报告和监控机制,以便及时发现和响应系统中的问题。这包括对异常事件的警报、通知和报告,有助于预防潜在的故障和安全威胁。

一个典型的实现这些特征的日志系统是 ELK(Elasticsearch、Logstash、Kibana)堆栈。ELK 能够收集、传输、存储和分析大量的日志数据,提供了强大的搜索和可视化功能,同时支持实时监控和警报。其他类似的日志系统也存在,具体的选择取决于需求和系统架构。

原理

Logstash 部署:

  • 在需要收集日志的服务器上,部署 Logstash 实例。

  • 或者,可以选择将日志集中管理在一个服务器上,然后在该日志服务器上部署 Logstash。

Logstash 日志收集和格式化:

  • Logstash 负责从各个部署了 Logstash 的服务器上收集日志数据。

  • 收集到的原始日志数据经过 Logstash 的过滤和解析,以进行格式化。这包括对日志进行结构化、提取关键字段等操作。

数据输出到 Elasticsearch:

  • 格式化后的日志数据被输出到 Elasticsearch 群集中。

  • Logstash 与 Elasticsearch 之间使用 Elasticsearch 的 RESTful API 进行通信,将数据发送到 Elasticsearch 节点。

Elasticsearch 数据存储和索引:

  • Elasticsearch 接收 Logstash 发送的数据,负责对数据进行索引、存储和提供搜索功能。

  • 索引操作使得数据能够被高效地检索,同时 Elasticsearch 利用分布式架构提供高可用性和横向扩展性。

Kibana 可视化和分析:

  • Kibana 是 ELK 堆栈中的可视化工具,通过与 Elasticsearch 通信,查询和检索存储在 Elasticsearch 中的数据。

  • 用户可以通过 Kibana 创建仪表板、图表和报表,对日志数据进行实时监控、分析和可视化。

总体而言,ELK 的工作流程是将日志数据从源系统(服务器)经过 Logstash 过滤和格式化,输出到 Elasticsearch 进行存储和索引,最后通过 Kibana 进行可视化和分析。

整个 ELK 堆栈的工作流程如下:

  1. 数据收集: Logstash 从各种数据源中收集原始日志数据。

  2. 数据处理: Logstash 对原始日志数据进行过滤、解析和结构化。

  3. 数据传输: 处理后的日志数据通过网络传输到 Elasticsearch。

  4. 数据存储: Elasticsearch 存储并索引日志数据,使其能够被高效地检索。

  5. 可视化和分析: Kibana 提供用户界面,用户可以通过它可视化和分析 Elasticsearch 中的日志数据。

部署实例

环境准备

Node1节点(2C/4G):node1/192.168.41.32                    Elasticsearch  Kibana
Node2节点(2C/4G):node2/192.168.41.33                    Elasticsearch
Apache节点:apache/192.168.41.11                        Logstash  Apache
systemctl stop firewalld
setenforce 0

ELK Elasticsearch 集群部署(在Node1、Node2节点上操作)

配置域名解析:

  • 使用编辑器(vim)打开 "/etc/hosts" 文件。

  • 在文件中添加如下内容:

    192.168.41.32 node1
    192.168.41.33 node2
    

    这样做的目的是将主机名与相应的IP地址关联起来,以实现域名解析。

查看Java环境:

  • 使用命令 java -version 查看Java版本信息。

  • 如果没有安装Java,则使用命令 yum -y install java 安装Java。

部署 Elasticsearch 软件

安装 Elasticsearch RPM 包:

cd /opt
rpm -ivh elasticsearch-5.5.0.rpm   
  • 将 Elasticsearch 的 RPM 包(elasticsearch-5.5.0.rpm)上传到 /opt 目录。

  • 进入 /opt 目录。

  • 使用 rpm 命令安装 Elasticsearch。

加载系统服务:

systemctl daemon-reload    
systemctl enable elasticsearch.service
  • 使用 systemctl 命令重新加载系统服务。

  • 启用 Elasticsearch 服务,使其在系统启动时自动启动。

修改 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: ["no1de", "node2"]

grep -v "^#" /etc/elasticsearch/elasticsearch.yml
  • 备份原始的 Elasticsearch 配置文件。

  • 使用 vim 编辑器修改 Elasticsearch 配置文件。

    • 取消注释并设置集群名称为 "my-elk-cluster"。

    • 取消注释并设置节点名称,Node1 节点为 "node1",Node2 节点为 "node2"。

    • 取消注释并指定数据存放路径。

    • 取消注释并指定日志存放路径。

    • 取消注释并设置启动时不锁定内存。

    • 取消注释并设置监听地址为 "0.0.0.0",表示所有地址。

    • 取消注释并设置 HTTP 监听端口为 9200。

    • 取消注释并设置集群发现通过单播实现,指定要发现的节点为 "node1"、"node2"。

创建数据存放路径并授权:

mkdir -p /data/elk_data
chown elasticsearch:elasticsearch /data/elk_data/
  • 创建数据存放路径 /data/elk_data

  • 授权该路径给 Elasticsearch 用户。

启动 Elasticsearch 服务:

systemctl start elasticsearch.service
netstat -antp | grep 9200
  • 使用 systemctl 启动 Elasticsearch 服务。

  • 使用 netstat 命令检查端口 9200 是否被监听。

查看节点信息:

  • 通过浏览器访问 http://192.168.41.32:9200http://192.168.41.33:9200 查看 Node1 和 Node2 的信息。

  • 通过访问 http://192.168.41.32:9200/_cluster/health?prettyhttp://192.168.41.33:9200/_cluster/health?pretty 检查群集的健康情况,确保状态值为 "green" 表示节点健康运行。

  • 通过访问 http://192.168.41.32:9200/_cluster/state?pretty 检查群集状态信息。

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

关于 Elasticsearch-head 插件:

  • 建议安装 Elasticsearch-head 插件以更方便地管理群集。

前端代码使用 Vue.js(vus)、HTML 和 Node.js 管理工具 npm,以及后端代码使用 Java,使用 Maven 作为打包管理工具,支持生成 war 和 jar 包。

安装 Elasticsearch-head 插件

Elasticsearch 在 5.0 版本后,Elasticsearch-head 插件需要作为独立服务进行安装,需要使用npm工具(NodeJS的包管理工具)安装。

安装 Elasticsearch-head 需要提前安装好依赖软件 node 和 phantomjs。

node:是一个基于 Chrome V8 引擎的 JavaScript 运行环境。

phantomjs:是一个基于 webkit 的JavaScriptAPI,可以理解为一个隐形的浏览器,任何基于 webkit 浏览器做的事情,它都可以做到。

编译安装 Node.js:

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
  • 上传 Node.js 软件包 node-v8.2.1.tar.gz/opt 目录。

  • 安装编译 Node.js 所需的依赖软件(gcc、gcc-c++、make)。

  • 进入 Node.js 目录,配置、编译并安装 Node.js。

安装 PhantomJS:(前端的框架)

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
  • 上传 PhantomJS 软件包 phantomjs-2.1.1-linux-x86_64.tar.bz2/opt 目录。

  • 解压 PhantomJS 软件包到 /usr/local/src/ 目录。

  • 进入 PhantomJS 可执行文件目录,将 phantomjs 复制到 /usr/local/bin

安装 Elasticsearch-head 数据可视化工具:

cd /opt
tar zxvf elasticsearch-head.tar.gz -C /usr/local/src/
cd /usr/local/src/elasticsearch-head/
npm install
  • 上传 Elasticsearch-head 软件包 elasticsearch-head.tar.gz/opt 目录。

  • 解压 Elasticsearch-head 软件包到 /usr/local/src/elasticsearch-head/ 目录。

  • 进入 Elasticsearch-head 目录,使用 npm 安装依赖。

修改 Elasticsearch 主配置文件:

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

systemctl restart elasticsearch
  • 使用 vim 编辑器修改 Elasticsearch 配置文件,在末尾添加跨域访问的配置。

  • 重启 Elasticsearch 服务。

启动 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
  • 在解压后的 Elasticsearch-head 目录下启动服务,监听端口为 9100。

  • 使用 netstat 命令检查端口 9100 是否被监听。

通过 Elasticsearch-head 查看 Elasticsearch 信息:

  • 通过浏览器访问 http://192.168.41.32:9100/ 地址并连接到 Elasticsearch 群集。

  • 确保群集健康值为 green(绿色),表示群集很健康。

插入索引:

#将一条数据插入到索引 index-demo1 下的类型 test 中的文档 ID 为 1 的位置
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
}
对返回结果的解释:

_index:显示文档被索引到的索引名称为 index-demo。
_type:显示文档所属的类型为 test。
_id:显示文档的唯一标识符为 1。
_version:显示文档的版本号为 1。
result:显示请求的结果为 "created",表示文档被成功创建。
_shards:显示了有关分片的信息。
total:显示了总共有 2 个分片。
successful:显示成功的分片数量为 2。
failed:显示失败的分片数量为 0。
created:显示文档是否被创建,结果为 true,表示文档创建成功。
  • 使用 curl 命令插入一个测试索引,索引名称为 index-demo,类型为 test

  • 浏览器访问 http://192.168.41.32:9100/ 查看索引信息,可以看到索引默认被分片为 5 个,并且有一个副本。

  • 点击 "数据浏览" ,会发现在 Node1 上创建的索引为 index-demo,类型为 test 的相关信息。

ELK Logstash 部署(在 Apache 节点上操作)

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

安装Apache服务(httpd):

yum -y install httpd
systemctl start httpd
  • 使用 yum 包管理器安装Apache服务,命令为 yum -y install httpd

  • 启动Apache服务,命令为 systemctl start httpd

安装Java环境:

yum -y install java
java -version
  • 使用 yum 包管理器安装Java环境,命令为 yum -y install java

  • 使用 java -version 命令检查已安装的Java版本。

安装Logstash:

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

ln -s /usr/share/logstash/bin/logstash /usr/local/bin/
  • 将Logstash软件包(logstash-5.5.1.rpm)上传到 /opt 目录。

  • 进入 /opt 目录,命令为 cd /opt

  • 使用 rpm -ivh 安装Logstash软件包,命令为 rpm -ivh logstash-5.5.1.rpm

  • 启动Logstash服务,命令为 systemctl start logstash.service

  • 设置Logstash服务开机自启动,命令为 systemctl enable logstash.service

  • 创建Logstash可执行文件的符号链接,命令为 ln -s /usr/share/logstash/bin/logstash /usr/local/bin/

测试 Logstash

常用选项解释:

  • -f:指定Logstash的配置文件。根据配置文件配置 Logstash 的输入和输出流。

  • -e:从命令行中获取配置字符串。该字符串可以被当作 Logstash 的配置(如果是空,则默认使用 stdin 作为输入,stdout 作为输出)。

  • -t:测试配置文件是否正确,然后退出。

定义输入和输出流

#输入采用标准输入,输出采用标准输出(类似管道)
logstash -e 'input { stdin{} } output { stdout{} }'
......
www.baidu.com                                        #键入内容(标准输入)
                                                    #输出结果(标准输出)
www.sina.com.cn                                        #键入内容(标准输入)
                                                     #输出结果(标准输出)

//执行 ctrl+c 退出

Logstash的基本用法和交互式命令行模式下的示例。在这个例子中:

  • logstash -e 'input { stdin{} } output { stdout{} }':这个命令启动了Logstash,并使用标准输入作为输入,标准输出作为输出。它创建了一个类似管道的功能,接收输入并输出经过处理后的结果。

  • 接着你键入了 www.baidu.com 作为输入,Logstash对其进行处理并输出了时间戳、节点信息以及输入内容。

  • 随后你键入了 www.sina.com.cn,Logstash同样对其进行处理并输出了时间戳、节点信息和输入内容。

  • 最后通过执行 ctrl+c 中断了Logstash的运行,退出了这个交互式命令行模式。

#**使用 rubydebug 输出详细格式显示,codec 为一种编解码器**
logstash -e 'input { stdin{} } output { stdout{ codec=>rubydebug } }'

logstash -e 'input { stdin{} } output { elasticsearch { hosts=>["192.168.31.32:9200"] } }'

www.baidu.com                                        #键入内容(标准输入)
www.sina.com.cn                                        #键入内容(标准输入)
www.google.com                                        #键入内容(标准输入)

两个Logstash的命令行示例,分别演示了如何使用 rubydebug 编解码器将详细格式显示在标准输出中,以及如何将信息通过Logstash发送到Elasticsearch中。

  1. 使用 rubydebug 输出详细格式
  • logstash -e 'input { stdin{} } output { stdout{ codec=>rubydebug } }':这个命令启动Logstash,使用标准输入作为输入,将处理结果以详细的 rubydebug 格式输出到标准输出。

  • 输入了 www.baidu.com,Logstash对其进行处理,并以JSON格式输出了包含时间戳、版本、主机信息和消息的结果。

  1. 使用 Logstash 将信息写入 Elasticsearch 中
  • logstash -e 'input { stdin{} } output { elasticsearch { hosts=>["192.168.41.32:9200"] } }':这个命令启动Logstash,使用标准输入作为输入,并将处理结果发送到Elasticsearch中。

  • 输入了三个网址,但结果并没有直接显示在标准输出中,而是被发送到Elasticsearch中。

  1. 查看结果
  • 你可以通过浏览器访问 http://192.168.41.32:9100/ 来查看Elasticsearch中的索引信息和数据浏览。

定义 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配置文件

#修改 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.41.32:9200"]                    #指定 elasticsearch 服务器的地址和端口
        index =>"system-%{+YYYY.MM.dd}"                    #指定输出到 elasticsearch 的索引格式
    }
}
  • 设置Logstash读取系统日志文件/var/log/messages

  • 使用chmod命令确保Logstash有权限读取日志文件。

  • 创建一个新的Logstash配置文件system.conf并指定输入和输出配置。

重启Logstash

systemctl restart logstash 
  • 使用systemctl restart logstash命令重启Logstash服务。

查看结果

  • 通过浏览器访问指定的Elasticsearch地址(如http://192.168.41.12:9100/)可以查看到收集的索引信息。

ELK Kiabana 部署(在 Node1 节点上操作)

安装 Kibana:

#上传软件包 kibana-5.5.1-x86_64.rpm 到/opt目录
cd /opt
rpm -ivh kibana-5.5.1-x86_64.rpm
  • 进入 /opt 目录。

  • 使用 rpm 命令安装 Kibana 软件包 kibana-5.5.1-x86_64.rpm

设置 Kibana 的主配置文件:

vim /etc/kibana/kibana.yml
--2--取消注释,Kiabana 服务的默认监听端口为5601
server.port: 5601
--7--取消注释,设置 Kiabana 的监听地址,0.0.0.0代表所有地址
server.host: "0.0.0.0"
--21--取消注释,设置和 Elasticsearch 建立连接的地址和端口
elasticsearch.url: "http://192.168.41.32:9200" 
--30--取消注释,设置在 elasticsearch 中添加.kibana索引
kibana.index: ".kibana"
  • 使用 vim 编辑器打开 Kibana 的主配置文件 kibana.yml

  • 在第 2 行取消注释,设置 Kibana 服务的默认监听端口为 5601。

  • 在第 7 行取消注释,设置 Kibana 的监听地址为 "0.0.0.0",表示对所有地址开放。

  • 在第 21 行取消注释,设置连接 Elasticsearch 的地址和端口为 "http://192.168.41.32:9200"。

  • 在第 30 行取消注释,设置在 Elasticsearch 中添加 .kibana 索引。

启动 Kibana 服务:

systemctl start kibana.service
systemctl enable kibana.service

netstat -natp | grep 5601
  • 使用 systemctl 启动 Kibana 服务。

  • 使用 systemctl 启用 Kibana 服务,确保在系统启动时自动启动。

  • 使用 netstat 命令检查端口 5601 是否被监听。

验证 Kibana:

  • 在浏览器中访问 http://192.168.41.32:5601

  • 第一次登录需要添加一个 Elasticsearch 索引:

    • 在 "Index name or pattern" 中输入:system-*,这是之前配置的 Output 前缀。

    • 点击 "create" 按钮创建索引。

    • 点击 "Discover" 按钮查看图表信息和日志信息。

  • 数据展示可以分类显示,在 "Available Fields" 中选择 "host",然后点击 "add" 按钮,可以看到按照 "host" 筛选后的结果。

将 Apache 服务器的日志(访问的、错误的)添加到 Elasticsearch 并通过 Kibana 显示

编辑 Logstash 配置文件:

vim /etc/logstash/conf.d/apache_log.conf
  • 使用 vim 编辑器打开 Logstash 配置文件 apache_log.conf

  • 配置 Logstash 输入插件,将 Apache 服务器的访问日志 /etc/httpd/logs/access_log 和错误日志 /etc/httpd/logs/error_log 添加为输入。

  • 设置日志类型为 "access" 和 "error",并从文件开头读取日志。

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.41.32:9200"]
            index => "apache_access-%{+YYYY.MM.dd}"
        }
    }
    if [type] == "error" {
        elasticsearch {
            hosts => ["192.168.41.32:9200"]
            index => "apache_error-%{+YYYY.MM.dd}"
        }
    }
}

运行 Logstash:

  • 进入 Logstash 配置文件所在的目录。

  • 使用 Logstash 执行配置文件 apache_log.conf

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

检查索引是否创建:

  • 在浏览器中访问 http://192.168.41.32:9100,查看索引是否已经成功创建。

登录 Kibana 添加索引:

  • 在浏览器中访问 http://192.168.41.32:5601,登录 Kibana。

  • 点击 "Create Index Pattern" 按钮,添加索引。输入之前配置的 Output 前缀 apache_access-* 并单击“Create”按钮。在用相同的方法添加 apache_error-*索引。

  • 在 "Discover" 选项卡中选择刚添加的 apache_access-*apache_error-* 索引,可以查看相应的图表和日志信息。


ELFK(Filebeat+ELK 部署)

环境准备

Node1节点(2C/4G):node1/192.168.41.32                    Elasticsearch  Kibana
Node2节点(2C/4G):node2/192.168.41.33                    Elasticsearch
Apache节点:apache/192.168.41.11                        Logstash  Apache
Filebeat节点:filebeat/192.168.41.34                    Filebeat

Node1节点配置

安装Filebeat

1.安装 Filebeat
#上传软件包 filebeat-6.2.4-linux-x86_64.tar.gz 到/opt目录
tar zxvf filebeat-6.2.4-linux-x86_64.tar.gz
mv filebeat-6.2.4-linux-x86_64/ /usr/local/filebeat
  • 安装Filebeat软件包,并将其解压到/usr/local/filebeat目录。

  • 切换到Filebeat目录:cd /usr/local/filebeat

  • 编辑Filebeat主配置文件filebeat.yml,配置日志路径、字段和输出目的地。

filebeat.yml配置

2.设置 filebeat 的主配置文件
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.41.34

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

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

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

解释一下其中的部分:

  • filebeat.prospectors:

  • type: log: 指定Filebeat监视的是日志文件类型的数据。

  • enabled: true: 表示启用了这个prospector,即Filebeat会监视这些路径下的日志文件。

  • paths: 列出了要监视的日志文件路径。在这里,监视了/var/log/messages/var/log/*.log等通配符匹配的日志文件。

  • fields: 这个部分用于设置一些附加的字段,这些字段将被添加到输出中。

    • service_name: 设置了一个服务名称字段为filebeat

    • log_type: 定义了日志类型字段为log

    • service_id: 标识了服务ID为192.168.41.34

  • Elasticsearch output:

  • 这部分的配置已经全部被注释掉了,意味着Filebeat不会将数据直接发送到Elasticsearch。

  • Logstash output:

  • output.logstash: 这里指定了Filebeat要将数据发送到Logstash的配置。

    • hosts: 指定Logstash的IP和端口为192.168.41.11:5044,这是Logstash接收Beats数据的地址和端口。

最后的部分是启动Filebeat的命令./filebeat -e -c filebeat.yml,它会以命令行方式启动Filebeat,使用配置文件filebeat.yml来运行。这意味着Filebeat将开始监视指定的日志文件,并将数据发送到指定的Logstash地址和端口。

filebeat.yml配置说明:

  • filebeat.prospectors: 配置Filebeat监控的日志文件路径。

  • fields: 设置一些参数字段,这些字段将添加到输出中。

  • Elasticsearch输出:注释掉该部分。

  • Logstash输出:指定Logstash的IP和端口。

启动Filebeat

./filebeat -e -c filebeat.yml

Logstash节点配置

新建Logstash 配置文件

cd /etc/logstash/conf.d

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

解释其中的部分:

  • Input:

  • beats: 这是Logstash的输入插件,用于接收来自Beats系列产品(比如Filebeat)的数据。指定了Logstash监听的端口为5044,这是Beats默认发送数据的端口。

  • Output:

  • elasticsearch: 这部分指定了Logstash输出到Elasticsearch的设置。

    • hosts: 指定Elasticsearch的地址为192.168.41.32:9200,这是Elasticsearch的默认地址和端口。

    • index: 这是用于指定数据写入Elasticsearch时的索引模式。在这里,使用了%{[fields][service_name]}-%{+YYYY.MM.dd},它会根据Filebeat中指定的service_name字段和当前日期来创建索引,例如,如果service_namefilebeat,则索引会类似于filebeat-2023.12.25(根据当前日期)。

  • stdout:

  • 这部分是可选的,它会将接收到的数据以Ruby编程语言的调试格式输出到标准输出(通常是命令行窗口),以便开发和调试时查看日志。

这个配置文件告诉Logstash从5044端口接收Beats数据,然后将其输出到指定的Elasticsearch地址,并根据指定的索引模式进行索引。同时,还会在标准输出中以Ruby调试格式显示数据,以帮助调试Logstash配置。

启动logstash

#启动 logstash
logstash -f logstash.conf

浏览器测试

Kibana操作:

  • 在浏览器中访问http://192.168.41.32:5601,登录Kibana。

  • 在Kibana界面中,单击“Create Index Pattern”按钮,添加索引模式“filebeat-*”。

  • 单击“Create”按钮创建索引模式。

  • 单击“Discover”按钮,可以查看图表信息和日志信息。

在一个分布式环境中如何设置和配置日志收集和展示系统,使用Filebeat负责收集日志,Logstash负责处理和传输,Elasticsearch存储,而Kibana则用于可视化和查询。

文章来源:https://blog.csdn.net/qq_51545656/article/details/135200918
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。