ELK、ELKF企业级日志分析系统介绍

前言

随着企业级应用系统日益复杂,随之产生的海量日志数据。传统的日志管理和分析手段,难以做到高效检索、实时监控以及深度挖掘潜在价值。在此背景下,ELK日志分析系统应运而生。"Elastic" 是指 Elastic 公司所提供的一系列与搜索、日志分析和数据可视化相关的产品。提到 ELKF 时,指的是 Elasticsearch、Logstash、Kibana 和 Filebeat 这四个工具的组合,ELKF 提供了一个完整的解决方案,用于收集、存储、搜索、分析和可视化各种类型的数据,尤其适用于日志管理和监控。本文将从 ELK 日志分析系统的原理、架构及其在实践中的应用做相关介绍。

目录

[一、ELK 简介](#一、ELK 简介)

[1. 概述](#1. 概述)

[2. 组件](#2. 组件)

[2.1 ElasticSearch](#2.1 ElasticSearch)

[2.2 Logstash](#2.2 Logstash)

[2.3 Kiabana](#2.3 Kiabana)

[3. ELK架构](#3. ELK架构)

[4. 完整日志系统基本特征](#4. 完整日志系统基本特征)

[5. ELK 的工作原理](#5. ELK 的工作原理)

[二、ELK 部署](#二、ELK 部署)

[1. 环境准备](#1. 环境准备)

[2. ELK Elasticsearch 集群部署](#2. ELK Elasticsearch 集群部署)

[3. 安装 Elasticsearch-head 插件](#3. 安装 Elasticsearch-head 插件)​​​​​​​

[4. ELK Logstash 部署](#4. ELK Logstash 部署)

[5. 收集系统日志 /var/log/messages](#5. 收集系统日志 /var/log/messages)

[6. ELK Kiabana 部署](#6. ELK Kiabana 部署)

[三、ELKF 部署](#三、ELKF 部署)

[1. 环境准备](#1. 环境准备)

[2. 安装 Filebeat](#2. 安装 Filebeat)

[3. 配置 systemd 管理 Filebeat](#3. 配置 systemd 管理 Filebeat)

[4. 设置 filebeat 的主配置文件](#4. 设置 filebeat 的主配置文件)

[5. 启动 filebeat](#5. 启动 filebeat)

[6. 在 Logstash 组件所在节点上新建一个 Logstash 配置文件](#6. 在 Logstash 组件所在节点上新建一个 Logstash 配置文件)

[7. 浏览器访问 http://192.168.190.100:5601](#7. 浏览器访问 http://192.168.190.100:5601)


一、ELK 简介

1. 概述

ELK 和 ElasticStack 实质上指的是同一个概念,ELK 平台是一套完整的日志集中处理方案。其拥有三个组件:ElasticSearch、Logstash 和 Kiabana 配合使用组成一个功能全面的数据平台。另外,当需要处理大量实时数据的场景,ELK 与 Kafka 的集成可以提供一个强大的实时数据收集、存储、分析和可视化解决方案。

2. 组件

2.1 ElasticSearch

提供了一个分布式多用户能力的全文搜索和分析引擎,可以把日志集中化管理。Elasticsearch 是用 Java 开发的,可通过 RESTful Web 接口,让用户可以通过浏览器与 Elasticsearch 通信。

下面是标准的 HTTP 方法与 RESTful 资源管理之间的映射关系:

  • GET:获取文档
  • POST:创建
  • PUT:更新
  • DELTET:删除
  • GET:搜索值

核心概念:

  • 接近实时:一旦索引操作完成(通常在几秒钟内),文档就能几乎立刻被搜索到
  • 集群:是由一个或多个节点组成的
  • 节点:一个独立运行实例,它可以存储数据、参与文档索引和搜索过程
  • 索引:索引(库)------>类型(表)------>文档(记录),可以理解为一种数据库的特性,是一个大的文档的集合
  • 分片:允许将索引切分成多个分片,可以在集群的不同节点上独立分布和操作
  • 副本:允许为索引的每个分片创建副本,可以分摊读请求、有冗余能力

2.2 Logstash

由 Ruby 语言编写,运行在 Java 虚拟机(JVM)上,是一款强大的数据处理工具。其主要功能是收集日志,输入采集的数据进行加工(如过滤、改写等)以及数据的输出。相关概念有:input(数据采集)、filter(数据过滤)和 output(数据输出)。

主要主件有:

  • Shipper:日志收集者,监控微服务日志
  • Indexer:日志存储者
  • Broker:连接多个收集者,指向 Indexer
  • Search and Storage:搜索和存储
  • Web Interface:展示可视化数据界面

由于 Logstash 运行在 jvm 虚拟机环境中,比较占用 cpu、内存资源,可以添加其它组件直接在操作系统运行:

  • Filebeat:轻量级的开源日志文件数据搜集器,可以直接部署在目标主机上,实时读取日志文件并将数据发送到Elasticsearch、Logstash或其他输出目的地。
  • Fluentd:是一个流行的开源数据收集器,可以收集来自各种数据源的日志数据,并将其规范化后输出到多种存储或分析系统中,如Elasticsearch、MongoDB、S3等。
  • 缓存/消息队列(redis、kafka、RabbitMQ等):可以对高并发日志数据进行流量削峰和缓冲,这样的缓冲可以一定程度的保护数据不丢失,还可以对整个架构进行应用解耦。

2.3 Kiabana

针对 Elasticsearch 的开源分析及可视化平台,搜索查看索引中的数据。Kibana 通常与 Elasticsearch 一起部署,对接 Es 接口。

3. ELK架构

① 日志数据首先由应用程序产生。这些日志可能是应用程序运行时生成的标准输出、错误输出,或者是通过API直接输出的日志事件。例如,Web服务器、数据库服务、微服务等各类应用都会产生日志信息

② Kafka、Redis 可以起到缓冲的作用,暂时存储本地的日志数据直到成功发送出去,避免数据丢失;同时具有抗高并发能力,存储速度快等特点

③ Logstash 接收到来自缓冲区的日志数据后,进入数据解析区。在这里,Logstash通过配置的输入插件(Input Plugins)读取数据,然后经过过滤插件(Filter Plugins)进行解析和转换,最后输出数据(Output)

④ 经过解析和处理后的日志数据,最终被发送到Elasticsearch中存储。Elasticsearch 是一个分布式搜索引擎和分析引擎,它将数据按照索引(index)组织,并将索引进一步划分为多个分片(shards)以实现水平扩展和高可用性

⑤ Kibana 是一个强大的可视化工具,它连接到 Elasticsearch,可以从存储在 Elasticsearch 中的日志数据构建实时仪表板和报表。开发人员和运维团队可以通过 Kibana 的搜索和可视化功能

4. 完整日志系统基本特征

  • 收集:能够采集多种来源的日志数据
  • 传输:能够稳定的把日志数据解析过滤并传输到存储系统
  • 存储:存储日志数据
  • 分析:支持 UI 分析
  • 警告:能够提供错误报告,监控机制

5. ELK 的工作原理

① 在所有需要收集日志的服务器上部署Logstash;或者先将日志进行集中化管理在日志服务器上,在日志服务器上部署 Logstash

② Logstash 收集日志,将日志格式化并输出到 Elasticsearch 群集中

③ Elasticsearch 对格式化后的数据进行索引和存储

④ Kibana 从 ES 群集中查询数据生成图表,并进行前端数据的展示

总结:logstash 作为日志搜集器,从数据源采集数据,并对数据进行过滤,格式化处理,然后交由Elasticsearch 存储,kibana 对日志进行可视化处理。

二、ELK 部署

1. 环境准备

|----------|-----------------|----------------------|
| 节点名 | ip地址 | 安装软件 |
| node1 | 192.168.190.100 | elasticsearch、kibana |
| node2 | 192.168.190.101 | elasticsearch |
| logstash | 192.168.190.102 | apache、logstash |

bash 复制代码
systemctl stop firewalld.service
setenforce 0
# 关闭防火墙、核心防护功能
node1节点:hostnamectl set-hostname node1
node2节点:hostnamectl set-hostname node2
logstash节点:hostnamectl set-hostname logstash
# 修改主机名,方便查看
echo 192.168.190.100 node1 >> /etc/hosts
echo 192.168.190.101 node2 >> /etc/hosts
echo 192.168.190.102 logstash >> /etc/hosts
# 编辑域名解析,制作映射
[root@node1 ~]# java -version
openjdk version "1.8.0_131"
[root@node2 ~]# java -version
openjdk version "1.8.0_131"
# 显示 Java 运行时环境版本信息,如果没有:yum -y install java

2. ELK Elasticsearch 集群部署

实际生产环境中常常会部署更多的节点来增强冗余能力、高可用性、负载均衡、数据扩容等,这里部署两台(在Node1、Node2节点上操作)。

① 安装 elasticsearch rpm 包

bash 复制代码
分别在node1、node2节点上操作:
[root@node1 opt]# ls
elasticsearch-5.5.0.rpm  # 这里使用 elasticsearch-5.5.0.rpm 包
[root@node1 opt]# rpm -ivh elasticsearch-5.5.0.rpm

[root@node1 opt]# systemctl daemon-reload           
[root@node1 opt]# systemctl enable elasticsearch.service
# 加载系统服务

② 修改 elasticsearch 主配置文件

bash 复制代码
[root@node1 ~]# rpm -qc elasticsearch
/etc/elasticsearch/elasticsearch.yml
[root@node1 ~]# cp /etc/elasticsearch/elasticsearch.yml /etc/elasticsearch/elasticsearch.yml.bak
# 备份配置文件
[root@node1 ~]# vim /etc/elasticsearch/elasticsearch.yml
 17 cluster.name: my-application # 取消注释,指定集群名字,名字可以按需修改
 23 node.name: node1             # 取消注释,指定节点名字:node1、Node2
 33 path.data: /data/elk_data    # 取消注释,指定数据存放路径
 37 path.logs: /var/log/elasticsearch/ # 取消注释,指定日志存放路径
 43 bootstrap.memory_lock: false # 取消注释,改为在启动的时候不锁定内存
 55 network.host: 0.0.0.0        # 取消注释,设置监听地址,0.0.0.0代表所有地址
 59 http.port: 9200              # 取消注释,ES 服务的默认监听端口为9200
 68 discovery.zen.ping.unicast.hosts: ["node1", "node2"] # 取消注释,集群发现通过单播实现,指定要发现的节点 node1、node2

[root@node1 ~]# grep -v "^#" /etc/elasticsearch/elasticsearch.yml # 显示去除了注释的配置内容

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

bash 复制代码
[root@node1 ~]# mkdir -p /data/elk_data
[root@node1 ~]# chown elasticsearch:elasticsearch /data/elk_data/

④ 启动 elasticsearch 是否成功开启

bash 复制代码
[root@node1 ~]# systemctl start elasticsearch.service
[root@node1 ~]# netstat -antp | grep 9200  # 启动的有点慢需要等一会
tcp6       0      0 :::9200                 :::*                    LISTEN      2541/java

⑤ 查看节点信息

浏览器访问 http://192.168.190.100:9200http://192.168.190.101:9200 查看节点 Node1、Node2 的信息:

浏览器访问查看群集的健康情况

status 值:

  • green(绿色):表示节点健康运行
  • 绿色:健康 数据和副本 全都没有问题
  • 红色:数据都不完整
  • 黄色:数据完整,但副本有问题

浏览器访问 http://192.168.190.100:9200/_cluster/state?pretty 可以检查群集状态信息。使用上述方式查看群集的状态对用户并不友好,可以通过安装 Elasticsearch-head 插件,可以更方便地管理群集。

3. 安装 Elasticsearch-head 插件

安装 Elasticsearch-head 插件的主要作用是为 Elasticsearch 提供一个可视化的 Web 界面,方便用户管理和监控 Elasticsearch 集群。

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

  • node:是一个基于 Chrome V8 引擎的 JavaScript 运行环境
  • phantomjs:是一个基于 webkit 的JavaScriptAPI,可以理解为一个隐形的浏览器,任何基于 webkit 浏览器做的事情,它都可以做到

① 编译安装 node

bash 复制代码
[root@node1 opt]# yum install gcc gcc-c++ make -y  # 安装编译工具
[root@node1 opt]# ls
elasticsearch-5.5.0.rpm  node-v8.2.1.tar.gz        # 准备软件包 node-v8.2.1.tar.gz
[root@node1 opt]# tar zxvf node-v8.2.1.tar.gz
[root@node1 opt]# cd node-v8.2.1/
[root@node1 node-v8.2.1]# ./configure
[root@node1 node-v8.2.1]# make && make install

② 安装 phantomjs(前端的框架)

bash 复制代码
[root@node1 opt]# ls
phantomjs-2.1.1-linux-x86_64.tar.bz2  # 准备软件包
[root@node1 opt]# tar jxvf phantomjs-2.1.1-linux-x86_64.tar.bz2 -C /usr/local/src/
[root@node1 opt]# cd /usr/local/src/phantomjs-2.1.1-linux-x86_64/bin
[root@node1 bin]# cp phantomjs /usr/local/bin

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

bash 复制代码
[root@node1 opt]# tar zxvf elasticsearch-head.tar.gz -C /usr/local/src/
[root@node1 opt]# cd /usr/local/src/elasticsearch-head/
[root@node1 elasticsearch-head]# npm install

④ 修改 Elasticsearch 主配置文件

bash 复制代码
[root@node1 ~]# vim /etc/elasticsearch/elasticsearch.yml
http.cors.enabled: true      # 开启跨域访问支持,默认为 false
http.cors.allow-origin: "*"  # 指定跨域访问允许的域名地址为所有 
[root@node1 ~]# systemctl restart elasticsearch

⑤ 启动 Elasticsearch-head 服务

必须在解压后的 elasticsearch-head 目录下启动服务,进程会读取该目录下的 gruntfile.js 文件,否则可能启动失败。

bash 复制代码
[root@node1 ~]# cd /usr/local/src/elasticsearch-head/
[root@node1 elasticsearch-head]# npm run start &
[1] 85478
[root@node1 elasticsearch-head]# 
> 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 查看 Elasticsearch 信息

通过浏览器访问 http://192.168.190.100:9100/ 地址并连接群集。如果看到群集健康值为 green 绿色,代表群集很健康。

bash 复制代码
[root@node1 ~]# lsof -i:9100  # 列出所有打开指定TCP或UDP端口(这里是9100)的进程信息
COMMAND   PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
grunt   85488 root   12u  IPv4  98596      0t0  TCP *:jetdirect (LISTEN)

⑦ 插入索引

bash 复制代码
[root@node1 ~]# curl -X PUT 'localhost:9200/index-demo1/test/1?pretty&pretty' -H 'content-Type: application/json' -d '{"user":"zhangsan","mesg":"hello world"}'
{
  "_index" : "index-demo1",
  "_type" : "test",
  "_id" : "1",
  "_version" : 1,
  "result" : "created",
  "_shards" : {
    "total" : 2,
    "successful" : 2,
    "failed" : 0
  },
  "created" : true
}

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

4. ELK Logstash 部署

Logstash 一般部署在需要监控其日志的服务器。

① 安装Apahce服务(httpd)

bash 复制代码
[root@logstash ~]# yum -y install httpd
[root@logstash ~]# systemctl start httpd.service

② 检查安装 Java 环境

bash 复制代码
[root@logstash ~]# java -version
openjdk version "1.8.0_131"
# 显示 Java 运行时环境版本信息,如果没有:yum -y install java

③ 安装 logstash

bash 复制代码
[root@logstash opt]# ls
logstash-5.5.1.rpm       # 准备 logstash-5.5.1.rpm 包
[root@logstash opt]# rpm -ivh logstash-5.5.1.rpm
[root@logstash opt]# systemctl start --now enable logstash.service
[root@logstash opt]# ln -s /usr/share/logstash/bin/logstash /usr/local/bin/

④ 测试 Logstash

Logstash 命令常用选项:

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

定义输入和输出流:输入采用标准输入,输出采用标准输出(类似管道)

bash 复制代码
[root@logstash ~]# logstash -e 'input { stdin{} } output { stdout{} }'
www.baidu.com                                    # 键入内容(标准输入)
2024-04-10T13:43:30.574Z logstash www.baidu.com  # 输出结果(标准输出)
www.sina.com.cn       
2024-04-10T13:44:18.445Z logstash www.sina.com.cn

使用 rubydebug 输出详细格式显示,codec 为一种编解码器:

bash 复制代码
[root@logstash ~]# logstash -e 'input { stdin{} } output { stdout{ codec=>rubydebug } }'
www.baidu.com                                  # 键入内容(标准输入)
{
    "@timestamp" => 2024-04-10T13:48:25.820Z,  # 输出结果(处理后的结果)
      "@version" => "1",
          "host" => "logstash",
       "message" => "www.baidu.com"
}

使用 Logstash 将信息写入 Elasticsearch 中:

bash 复制代码
[root@logstash ~]# logstash -e 'input { stdin{} } output { elasticsearch { hosts=>["192.168.190.100:9200"] } }'
www.baidu.com               # 键入内容(标准输入)

结果不在标准输出显示,而是发送至 Elasticsearch 中,可浏览器访问 http://192.168.190.100:9100/ 查看索引信息和数据浏览:

5. 收集系统日志 /var/log/messages

① 定义 logstash 配置文件

bash 复制代码
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 中

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

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

6. ELK Kiabana 部署

用于可视化和管理Elasticsearch中数据的开源分析和可视化平台。Kibana提供了丰富的图表、仪表盘和数据可视化工具,使用户能够以直观的方式探索和分析数据。(在 Node1 节点上操作)

① 安装 Kiabana

bash 复制代码
[root@node1 opt]# ls
kibana-5.5.1-x86_64.rpm   # 安装包 
[root@node1 opt]# rpm -ivh kibana-5.5.1-x86_64.rpm

② 设置 Kibana 的主配置文件

bash 复制代码
[root@node1 opt]# vim /etc/kibana/kibana.yml
  2 server.port: 5601       # 取消注释,Kiabana 服务的默认监听端口为5601
  7 server.host: "0.0.0.0"  # 取消注释,设置 Kiabana 的监听地址,0.0.0.0代表所有地址
 21 elasticsearch.url: "http://192.168.190.100:9200" # 取消注释,设置和 Elasticsearch 建立连接的地址和端口
 30 kibana.index: ".kibana" # 取消注释,设置在 elasticsearch 中添加.kibana索引

③ 启动 Kibana 服务

bash 复制代码
[root@node1 opt]# systemctl start --now enable kibana.service
[root@node1 opt]# netstat -natp | grep 5601
tcp        0      0 0.0.0.0:5601            0.0.0.0:*               LISTEN      2808/node 

④ 验证 Kibana

浏览器访问 http://192.168.190.100:5601

bash 复制代码
第一次登录需要添加一个 Elasticsearch 索引:
Index name or pattern
//输入:system-*			#在索引名中输入之前配置的 Output 前缀"system"

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

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

bash 复制代码
[root@logstash ~]# 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.190.100:9200"]
            index => "apache_access-%{+YYYY.MM.dd}"
        }
    }
	if [type] == "error" {
        elasticsearch {
            hosts => ["192.168.190.100:9200"]
            index => "apache_error-%{+YYYY.MM.dd}"
        }
    }
}

[root@logstash ~]# cd /etc/logstash/conf.d/
[root@logstash conf.d]# /usr/share/logstash/bin/logstash -f apache_log.conf

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

浏览器访问 http://192.168.190.100:5601 登录 Kibana,单击"Create Index Pattern"按钮添加索引, 在索引名中输入之前配置的 Output 前缀 apache_access-*,并单击"Create"按钮。在用相同的方法添加 apache_error-*索引。

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

三、ELKF 部署

ELKF 指的是 Elasticsearch、Logstash、Kibana 和 Filebeat,Filebeat 是 Elastic 公司推出的一款轻量级的数据采集器,用于将日志文件和其他数据发送到 Elasticsearch 或 Logstash。下载地址:下载 Elastic 产品 | Elastic

1. 环境准备

|----------|-----------------|----------------------|
| 节点名 | ip地址 | 安装软件 |
| node1 | 192.168.190.100 | elasticsearch、kibana |
| node2 | 192.168.190.101 | elasticsearch |
| logstash | 192.168.190.102 | apache、logstash |
| filebeat | 192.168.190.103 | filebeat |

在 192.168.190.103,filebeat 节点操作:

bash 复制代码
[root@localhost ~]# hostnamectl set-hostname filebeat # 修改节点主机名称
[root@filebeat ~]# systemctl stop firewalld.service 
[root@filebeat ~]# setenforce 0

2. 安装 Filebeat

bash 复制代码
[root@filebeat opt]# wget https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-6.2.4-linux-x86_64.tar.gz
[root@filebeat opt]# ls
filebeat-6.2.4-linux-x86_64.tar.gz         # 准备安装包
[root@filebeat opt]# tar zxvf filebeat-6.2.4-linux-x86_64.tar.gz
[root@filebeat opt]# mv filebeat-6.2.4-linux-x86_64/ /usr/local/filebeat

3. 配置 systemd 管理 Filebeat

bash 复制代码
[root@filebeat ~]# vim /usr/lib/systemd/system/filebeat.service
[Unit]                         # 定义了系统单元的基本信息
Description=Filebeat sends log files to Logstash or directly to Elasticsearch.
# 描述了服务的作用,这里是Filebeat用于发送日志文件到Logstash或直接到Elasticsearch
Wants=network‐online.target
After=network‐online.target    # 启动这个服务之前需要先启动 network-online.target
[Service]                      # 定义了服务的运行参数
User=root
Group=root
Environment="BEAT_CONFIG_OPTS=-c /usr/local/filebeat/filebeat.yml"
# 设置了环境变量 BEAT_CONFIG_OPTS,该变量被设置为 -c /usr/local/filebeat/filebeat.yml,这样Filebeat将使用指定的配置文件
ExecStart=/usr/local/filebeat/filebeat $BEAT_CONFIG_OPTS
# 定义了服务启动时执行的命令,这里是启动Filebeat并传递 BEAT_CONFIG_OPTS 环境变量
Restart=always                 # 指定了服务在发生错误时应该自动重启
[Install]                      # 定义了服务的安装相关信息
WantedBy=multi‐user.target     # 指定了当系统以多用户模式启动时,这个服务应该被启动

4. 设置 filebeat 的主配置文件

bash 复制代码
 15 filebeat.prospectors:
 21 - type: log                      # 指定 log 类型,从日志文件中读取消息
 24   enabled: true
 27   paths:
 28     - /var/log/messages          # 指定监控的日志文件
 29     - /var/log/*.log
 46   fields:                        # 可以使用 fields 配置选项设置一些参数字段添加到 output 中
 47     service_name: filebeat
 48     log_type: log
 49     service_id: 192.168.190.103  
146 #-------------------------- Elasticsearch output ------------------------------
# 全部注释
156 #----------------------------- Logstash output --------------------------------
157 output.logstash:
159   hosts: ["192.168.190.102:5044"] # #指定 logstash 的 IP 和端口

5. 启动 filebeat

bash 复制代码
[root@filebeat ~]# systemctl start filebeat.service 
[root@filebeat ~]# systemctl status filebeat.service 
● filebeat.service - Filebeat sends log files to Logstash or directly to Elasticsearch.
   Loaded: loaded (/usr/lib/systemd/system/filebeat.service; disabled; vendor preset: disabled)
   Active: active (running) since 四 2024-04-11 15:09:28 CST; 5s ago
或者使用:
[root@filebeat ~]# cd /usr/local/filebeat/
[root@filebeat ~]# ./filebeat -e -c filebeat.yml
# ./filebeat: 表示执行当前目录下的Filebeat可执行文件
# -e: 参数表示启用Filebeat的环境模式
# 参数 -c 指定了Filebeat应使用的配置文件路径

6. 在 Logstash 组件所在节点上新建一个 Logstash 配置文件

bash 复制代码
[root@logstash ~]# cd /etc/logstash/conf.d
[root@logstash conf.d]# vim logstash.conf
input {
    beats {
        port => "5044"
    }
}
output {
    elasticsearch {
        hosts => ["192.168.190.100:9200"]
        index => "%{[fields][service_name]}-%{+YYYY.MM.dd}"
    }
    stdout {
        codec => rubydebug
    }
}

7. 浏览器访问 http://192.168.190.100:5601

单击"Create Index Pattern"按钮添加索引"filebeat-*",单击 "create" 按钮创建,单击 "Discover" 按钮可查看图表信息及日志信息。

相关推荐
shark_西瓜甜13 分钟前
shark云原生-日志体系-ECK
elasticsearch·docker·云原生
Elastic 中国社区官方博客25 分钟前
Elasticsearch:Ingest architectures - 摄取架构
大数据·elasticsearch·搜索引擎·架构·全文检索
水蓝烟雨10 小时前
Elasticsearch基本操作
大数据·elasticsearch·搜索引擎
猴子微胖15 小时前
ElasticSearch常用操作
大数据·elasticsearch·jenkins
日出等日落17 小时前
Windows系统安装分布式搜索和分析引擎Elasticsearch与远程访问详细教程
windows·分布式·elasticsearch
流月up1 天前
k8s离线安装单节点elasticsearch7.x
elasticsearch·kubernetes
凤凰谷11 天前
使用elasticsearch完成多语言搜索的三种方式
大数据·elasticsearch·搜索引擎
csdn5659738501 天前
阿里云Elasticsearch-趣味体验-仪表板
大数据·elasticsearch·搜索引擎·仪表板
cjay_fighting1 天前
ElasticSearch从入门到精通
java·elasticsearch·全文检索
JasonHome1 天前
ElasticSearch基本使用
elasticsearch·php