目录
在产生日志的客户端服务器上安装filebeat(本案例为elk2主机)
ELK平台介绍
在数字化时代,海量数据如潮水般涌来,尤其是日志数据,它记录着系统运行的每一个细节,蕴含着巨大的价值。然而,如何高效地收集、存储、分析和可视化这些日志数据,成为众多企业和技术人员面临的挑战。ELK 平台应运而生,为日志管理和数据分析提供了一套强大而完整的解决方案
ELK概述
ELK 并非单一的软件,而是由 Elasticsearch、Logstash 和 Kibana 三个开源软件组成的技术栈,它们相互协作,形成了一个强大的日志处理和分析平台。在实际应用中,无论是排查系统故障、监控应用性能,还是挖掘用户行为数据,ELK 都能发挥关键作用,帮助企业从繁杂的日志中提取有价值的信息
Elasticsearch
ElasticSearch概述
Elasticsearch 是一个基于 Lucene 的分布式搜索和分析引擎,具有高扩展性、高可用性和实时处理能力。它采用分布式架构,能够轻松应对 PB 级别的数据量,通过将数据分散存储在多个节点上,实现数据的水平扩展。同时,Elasticsearch 支持实时索引和搜索,能够快速响应用户的查询请求,为数据分析提供了强大的支持。
Elasticsearch核心概念
索引(Index):可以理解为一个数据库,是具有相同特征的文档的集合。每个索引都有自己的映射(Mapping),定义了文档中字段的类型和属性。
文档(Document):是 Elasticsearch 中最小的数据单元,类似于关系型数据库中的一行记录。一个文档由多个字段组成,每个字段都有自己的值。
类型(Type):在早期版本中,类型用于对文档进行分类,但在 Elasticsearch 7.0 及以上版本中,已逐步弃用该概念,推荐使用单一类型。
分片(Shard):为了提高数据处理能力和存储容量,Elasticsearch 将索引划分为多个分片,每个分片都是一个独立的 Lucene 索引,可以分布在不同的节点上。
副本(Replica):为了提高数据的可用性和查询性能,每个分片可以有多个副本。副本是分片的拷贝,分布在不同的节点上,当主分片出现故障时,副本可以自动切换为主分片。
Logstash
logstash介绍
Logstash 是一个开源的数据收集引擎,具有高度的灵活性和可扩展性。它能够从各种数据源(如文件、系统日志、网络端口等)收集数据,对数据进行过滤、转换和丰富,然后将处理后的数据输出到各种目标(如 Elasticsearch、数据库、文件等)。Logstash 通过插件机制实现了对多种数据源和输出目标的支持,用户可以根据实际需求选择和安装相应的插件
Logstash工作的三个阶段
输入(Input):Logstash 通过输入插件从各种数据源收集数据。常见的输入插件包括file(从文件读取数据)、syslog(接收系统日志)、beats(接收 Beats 发送的数据)等。
过滤(Filter):在过滤阶段,Logstash 可以对收集到的数据进行各种处理,如数据清洗、字段提取、数据转换等。通过使用过滤插件,用户可以灵活地定制数据处理逻辑,满足不同的业务需求。常见的过滤插件包括grok(用于解析非结构化数据)、mutate(用于数据转换和字段操作)、drop(用于丢弃不符合条件的数据)等。
输出(Output):经过过滤处理后的数据,Logstash 通过输出插件将其发送到目标存储或系统中。常见的输出插件包括elasticsearch(将数据发送到 Elasticsearch)、file(将数据写入文件)、jdbc(将数据写入数据库)等
Kibana
Kibana介绍
Kibana 是一个开源的数据分析和可视化平台,与 Elasticsearch 紧密集成。它为用户提供了一个直观、友好的界面,用于搜索、分析和可视化存储在 Elasticsearch 中的数据。通过 Kibana,用户无需编写复杂的查询语句,即可轻松地对数据进行探索和分析,生成各种图表、报表和仪表盘,帮助用户更好地理解数据背后的信息。
Kibana主要功能
数据搜索:Kibana 提供了强大的搜索功能,用户可以通过关键词、字段过滤、时间范围等条件快速检索数据。
可视化展示:支持多种可视化类型,如柱状图、折线图、饼图、地图等,用户可以根据数据特点选择合适的可视化方式,直观地展示数据的趋势和关系。
仪表盘创建:用户可以将多个可视化图表组合成一个仪表盘,方便实时监控和分析数据。
告警设置:根据数据的变化设置告警规则,当数据满足告警条件时,Kibana 可以通过邮件、短信等方式通知用户
部署ES群集
基本配置
在俩台ES主机上设置hosts文件
打开/etc/hosts文件,添加两台主机的 IP 地址和主机名映射,确保两台主机能够通过主机名相互访问
192.168.1.100 elk1
192.168.1.101 elk2
关闭所有节点的防火墙
systemctl stop firewalld
systemctl disable firewalld
创建es运行用户
useradd -M -s /sbin/nologin elasticsearch
安装java环境
yum install -y java-11
为用户设置资源访问限制
elasticsearch soft nofile 65536
elasticsearch hard nofile 131072
elasticsearch soft nproc 4096
elasticsearch hard nproc 4096
安装Elasticsearch
tar -zxvf elasticsearch-7.17.0-linux-x86_64.tar.gz -C /usr/local/
更改Elasticsearch主配置文件
cluster.name: my-elasticsearch-cluster
node.name: elk1
network.host: 0.0.0.0
http.port: 9200
discovery.seed_hosts: ["elk1", "elk2"]
cluster.initial_master_nodes: ["elk1", "elk2"]
创建数据存放路径并授权
mkdir -p /data/elasticsearch
chown -R elasticsearch:elasticsearch /data/elasticsearch
启动es
su - elasticsearch
./elasticsearch -d
查看节点信息
http://192.168.10.103:9200/_cat/nodes?v
安装logstash
logstash服务器上安装logstash
tar -zxvf logstash-7.17.0.tar.gz -C /usr/local/
测试安装结果
./logstash -e 'input { stdin {} } output { stdout {} }'
logstash配置文件
input {
beats {
port => 5044
}
}
filter {
grok {
match => { "message" => "%{COMBINEDAPACHELOG}" }
}
}
output {
elasticsearch {
hosts => ["http://elk1:9200", "http://elk2:9200"]
index => "apache-logs-%{+YYYY.MM.dd}"
}
}
Filbeat
在产生日志的客户端服务器上安装filebeat(本案例为elk2主机)
tar -zxvf filebeat-7.17.0-linux-x86_64.tar.gz -C /usr/local/
安装filebeat
filebeat.inputs:
- type: log
paths:
- /var/log/apache2/access.log
output.logstash:
hosts: ["elk1:5044", "elk2:5044"]
配置web01服务器filebeat的输出
[root@elk2 ^]# cd /usr/local/filebeat/
[root@elk2 filebeat]# mv filebeat. yml filebeat. yml.bak
[root@elk2 filebeat]# vim filebeat. yml
filebeat. inputs:
type: log
paths:
- /var/log/httpd/access_log
output.logstash:
hosts: ["192.168.10.102:5044"]
[root@elk2 ^]# /usr/local/filebeat/filebeat -c /usr/local/filebeat/filebeat, yml &
修改logstash的配置文件,使日志输出到
如果发现logstash属于开启状态,就先关闭掉
可以先查一下logstash的进程,netstat-anpt
grep5044,再杀死这个进程。
如果要把日志提交给ES,可以使用如下内容
[root@elkl ^]# vim /usr/local/logstash/config/beats.conf
input {
beats {
5044
port
codec
json
output {
elasticsearch
hosts
["192.168.10.103:9200"]
index=> "weblog-beat-%{+YYYY.MM.dd}
运行1ogstash并验证
[root@elkl ^]#/usr/local/logstash/bin/logstash -f /usr/local/logstash/config/beats.conf --path.data=/usr/local/logstash/config.d/web01 &
查看索引,发现新增了一个weblog-beat-2025.04.28的索引
[root@elkl*]# curl -XGET "http://localhost:9200/_cat/indices?v"
安装Kibana
在elkl上安装Kibana
tar -zxvf kibana-7.17.0-linux-x86_64.tar.gz -C /usr/local/
修改Kibana主配置文件
server.host: "0.0.0.0"
elasticsearch.hosts: ["http://elk1:9200", "http://elk2:9200"]
启动Kibana服务
[root@localhost~]# su - es
[es@elkl ^]$ nohup /usr/local/kibana/bin/kibana &
验证Kibana
浏览器访问
http://192.168.10.101:5601