前言
随着企业级应用系统日益复杂,随之产生的海量日志数据。传统的日志管理和分析手段,难以做到高效检索、实时监控以及深度挖掘潜在价值。在此背景下,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:9200 、 http://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" 按钮可查看图表信息及日志信息。