ELK简介以及安装部署

ELK简介以及安装部署ELK 是 Elasticsearc Logstash Kibana 三大开源框架的首字母大写简称

大家好,欢迎来到IT知识分享网。

ELK近实时日志分析搜索系统

ELK简介

ELK 是 Elasticsearch、Logstash、Kibana 三大开源框架的首字母大写简称。市面上也被称为Elastic Stack。其中 Elasticsearch 是一个基于Lucene、分布式、通过Restful方式进行交互的近实时搜索平台框架。像类似百度、谷歌这种大数据全文搜索引擎的场景都可以使用 Elasticsearch作为底层支持的框架,可见 Elasticsearch 提供的搜索能力确实强大,市面上很多时候我们称Elasticsearch 为 es。Logstash 是 ELK 的中央数据流引擎,用于从不同目标(文件/数据存储/MQ)收集的不同格式数据,经过过滤后支持输出到不同目的地(文件/MQ/Redis/Elasticsearch/Kafka等)。Kibana 可以将 Elasticsearch 的数据通过友好的页面展示出来,提供实时分析的功能。简单来说,ELK就是集数据收集、传输、存储、分析、告警为一体的近实时日志分析搜索系统。

elasticsearch

E – Elasticsearch(存储,查询),分布式数据搜索引擎,基于Apache Lucene实现,可集群,提供数据的集中式存储,分析,以及强大的数据搜索和聚合功能。

logstash

L – logstash(收集),数据收集引擎,相较于Filebeat比较重量级,但它集成了大量的插件,支持丰富的数据源收集,对收集的数据可以过滤,分析,格式化日志格式。

kibana

K – kibana(展示),数据的可视化平台,通过该web平台可以实时的查看 Elasticsearch 中的相关数据,并提供了丰富的图表统计功能。

ELK架构

nginx+fliebeat –> kafka (消息缓存队列) – > elk or (数据库) –> mysql

在这里插入图片描述

(此图未引入kafka消息缓存队列,使用缓存队列主要是解决数据安全与均衡Logstash与Elasticsearch负载压力。)

此架构的工作方式大致如下,应用端日志收集器使用Filebeat,Filebeat轻量,占用服务器资源少,所以使用Filebeat作为应用服务器端的日志收集器,一般Filebeat会配合Logstash一起使用,Filebeat收集数据,Logstash过滤数据并将数据推送到Elasticsearch,Elasticsearch存储传入的数据,并提供方法以供查询,这种部署方式也是目前最常用的架构。

ELK的应用场景

  • 应用场景:

    要对大规模的日志进行搜索,进行分析。

  • 例子:

    前端nginx代理集群有5台,这上面都分布了nginx日志。突然当前时间点用户反馈网站访问不了,那我们就要去查看过滤出nginx日志http状态码为404,4xx,5xx的日志。如果使用awk,grep进行操作,那就登录到5台机器上进行操作,然后对结果进行一个合并。这种情况就不适用使用命令行工具去做分析和搜索,这种方法比较麻烦,效率又低,日志量大起来搜索又慢。对于这种情况,我们的日志就要进行集中化管理,集中化分析。如此一来,搭建ELK近实时日志分析搜索系统,无疑是一个好的解决方法。

ELK的安装部署

一、服务器准备

准备四台虚拟机

主机名 IP地址 描述
elasticsearch-1 192.168.220.21 es集群
elasticsearch-2 192.168.220.22 es集群
elasticsearch-3 192.168.220.23 es集群
kibana 192.168.220.20 logstash+kibana
web 192.168.220.105 nginx+filebeat

以及各个软件的安装包(版本都一致),下载地址(官网):https://www.elastic.co/cn/downloads

在这里插入图片描述

二、基础环境配置

ELK主机都需部署(都是如下操作)

