ELK日志分析系统,ELFK详解部署
概念简述
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 组成,它们合作来实现日志管理、分析和可视化。
-
集中式管理:当日志分散在不同设备上时,传统的查看方法变得低效且繁琐。ELK 的 Logstash 组件可以帮助集中收集来自各服务器的日志,并将它们统一存储在 ElasticSearch 中,简化了日志管理的复杂性。
-
分析和检索:在日志量庞大、服务器数量众多的情况下,使用传统的 grep、awk 或 Linux 命令来搜索和统计日志信息效率较低。ElasticSearch 提供了强大的搜索和查询功能,通过使用其灵活的查询语言,可以更高效地检索和分析日志数据。
-
分布式系统支持:对于大型分布式系统,问题的定位需要迅速而精准的信息定位。ELK 通过收集和索引分布在不同服务器上的日志数据,结合 Kibana 的可视化功能,使得定位问题的效率大大提高,能够快速定位到具体的服务器和服务模块。
综上所述,ELK 提供了集中式的日志管理、强大的搜索和分析功能,以及分布式系统支持,使得管理者和开发人员能够更高效地管理、分析和定位问题,尤其适用于大规模的分布式架构环境。
可以添加的其他组件
虽然ELK本身已经是一个强大的日志分析系统,但用户可以根据特定的需求和场景,添加其他组件来扩展其功能和增强性能。以下是一些常见的与ELK组合使用的其他组件:
Filebeat:
-
轻量级的开源日志文件数据搜集器。
-
安装在需要采集数据的客户端,可指定目录与日志格式。
-
快速收集数据并发送给 Logstash 或直接发送给 Elasticsearch 存储。
-
相对于运行在JVM上的Logstash,具有明显的性能优势,常用于EFLK(Elasticsearch + Filebeat + Logstash + Kibana)架构。
- Filebeat 结合 Logstash 的好处:
-
Logstash 具有基于磁盘的自适应缓冲系统,可减轻 Elasticsearch 持续写入数据的压力。
-
可从其他数据源提取数据,发送到多个目的地,使用条件数据流逻辑组成更复杂的处理管道。
- 缓存/消息队列(如Redis、Kafka、RabbitMQ等):
-
用于对高并发日志数据进行流量削峰和缓冲。
-
缓冲可以一定程度地保护数据不丢失,同时对整个架构进行应用解耦。
- Fluentd:
-
开源数据收集器,常用于EFK(Elasticsearch + Fluentd + Kibana)架构。
-
相对于Logstash,Fluentd更易用、资源消耗更少、性能更高,成为Logstash的替代方案。
-
在Kubernetes集群中通过DaemonSet运行,通过获取容器日志文件、过滤和转换日志数据,将数据传递到Elasticsearch集群。
完整日志系统基本特征
-
日志收集(Collection): 能够采集多种来源的日志数据,包括系统日志、应用程序日志、安全日志等。这确保系统管理员和开发人员能够获取全面的信息,从而更好地了解系统的运行状况。
-
日志传输(Transmission): 能够稳定地把日志数据解析、过滤并传输到存储系统。这确保了日志数据能够安全、及时地传递到日志存储的地方,以备后续的分析和查询。
-
日志存储(Storage): 能够有效地存储日志数据。这可能涉及到数据的归档、索引和压缩,以便在需要时能够快速检索和分析历史日志数据。
-
日志分析(Analysis): 提供对日志数据的分析功能,通常通过用户界面(UI)实现。这使得用户能够以直观的方式理解日志信息,发现潜在的问题或趋势,并作出相应的决策。
-
错误报告和警告(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 堆栈的工作流程如下:
-
数据收集: Logstash 从各种数据源中收集原始日志数据。
-
数据处理: Logstash 对原始日志数据进行过滤、解析和结构化。
-
数据传输: 处理后的日志数据通过网络传输到 Elasticsearch。
-
数据存储: Elasticsearch 存储并索引日志数据,使其能够被高效地检索。
-
可视化和分析: 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:9200
和http://192.168.41.33:9200
查看 Node1 和 Node2 的信息。 -
通过访问
http://192.168.41.32:9200/_cluster/health?pretty
和http://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中。
- 使用
rubydebug
输出详细格式:
-
logstash -e 'input { stdin{} } output { stdout{ codec=>rubydebug } }'
:这个命令启动Logstash,使用标准输入作为输入,将处理结果以详细的rubydebug
格式输出到标准输出。 -
输入了
www.baidu.com
,Logstash对其进行处理,并以JSON格式输出了包含时间戳、版本、主机信息和消息的结果。
- 使用 Logstash 将信息写入 Elasticsearch 中:
-
logstash -e 'input { stdin{} } output { elasticsearch { hosts=>["192.168.41.32:9200"] } }'
:这个命令启动Logstash,使用标准输入作为输入,并将处理结果发送到Elasticsearch中。 -
输入了三个网址,但结果并没有直接显示在标准输出中,而是被发送到Elasticsearch中。
- 查看结果:
- 你可以通过浏览器访问
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_name
是filebeat
,则索引会类似于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则用于可视化和查询。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!