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)架构。
Logstash 具有基于磁盘的自适应缓冲系统,可减轻 Elasticsearch 持续写入数据的压力。
可从其他数据源提取数据,发送到多个目的地,使用条件数据流逻辑组成更复杂的处理管道。
用于对高并发日志数据进行流量削峰和缓冲。
缓冲可以一定程度地保护数据不丢失,同时对整个架构进行应用解耦。
开源数据收集器,常用于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
配置域名解析:
使用编辑器(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 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 插件:
前端代码使用 Vue.js(vus)、HTML 和 Node.js 管理工具 npm,以及后端代码使用 Java,使用 Maven 作为打包管理工具,支持生成 war 和 jar 包。
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 &
#运行日志输出的信息
> [email protected] 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
的相关信息。
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 -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服务。查看结果:
http://192.168.41.12:9100/
)可以查看到收集的索引信息。安装 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-*
索引,可以查看相应的图表和日志信息。
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
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
,配置日志路径、字段和输出目的地。
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 -e -c filebeat.yml
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 -f logstash.conf
Kibana操作:
在浏览器中访问http://192.168.41.32:5601
,登录Kibana。
在Kibana界面中,单击“Create Index Pattern”按钮,添加索引模式“filebeat-*”。
单击“Create”按钮创建索引模式。
单击“Discover”按钮,可以查看图表信息和日志信息。
在一个分布式环境中如何设置和配置日志收集和展示系统,使用Filebeat负责收集日志,Logstash负责处理和传输,Elasticsearch存储,而Kibana则用于可视化和查询。