1、jdk环境的部署
# 导入jdk安装包 [root@elasticsearch-1 ~]# mkdir /jdk && cd /jdk [root@elasticsearch-1 jdk]# ls jdk-8u381-linux-i586.tar.gz # 解压到当前文件夹 [root@elasticsearch-1 jdk]# tar xf jdk-8u381-linux-i586.tar.gz [root@elasticsearch-1 jdk]# ls jdk1.8.0_381 jdk-8u381-linux-i586.tar.gz # 配置/etc/profile文件 [root@elasticsearch-1 ~]# vim /etc/profile JAVA_HOME=/jdk/jdk1.8.0_381 JRE_HOME=/jdk/jdk1.8.0_381/jre PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH CLASSPATH=$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib export PATH JAVA_HOME CLASSPATH JRE_HOME # 重新加载文件 [root@elasticsearch-1 ~]# source /etc/profile # 查看是否配置成功 root@elasticsearch-1 jdk]# java -version -bash: /jdk/jdk1.8.0_381/bin/java: /lib/ld-linux.so.2: bad ELF interpreter: No such file or directory # 此问题是因为少了glibc依赖,所以需要安装依赖 [root@elasticsearch-1 jdk]# yum install glibc.i686 -y [root@kibana jdk]# java -version java version "1.8.0_381" Java(TM) SE Runtime Environment (build 1.8.0_381-b09) Java HotSpot(TM) Client VM (build 25.381-b09, mixed mode) 
2、关闭防火墙和selinux
# 关闭防火墙 [root@elasticsearch-1 ~]# systemctl stop firewalld && systemctl disable firewalld # 关闭selinux [root@elasticsearch-1 ~]# setenforce 0  [root@elasticsearch-1 ~]# sed -i 's/^SELINUX=enforcing$/SELINUS=disabled/' /etc/selinux/config 
3、操作系统参数优化
# 设置进程数和文件句柄数以及内存限制配置 [root@elasticsearch-1 ~]# vim /etc/security/limits.conf elastic soft memlock unlimited #不进行内存限制 elastic hard memlock unlimited elastic soft nofile 65535 #进行打开文件数限制 elastic hard nofile 65535 elastic soft nproc 65535 #进行打开文件数限制 elastic hard nproc 65535 # 虚拟内存设置 [root@elasticsearch-1 ~]# vim /etc/sysctl.conf vm.max_map_count= #max_map_count文件包含限制一个进程可以拥有的VMA(虚拟内存区域)的数量 # 执行sysctl -p生效 [root@elasticsearch-1 ~]# sysctl -p 

三、ELK的部署

1、elasticsearch

(1) 创建es用户

[root@elasticsearch-1 ~]# useradd elastic [root@elasticsearch-1 ~]# echo "" | passwd --stdin elastic 

(2) 解压elasticsearch压缩包

[root@elasticsearch-1 elk]# ls elasticsearch-8.6.0-linux-x86_64.tar.gz # 将elasticsearch-8.6.0-linux-x86_64.tar.gz解压到 / 目录下 [root@elasticsearch-1 elk]# tar xf elasticsearch-8.6.0-linux-x86_64.tar.gz -C / # 授予权限 [root@elasticsearch-1 ~]# chown -R elastic:elastic /elasticsearch-8.6.0/ [root@elasticsearch-1 ~]# ll -d /elasticsearch-8.6.0/ drwxr-xr-x 9 elastic elastic 172 Aug 30 16:01 /elasticsearch-8.6.0/ 

(3) 创建elasticsearch数据以及日志所存放的目录

[root@elasticsearch-1 ~]# mkdir -p /data/elasticsearch/{data,logs} # 授予权限 [root@elasticsearch-1 ~]# chown -R elastic:elastic /data/elasticsearch/{data,logs} [root@elasticsearch-1 ~]# ll /data/elasticsearch/ drwxr-xr-x 5 elastic elastic 87 Sep 4 17:27 data drwxr-xr-x 2 elastic elastic 4096 Aug 31 09:45 logs 

(4) 配置集群间安全访问证书密钥(仅在elasticsearch-1节点上操作即可)

# 签发ca证书 [root@elasticsearch-1 ~]# /elasticsearch-8.6.0/bin/elasticsearch-certutil ca # 输入该指令后一直回车即可 # 签发节点证书 [root@elasticsearch-1 ~]# /elasticsearch-8.6.0/bin/elasticsearch-certutil cert --ca elastic-stack-ca.p12 # 输入该指令后一直回车即可 

(5) 将证书移至certs目录(仅在elasticsearch-1节点上操作即可)

