目录
4.2 安装Java,Elasticsearch 8.x 需要Java 11或更高版本。可以使用yum安装OpenJDK:
5.1 下载elasticsearch安装包并解压到对应目录
5.2 配置elasticsearch编辑elasticsearch.yml文件
5.3 切换到elasticsearch用户并启动Elasticsearch:
6.2 修改logstash-sample.conf配置文件如下所示
8.3 因kibana安全规定不能使用root用户运行,所以必须先创建一个用户
一、为什么使用ELK
一般我们需要进行日志分析场景:通常是在Linux服务器上找到日志文件目录,在进行tail等grep操作来筛选查看,操作非常麻烦,尤其是集群环境中,通常需要找到更多文件来分析,效率低下,面临问题包括日志量太大如何归档、文本搜索太慢怎么办、如何多维度查询。需要集中化的日志管理,所有服务器上的日志收集汇总。常见解决思路是建立集中式日志收集系统,将所有节点上的日志统一收集,管理,访问。此时Elk就是这样的一款日志系统。
二、Elk介绍
ELK平台是一套完整的日志集中处理解决方案,将 ElasticSearch、Logstash 和 Kiabana 三个开源工具配合使用,完成更强大的用户对日志的查询、排序、统计需求 ELK 是 Elasticsearch、Logstash、Kibana的缩写,这三个工具组合在一起,用于数据收集、存储、 搜索和可视化分析,称为“Elastic Stack”(以前称为“ELK stack”)。
它们的角色如下:
-
Elasticsearch:核心搜索和分析引擎,负责存储数据并提供快速的全文搜索和分析功能
-
Logstash:数据收集和处理管道,能够从各种来源(如日志文件、数据库)收集数据,并进行过滤和转换,然后将其发送到Elasticsearch
-
Kibana:数据可视化工具,提供图形界面来展示和分析存储在Elasticsearch中的数据,支持创建各种图表和仪表板
因本次是直接收集log日志文件,并对高并发日志数据进行流量削峰和缓冲,所以额外采用了Filebeat和Kafka两款开源软件 完整架构如下图所示
三、Elasticsearch
Elasticsearch是一个分布式、高扩展、高实时的搜索与数据分析引擎。它能很方便的使大量数据具有搜索、分析和探索的能力。充分利用Elasticsearch的水平伸缩性,能使数据在生产环境变得更有价值。Elasticsearch的实现原理主要分为以下几个步骤,首先用户将数据提交到Elasticsearch数据库中,再通过分词控制器去将对应的语句分词,将其权重和分词结果一并存入数据,当用户搜索数据时候,再根据权重将结果排名,打分,再将返回结果呈现给用户。
有关概念:
-
cluster:代表一个集群,集群中有多个节点,其中有一个为主节点,这个主节点是可以通过选举产生的,主从节点是对于集群内部来说的。es的一个概念就是去中心化,字面上理解就是无中心节点,这是对于集群外部来说的,因为从外部来看es集群,在逻辑上是个整体,你与任何一个节点的通信和与整个es集群通信是等价的。
-
shards:代表索引分片,es可以把一个完整的索引分成多个分片,这样的好处是可以把一个大的索引拆分成多个,分布到不同的节点上。构成分布式搜索。分片的数量只能在索引创建前指定,并且索引创建后不能更改。
-
replicas:代表索引副本,es可以设置多个索引的副本,副本的作用一是提高系统的容错性,当某个节点某个分片损坏或丢失时可以从副本中恢复。二是提高es的查询效率,es会自动对搜索请求进行负载均衡。
-
recovery:代表数据恢复或叫数据重新分布,es在有节点加入或退出时会根据机器的负载对索引分片进行重新分配,挂掉的节点重新启动时也会进行数据恢复。
-
river:代表es的一个数据源,也是其它存储方式(如:数据库)同步数据到es的一个方法。它是以插件方式存在的一个es服务,通过读取river中的数据并把它索引到es中,官方的river有couchDB的,RabbitMQ的,Twitter的,Wikipedia的。
-
gateway:代表es索引快照的存储方式,es默认是先把索引存放到内存中,当内存满了时再持久化到本地硬盘。gateway对索引快照进行存储,当这个es集群关闭再重新启动时就会从gateway中读取索引备份数据。es支持多种类型的gateway,有本地文件系统(默认),分布式文件系统,Hadoop的HDFS和amazon的s3云存储服务。
-
discovery.zen:代表es的自动发现节点机制,es是一个基于p2p的系统,它先通过广播寻找存在的节点,再通过多播协议来进行节点之间的通信,同时也支持点对点的交互。
-
Transport:代表es内部节点或集群与客户端的交互方式,默认内部是使用tcp协议进行交互,同时它支持http协议(json格式)、thrift、servlet、memcached、zeroMQ等的传输协议(通过插件方式集成)。
四、Linux环境的部署与搭建
4.1 确保系统满足Elasticsearch的最小要求:
-
至少2G的内存
-
足够的磁盘空间
-
支持Java 11或更高版本
4.2 安装Java,Elasticsearch 8.x 需要Java 11或更高版本。可以使用yum安装OpenJDK:
[root@localhost ~]# yum install java-11-openjdk
#配置环境变量
[root@localhost ~]# vim /etc/profile
[root@localhost ~]# export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-11.0.24.8-1.oe2403.x86_64
[root@localhost ~]# export PATH=$PATH:$JAVA_HOME/bin
[root@localhost ~]# source /etc/profile
#查看java版本:java -version:
[root@localhost ~]# java -version
openjdk version "11.0.23" 2024-04-16 LTS
OpenJDK Runtime Environment (Red_Hat-11.0.23.0.9-2.el7_9) (build 11.0.23+9-LTS)
OpenJDK 64-Bit Server VM (Red_Hat-11.0.23.0.9-2.el7_9) (build 11.0.23+9-LTS, mixed mode, sharing)
五、安装Elasticsearch
5.1 下载elasticsearch安装包并解压到对应目录
官网下载地址:https://www.elastic.co/cn/downloads/elasticsearch
文件名:elasticsearch-8.17.2-linux-x86_64.tar.gz
[root@localhost ~]# wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-8.17.2-linux-x86_64.tar.gz
[root@localhost ~]# tar -zxvf elasticsearch-8.17.2-linux-x86_64.tar.gz -C /data
#因elasticsearch安全规定不能使用root用户运行,所以必须先创建一个用户
[root@localhost ~]# groupadd elasticsearch
[root@localhost ~]# useradd -g elasticsearch elasticsearch
[root@localhost ~]# passwd elasticsearch
[root@localhost ~]# chown -R elasticsearch elasticsearch-8.17.2
5.2 配置elasticsearch编辑elasticsearch.yml文件
[root@localhost data]# vim elasticsearch-8.17.2/config/elasticsearch.yml
#修改以下配置:**
cluster.name: my-application #集群名称,多节点名称一致
node.name: node-1 #节点名称
network.host:0.0.0.0 #监听所有网络接口
http.port: 9200 #端口,代表开启http
discovery.seed_hosts: ["192.168.200.101"] #所有节点ip,多个逗号分割
xpack.security.http.ssl:
enabled: false #关闭ssl验证,如果是http环境下需要关闭
cluster.initial_master_nodes: ["192.168.200.101"] #参与master选举,多个逗号分割
#设置Elasticsearch使用的内存大小,编辑/etc/security/limits.conf,添加如下:
[root@localhost data]# vim /etc/security/limits.conf
elasticsearch soft nofile 65536
elasticsearch hard nofile 65536
elasticsearch soft memlock unlimited
elasticsearch hard memlock unlimited
#设置Elasticsearch使用的内存大小,视情况而定:
[root@localhost data]# vim elasticsearch-8.17.2/config/jvm.options
-Xms1g
-Xmx1g
5.3 切换到elasticsearch用户并启动Elasticsearch:
[root@localhost elasticsearch]# su elasticsearch
[root@localhost elasticsearch]# ./bin/elasticsearch
[root@localhost elasticsearch]# nohup ./bin/elasticsearch &
5.4 配置elasticsearch账号密码
#Elasticsearch会内置一些用户(elastic, kibana, logstash_system等)运行命令生成这些密码:
[root@localhost elasticsearch]# ./bin/elasticsearch-setup-passwords interactive
[root@localhost elasticsearch]# ./bin/elasticsearch-setup-passwords auto
#假如忘记密码,还可以使用以下命令重置密码:
[root@localhost elasticsearch]# ./bin/elasticsearch-reset-password -u <username>
5.5 如果遇到问题:max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]:
#是因为es最大虚拟内存太低导致,切换到root用户修改配置文件sysctl.conf
[root@localhost elasticsearch]# vim /etc/sysctl.conf
# 添加下面配置:
vm.max_map_count=655360
#保存退出,并执行命令:sysctl -p、切换到elasticsearch继续运行一下
六、安装Logstash
Logstash是免费且开放的服务器端数据处理管道,能够从多个来源采集数据,转换数据,然后将数据发送到您最喜欢的“存储库”中(如Elasticsearch)。
输入:采集各种样式、大小和来源的数据:
数据往往以各种各样的形式,或分散或集中地存在于很多系统中。Logstash 支持各种输入选择 ,可以在同一时间从众多常用来源捕捉事件。能够以连续的流式传输方式,轻松地从您的日志、指标、Web 应用、数据存储以及各种 AWS 服务采集数据。
过滤器:实时解析和转换数据: 数据从源传输到存储库的过程中,Logstash 过滤器能够解析各个事件,识别已命名的字段以构建结构,并将它们转换成通用格式,以便更轻松、更快速地分析和实现商业价值。
Logstash 能够动态地转换和解析数据,不受格式或复杂度的影响:
-
利用 Grok 从非结构化数据中派生出结构
-
从 IP 地址破译出地理坐标
-
将 PII 数据匿名化,完全排除敏感字段
-
整体处理不受数据源、格式或架构的影响
输出:选择你的存储,导出你的数据:
尽管 Elasticsearch 是我们的首选输出方向,能够为我们的搜索和分析带来无限可能,但它并非唯一选择。Logstash 提供众多输出选择,您可以将数据发送到您要指定的地方,并且能够灵活地解锁众多下游用例。
6.1 下载Logstash安装包并解压到对应目录
官网下载:https://www.elastic.co/cn/downloads/logstash
logstash-8.17.2-linux-x86_64.tar.gz
[root@localhost ~]# wget https://artifacts.elastic.co/downloads/logstash/logstash-8.17.2-linux-x86_64.tar.gz
[root@localhost ~]# tar -zxvf logstash-8.17.2-linux-x86_64.tar.gz -C /data
6.2 修改logstash-sample.conf配置文件如下所示
[root@localhost ~]# vim /data/logstash-8.17.2/config/logstash-sample.conf
input {
kafka {
bootstrap_servers => "192.168.200.101:9092" # Kafka地址,多个地址用逗号分隔
topics => ["kafkatopicname"] # Kafka主题
group_id => "logstash_group" # Kafka消费组ID
consumer_threads => 3 # 线程数
codec => json # 使用JSON编解码器
}
}
filter {
# 在这里可以添加更多的过滤器规则
}
output {
elasticsearch {
hosts => ["http://192.168.200.101:9200"] # Elasticsearch地址
index => "kafka_index" # 索引名
user => "elastic" # Elasticsearch账号
password => "kL-hAbsvyXm_Dw5hp=Yu" # Elasticsearch密码
}
stdout { codec => rubydebug } # 将数据打印到控制台,便于调试
}
#设置logstash使用的内存大小,视情况而定:
[root@localhost ~]# vim /data/logstash-8.17.2/config/jvm.options
-Xms1g
-Xmx1g
6.3 运行logstash并指定配置
[root@localhost ~]# ./bin/logstash -f config/logstash-sample.conf
[root@localhost ~]# nohup ./bin/logstash -f config/logstash-sample.conf &
七、安装Filebeat
Filebeat 是 ELK(Elasticsearch、Logstash、Kibana)堆栈中的一个组件,用于从不同的日志文件位置收集数据并将其发送到Logstash 或者 Elasticsearch进行进一步处理和分析。它的主要角色是作为一个轻量级的日志收集器,专门负责从各种来源(如日志文件、系统日志等)收集日志数据,并将其传输到其他ELK 组件进行处理。
Filebeat 的主要功能和角色包括:
-
数据收集:Filebeat 可以监视指定的日志文件、日志目录或者其他位置,并实时地收集其中的日志数据。
-
数据传输:收集到的日志数据被 Filebeat 发送到指定的目标,通常是 Logstash 或者直接发送到 Elasticsearch 进行索引。
-
轻量级:Filebeat 是一个轻量级的日志收集器,具有低内存消耗和低 CPU 占用的特点,适合于在各种环境中部署和运行。
-
模块化配置:Filebeat 提供了丰富的模块化配置选项,可以轻松地配置和管理不同类型日志数据的收集和传输。
Filebeat和Beats关系
Beats在是一个轻量级日志采集器,其实Beats家族有6个成员,早期的ELK架构中使用Logstash收集、解析日志,但是Logstash对内存、cpu、io等资源消耗比较高。相比Logstash,Beats所占系统的CPU和内存几乎可以忽略不计。
目前Beats包含六种工具:
-
Packetbeat:网络数据(收集网络流量数据)
-
Metricbeat:指标(收集系统、进程和文件系统级别的CPU和内存使用情况等数据)
-
Filebeat:日志文件(收集文件数据)
-
Winlogbeat:windows事件日志(收集Windows事件日志数据)
-
Auditbeat:审计数据(收集审计日志)
-
Heartbeat:运行时间监控(收集系统运行时的数据)
7.1 下载Filebeat安装包并解压到对应目录
官网下载:https://www.elastic.co/cn/downloads/beats/filebeat
文件名:filebeat-8.17.2-linux-x86_64.tar.gz
[root@localhost ~]# wget https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-8.17.2-linux-x86_64.tar.gz
[root@localhost ~]# tar -zxvf filebeat-8.17.2-linux-x86_64.tar.gz -C /data/
7.2 修改配置文件
[root@localhost ~]# vim filebeat.yml
filebeat.inputs:
- type: log #类型为日志
id: my-filestream-id #唯一的 ID
enabled: true #启用
paths:
- /var/log/nginx/*.log #日志文件目录
#-------------------------
output.kafka:
hosts: ["192.168.200.101:9092"] #kafka地址,多个逗号分割
topic: "kafkatopicname" # 主题名称
partition.round_robin:
reachable_only: false
required_acks: 1
compression: gzip
max_message_bytes: 1000000
preset: balanced
7.4 启动Filebeat
[root@localhost ~]# ./filebeat -e -c filebeat.yml
[root@localhost ~]# nohup ./filebeat -e -c filebeat.yml &
八、安装Kibana
Kibana 是为 Elasticsearch设计的开源分析和可视化平台。你可以使用 Kibana 来搜索,查看存储在Elasticsearch 索引中的数据并与之交互。你可以很容易实现高级的数据分析和可视化,以图表的形式展现出来。
8.1 安装Kibana
官网下载:https://www.elastic.co/cn/downloads/kibana
kibana-8.17.2-linux-x86_64.tar.gz
[root@localhost ~]# wget https://artifacts.elastic.co/downloads/kibana/kibana-8.17.2-linux-x86_64.tar.gz
[root@localhost ~]# tar -zxvf kibana-8.17.2-linux-x86_64.tar.gz -C /data
8.2 编辑配置文件
[root@localhost kibana-8.17.2]# vim config/kibana.yml
server.port: 5601#端口
server.host: "0.0.0.0"#允许任何ip连接
elasticsearch.hosts: ["http://192.168.200.101:9200"]#es地址,多个逗号分割
elasticsearch.username: "kibana_system"#es账号
elasticsearch.password: "84DpQcS2P8ye32P1dWmC"#es密码
i18n.locale: "zh-CN"#简体中文
8.3 因kibana安全规定不能使用root用户运行,所以必须先创建一个用户
[root@localhost kibana-8.17.2]# groupadd elasticsearch #添加用户组
[root@localhost kibana-8.17.2]# useradd -g elasticsearch elasticsearch #添加用户并指定组
[root@localhost kibana-8.17.2]# passwd elasticsearch #设置密码
[root@localhost kibana-8.17.2]# chown -R elasticsearch kibana-8.17.2 #为此用户赋值文件夹权限
8.4 启动Kibana
[root@localhost ~]# su elasticsearch
#前台启动
[elasticsearch@localhost kibana-8.17.2]# ./bin/kibana
#后台启动
[elasticsearch@localhost ~]# nohup ./bin/kibana &