# 无cert目录就创建(切记需用elastic用户创建) [root@elasticsearch-1 ~]# mv /elasticsearch-8.6.0/elastic-stack-ca.p12 /elasticsearch-8.6.0/config/certs [root@elasticsearch-1 ~]# mv /elasticsearch-8.6.0/elastic-certificates.p12 /elasticsearch-8.6.0/config/certs [root@elasticsearch-1 ~]# scp -r /elasticsearch-8.6.0/config/certs 192.168.220.22:/elasticsearch-8.6.0/config/ [root@elasticsearch-1 ~]# scp -r /elasticsearch-8.6.0/config/certs 192.168.220.23:/elasticsearch-8.6.0/config/ 

(6) 创建elasticsearch.keystore文件(仅在elasticsearch-1节点上操作即可)

[root@elasticsearch-1 ~]# /elasticsearch-8.6.0/bin/elasticsearch-keystore create [root@elasticsearch-1 ~]# scp /elasticsearch-8.6.0/config/elasticsearch.keystore 192.168.220.22:/elasticsearch-8.6.0/config/ [root@elasticsearch-1 ~]# scp /elasticsearch-8.6.0/config/elasticsearch.keystore 192.168.220.23:/elasticsearch-8.6.0/config/ 

(7) 证书权限更新(所有的证书都必须是elastic权限)

[root@elasticsearch-1 ~]# ll /elasticsearch-8.6.0/config/certs/ -rw------- 1 elastic elastic 3596 Aug 29 11:53 elastic-certificates.p12 -rw------- 1 elastic elastic 2672 Aug 29 11:53 elastic-stack-ca.p12 [root@elasticsearch-1 ~]# ll /elasticsearch-8.6.0/config/elasticsearch.keystore -rw-rw---- 1 elastic elastic 199 Aug 29 11:59 /elasticsearch-8.6.0/config/elasticsearch.keystore 

(8) elasticsearch配置文件修改

vim /elasticsearch-8.6.0/config/elasticsearch.yml(添加如下内容)

# 集群名称,三个节点保持一致 cluster.name: zhangjiaxin-es # 节点名称,一般为主机名,三个节点不一致 node.name: elasticsearch-1 # 节点角色,master表示管理节点,data表示数据节点,该配置中节点既是管理节点,也是数据节点,remote_cluster_client远程集群客户端节点。 node.roles: [master,data,remote_cluster_client] # 数据存放路径 path.data: /data/elasticsearch/data # 日志存放路径 path.logs: /data/elasticsearch/logs # 绑定监听IP network.host: 192.168.220.21 # 设置对外服务的http端口,默认为9200 http.port: 9200 # #是否允许跨域访问,true表示允许 http.cors.enabled: true # 设置访问 http.cors.allow-origin: "*" # 设置节点端口 transport.port: 9300 # 节点发现 discovery.seed_hosts: ["192.168.220.21", "192.168.220.22", "192.168.220.23"] # 集群初始化时master节点 cluster.initial_master_nodes: ["elasticsearch-1", "elasticsearch-2", "elasticsearch-3"] # 启用节点上ES的XPACK安全功能,相当于总开关 xpack.security.enabled: true # 传输层的认证设置 xpack.security.transport.ssl: enabled: true verification_mode: none keystore.path: certs/elastic-certificates.p12 truststore.path: certs/elastic-certificates.p12 

(9) elasticsearch jvm参数配置

# 按照虚机分配的内存配置-Xms和-Xmx,本文中虚机内存为2G,设置-Xms和-Xmx值为1G,为一半 [root@elasticsearch-1 ~]# vim /elasticsearch-8.6.0/config/jvm.options -Xms1g -Xmx1g 

(10) 将elasticsearch加入systemctl

[root@elasticsearch-1 ~]# vim /usr/lib/systemd/system/elasticsearch.service [Unit] Description=elasticsearch After=network.target [Service] Type=forking User=elastic ExecStart=/elasticsearch-8.6.0/bin/elasticsearch -d PrivateTmp=true # 指定此进程可以打开的最大文件数 LimitNOFILE=65535 # 指定此进程可以打开的最大进程数 LimitNPROC=65535 # 最大虚拟内存 LimitAS=infinity # 最大文件大小 LimitFSIZE=infinity # 超时设置 0-永不超时 TimeoutStopSec=0 # SIGTERM是停止java进程的信号 KillSignal=SIGTERM # 信号只发送给给JVM KillMode=process # java进程不会被杀掉 SendSIGKILL=no # 正常退出状态 SuccessExitStatus=143 [Install] WantedBy=multi-user.target 

(11) 启动elasticsearch

[root@elasticsearch-1 ~]# systemctl start elasticsearch && systemctl enable elasticsearch 

(12) 设置elasticsearch密码

[root@elasticsearch-1 ~]# /elasticsearch-8.6.0/bin/elasticsearch-setup-passwords interactive 

在这里插入图片描述

(13) 查看集群状态

curl -u elastic: http://192.168.220.21:9200/_cat/health?v 

在这里插入图片描述

2、kibana

(1) 创建用户

[root@elasticsearch-1 ~]# useradd kibana [root@elasticsearch-1 ~]# echo "" | passwd --stdin kibana # 程序不以root用户启动 

(2) 解压kibana压缩包

[root@kibana kibana]# ls kibana-8.6.0-linux-x86_64.tar.gz # 将kibana-8.6.0-linux-x86_64.tar.gz解压到 / 目录下 [root@kibana kibana]# tar xf kibana-8.6.0-linux-x86_64.tar.gz -C / # 进行授权 [root@elasticsearch-1 ~]# chown -R kibana:kibana /kibana-8.6.0/ [root@kibana ~]# ll /kibana-8.6.0/ -d drwxr-xr-x. 11 kibana kibana 239 Aug 30 16:09 /kibana-8.6.0/ 

(3) 修改kibana.yml配置文件

vim /kibana-8.6.0/config/kibana.yml(添加如下内容)

# 语言设置为中文 i18n.locale: "zh-CN" # 对外开放端口 server.port: 5601 # 对外开放ip server.host: "192.168.220.20" # 服务名称 server.name: "kibana" # 设置连接elasticsearch集群的hosts elasticsearch.hosts: ["http://192.168.220.21:9200", "http://192.168.220.22:9200", "http://192.168.220.23:9200"] # 开启跨集群监控 monitoring.ui.ccs.enabled: true # 使用kibana_system用户连接elasticsearch集群 elasticsearch.username: "kibana_system" elasticsearch.password: "" # 设置日志格式以及日志存放地址 logging.appenders.default: type: file fileName: /data/kibana/logs/kibana.log layout: type: json 

(4) 将kibana加入systemctl

[root@kibana ~]# vim /usr/lib/systemd/system/kibana.service [Unit] Description=kibana After=network.target [Service] Type=simple # 此处需要写你自己kibana启动的用户 User=kibana # 此处需要写你kibana启动执行文件存放的路径 ExecStart=/kibana-8.6.0/bin/kibana PrivateTmp=true [Install] WantedBy=multi-user.target 

(5) 启动Kibana

[root@kibana ~]# systemctl start kibana && systemctl enable kibana 

(6) 在浏览器中访问 Kibana

访问地址:http://192.168.220.20:5601/ 并输入elastic账号以及密码, 即你在elasticsearch初始化的账号密码 

在这里插入图片描述

3、logstash

(1) 解压logstash压缩包

[root@kibana logstash]# ls logstash-8.6.0-linux-x86_64.tar.gz # 将logstash-8.6.0-linux-x86_64.tar.gz解压到 / 目录下 [root@kibana logstash]# tar xf logstash-8.6.0-linux-x86_64.tar.gz -C / 

(2) 进行logstash测试,查看logstash服务功能运行是否正常

# 在/logstash-8.6.0/config/目录下创建logstash-test.conf配置文件 [root@kibana logstash-8.6.0]# vim config/logstash-test.conf input { 
    # 控制台输入 stdin { 
    id => "my_plugin_id" } } output { 
    # 控制台输出 stdout { 
    } } # 执行logstash并指定上述配置文件 [root@kibana logstash-8.6.0]# bin/logstash -f config/logstash-test.conf -t (如若出现Configuration OK, 则表示logstash服务功能运行正常) # 上述检查正常后,直接启动logstash测试标准输入和输出,logstash启动以后输入“hello world”、“测试”等进行测试,会得到一个json格式的响应 [root@kibana logstash-8.6.0]# bin/logstash -e 'input { stdin{}} output { stdout{ codec => rubydebug }}' 

在这里插入图片描述
在这里插入图片描述
(3) 进行logstash连接elasticsearch测试

首先需在kibana可视化页面创建logstash用户

在这里插入图片描述
并且用户也需要指定用户权限

在这里插入图片描述
设置的权限如下所示

在这里插入图片描述
创建logstash配置文件进行测试

# 在/logstash-8.6.0/config/目录下创建logstash-file.conf配置文件 [root@kibana logstash-8.6.0]# vim config/logstash-file.conf input { 
    # 控制台输入内容作为logstash的输入 stdin { 
   } } output { 
    file { 
    # 将输出结果也输出在/tmp/logstash-test.log文件下一份 path => "/tmp/logstash-test.log" } elasticsearch { 
    # 对应elasticsearch的集群,以及对外端口 hosts => ["192.168.220.21:9200", "192.168.220.22:9200", "192.168.220.23:9200"] # 登录 user => "manager" password => "" } } # 执行logstash并指定上述配置文件 [root@kibana logstash-8.6.0]# bin/logstash -f config/logstash-file.conf 

控制台输入几个数据

在这里插入图片描述

查看/tmp/logstash-test.log文件内容,以及elasticsearch中的数据

在这里插入图片描述
在这里插入图片描述
数据推送成功,因为在推送elasticsearch时,未指定index,索引默认为log-*,数据将会存放到该index中,如上图所示。

4、使用filebeat+logstash收集nignx数据推送es

(1) 在一台nginx服务器上解压filebeat压缩包

[root@web /filebeat]# ls filebeat-8.6.0-linux-x86_64.tar.gz # 将logstash-8.6.0-linux-x86_64.tar.gz解压到 / 目录下 [root@web /filebeat]# tar xf filebeat-8.6.0-linux-x86_64.tar.gz -C / 

(2) 设置filebeat配置文件

# 在/filebeat-8.6.0-linux-x86_64目录下修改filebeat.yml文件 [root@web /filebeat-8.6.0-linux-x86_64]# vim filebeat.yml filebeat.inputs: # 设置收集类型为log - type: log enabled: true # 收集nginx日志文件/usr/local/nginx/logs/access.log的内容 paths: - nginx日志文件/usr/local/nginx/logs/access.log output.logstash: # 内容输出到对应192.168.220.20对应的5044端口上 hosts: ["192.168.220.20:5044"] enabled: true # 间隔为5s keep_alive: 5s 

(3) 设置logstash配置文件

# 在/logstash-8.6.0/config/目录下创建logstash-es-test.conf配置文件 [root@kibana logstash-8.6.0]# vim config/logstash-es-test.conf input { 
    # 从filebeat取数据,端口与filebeat配置文件一致,对外暴露5044端口接受数据 beats { 
    port => "5044" } } output { 
    # 输出到es集群中,并创建名称为nginx-%{+YYYY.MM.dd}的index索引 elasticsearch { 
    hosts => ["http://192.168.220.21:9200", "http://192.168.220.22:9200", "http://192.168.220.23:9200"] index => "nginx-%{+YYYY.MM.dd}" user => "manager" password => "" } } 

(4) 启动(需先启动logstash开启5044端口后,再启动filebeat)

# 启动logstash [root@kibana ~]# /logstash-8.6.0/bin/logstash -f /logstash-8.6.0/config/logstash-es-test.conf # 启动filebeat [root@web ~]# /filebeat-8.6.0-linux-x86_64/filebeat -c /filebeat-8.6.0-linux-x86_64/filebeat.yml 

(5) 访问nginx服务器的web服务

在这里插入图片描述
(6) 查看elasticsearch是否存在nginx-%{+YYYY.MM.dd}索引

在这里插入图片描述
(7) 最后查看索引中的数据

在这里插入图片描述
可以看到nginx服务的日志数据已到达elasticsearch,到此,ELK的简单部署已完成。如若想看接下来的扩展以及进阶内容,那就请敬请期待更新吧。

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/141222.html

(0)
上一篇 2025-05-21 13:33
下一篇 2025-05-21 13:45

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信