2021最新版7.x => ELK集群实战 FileBeat+Logstash+Elastic+Kibana

架构解析

  • elasticsearch原理
  • 一、单机部署elasticsearch
  • 二、ES集群
    • 原理介绍
    • 1.部署三台Elasticsearch
    • 2.部署filebeat
    • 3.部署logstash
  • 三、部署kibana


总结

  kibana面对用户量时,可以配置nginx进行负载均衡,分发访问日志的请求

 架构:nginx + 2台kibana+keepalived高可用

  企业 实用的ELK集群实战,下期还有Kafka消息队列的加入,高吞吐量的ELK日志集群

链接:https://blog.csdn.net/weixin_56903457/article/details/119865036?spm=1001.2014.3001.5502

pdf免费文档:https://download.csdn.net/download/weixin_56903457/21427005?spm=1001.2014.3001.5503

Elasticsearch

简介:存储来自filebeat、logstash的日志、会被序列化为JSON格式存储,进行分析日志及搜索。

支持的数据类型

  • 结构化文本 => 相当于RDBMS(数据库管理系统,结构化的SQL)

  • 非结构化文本 => 相当于NOSQL(非关系型数据库) Key/Value

  • 数字数据

  • 地理空间数据 => 根据IP来判断地理位置

一、单机部署Elastic

版本:7.x RPM包

🥇参考官方手册official:https://www.elastic.co/guide/en/elasticsearch/reference/7.14/rpm.html#rpm-repo

💯百度网盘:

链接:https://pan.baidu.com/s/1mTd80InP5NKv_xhCdrPUJw 提取码:help

环境:ela1:192.168.178.24

注意:关闭 firewalld、selinux

1. 下载公共密钥: rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch
2. 配置安装的yum源:vim /etc/yum.repos.d/es.repo
[elasticsearch]
name=Elasticsearch repository for 7.x packages
baseurl=https://artifacts.elastic.co/packages/7.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md
3. 安装elastic:yum -y install elasticsearch
4. 运行elastic自启动项:systemctl daemon-reload
                      systemctl enable elasticsearch.service
5. 启动elastic:systemctl start elasticsearch
6. 查看端口:ss -anpt|grep -E '9200|9300'
LISTEN     0      128         :::9200                                   
LISTEN     0      128         :::9300   
7. 测试完毕后停用elastic:systemctl stop elasticsearch    #方便后面的集群使用

ES集群

原理:

  • 高可用性

    • 服务的可用性 => 允许其他节点暂停服务,集群部署。

    • 数据的可用性 => 即使一台出现故障,数据也不会丢失,因为其他节点有备份。

  • 可扩展性

    • 用户的访问量,做集群分发请求到每个节点

  • Elastic分布式架构的好处

    • 冗余的存储 => 实现存储的扩容

    • 集群部署 => 提高系统的高可用性

  • Elastic分布式架构

    • 不同的集群用不同名字进行区别

    • 通过配置文件修改对应的集群节点名

    • 一个集群可以有一个或多个节点

  • 集群中的节点角色

    • Master-eligible Node => 被选举出来的master

  • 分片技术

  • 提高数据的读写速度、性能、数据可用性

  • 主分片 => 将数据分布到集群的所有节点,实现读写速度

  • 副本 => 用于解决数据的可用性,每个Node将自己的数据分到其他Node

🥇集群架构:filebeat (一次收集日志)+ logstash(二次收集) + 3台elasticsearch(存储) + kibana(展示)

端口:logstash 5044      elastic 9200|9300       kibana 5601

版本:7.x RPM包

🌍环境:ela1:192.168.178.24 ela2:192.168.178.25 ela3:192.168.178.26

二、集群部署Elastic

ela1

#接着上面的单机部署
#======================= ela1 =========================
-------------Ntp---------------
1. 安装ntp服务器进行对表:yum -y install ntp
   配置文件:vim /etc/ntp.conf
        server 127.127.1.0          #本地回送地址
        restrict 192.168.178.24(本机IP)   #允许本机使用
        restrict  0.0.0.0 mask 255.255.255.0  #允许其他网络使用
    重启服务:systemctl  restart  ntpd
2. DNS域名解析:vim /etc/hosts
    192.168.178.24  ela1
    192.168.178.25  ela2
    192.168.178.26  ela3
​
3. 编写配置文件(.yaml): vim /etc/elasticsearch/elasticsearch.yml 
-------------------------------------
找到   cluster.name: elk   #elk为集群名,集群中其他Node需配置一样
node.name: ela1 #自定义Node名,与域名解析一样即可
network.host: 0.0.0.0  #监听的地址,为哪些Node服务,这里代表所有   
http.port: 9200       #对外服务的端口
discovery.seed_hosts:   #自动发现的Node
        - ela1          #第一个Node填DNS解析名
        - 192.168.178.25:9200   #第二个Node填Ip:port
        - 192.168.178.26        #第三个Node只需填IP
cluster.initial_master_nodes: ["ela1", "ela2", "ela3"]
                                 #master为谁,如果master宕机了,就选后面的
添加    node.data: true   #该节点是否是数据节点  ture > 是数据节点   false
------------------------------------------
​
4. 拷贝hosts给其他Node:scp -r /etc/hosts ela2:/etc/hosts
                      scp -r /etc/hosts ela3:/etc/hosts
​
5. 拷贝yum配置:scp -r /etc/yum.repos.d/es.repo  ela2:/etc/yum.repos.d/
               scp -r /etc/yum.repos.d/es.repo  ela2:/etc/yum.repos.d/
​
6. ▲ 注意:等ela2、ela3安装完elastic再进行拷贝
拷贝.yaml配置文件:scp -r /etc/elasticsearch/elasticsearch.yml  ela2:/etc/elasticsearch/
                scp -r /etc/elasticsearch/elasticsearch.yml  ela3:/etc/elasticsearch/

ela2

#======================= ela2 =========================
1. 对表ela1:yum -y install ntpdate   #安装ntp客户端
            ntpdate 192.168.178.24   #填写ntpd服务器IP
2.下载公共密钥: rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch
3.安装elastic:yum -y install elasticsearch
4.运行elastic自启动项:systemctl daemon-reload
                      systemctl enable elasticsearch.service
​
5.修改.yaml配置文件:vim /etc/elasticsearch/elasticsearch.yml
找到进行修改 node.name: ela2   #修改节点名即可,其他不动

ela3

#======================= ela3 =========================
1. 对表ela1:yum -y install ntpdate   #安装ntp客户端
            ntpdate 192.168.178.24   #填写ntpd服务器IP
2.下载公共密钥: rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch
3.安装elastic:yum -y install elasticsearch
4.运行elastic自启动项:systemctl daemon-reload
                      systemctl enable elasticsearch.service
​
5.修改.yaml配置文件:vim /etc/elasticsearch/elasticsearch.yml
找到进行修改 node.name: ela3   #修改节点名即可,其他不动

ela1/ela2/ela3

#---------- 依次启动elastic -----------
ela1: systemctl start elasticsearch
ela2: systemctl start elasticsearch
ela3: systemctl start elasticsearch
在每个Node上查看集群健康状态:curl -X GET "localhost:9200/_cat/health?v"
查看集群节点信息:curl -X GET "localhost:9200/_cat/nodes?v"

⛔️注意:按照先后顺序依次启动,不要抢着去启动,等上一个启动完,在启动下一个

🗡问题解决:

示例:
使用命令查看监控状态:curl -X GET "localhost:9200/_cat/nodes?v"
#------------------- ela1、ela3 ---------------------------
epoch      timestamp cluster status node.total node.data shards pri relo init unassign 
  elk     green           2         2      2   1                      
#------------------- ela2 ---------------------------------    
epoch      timestamp cluster status node.total node.data shards pri relo init unassign 
  elk     green           1         1      1   1 
#-----------------------------------------------------------
结果:ela1与ela3在集群中,ela2不在,只有2个
原因:每个节点之间都会去测对方的状态,会开启秒表,在一定时间内没感应到对方的存在,就会踢出集群,启动时间长.....
-------------------------------------------------------------
解决,在踢出集群的Node上:rm -rf  /var/lib/elasticsearch/nodes/
                      systemctl restart elasticsearch
再次查看:[root@ela1 ~]# curl -X GET "localhost:9200/_cat/nodes?v"
ip             heap.percent ram.percent e   master name
192.168.178.24           26      .....     cdfhilmrstw -      ela1
192.168.178.26           10      .....     cdfhilmrstw *      ela3
192.168.178.25           27      .....     cdfhilmrstw -      ela2
​

三、部署filebeat与logstash

原理:filebeat对日志进行收集后过滤,交到logstash上,再对日志进行自定义索引字段二次过滤

🌍环境:filebeat:192.168.178.27 logstash:192.168.178.28

💯 百度网盘:

链接:https://pan.baidu.com/s/1Upkd2qFLmfbuaYZ4Gwr5NQ

提取码:help

注意:关闭 firewalld、selinux

FileBeat

 对表ela1:yum -y install ntpdate   #安装ntp客户端
            ntpdate 192.168.178.24   #填写ntpd服务器IP
 修改主机名:hostname set-hostname filebeat1
​
1. rz上传压缩包解压缩到指定目录: tar xzvf filebeat‐7.13.2‐linux‐x86_64.tar.gz  ‐C  /usr/local/ 
​
2.重命名:  mv /usr/local/filebeat‐7.13.2‐linux‐x86_64  /usr/local/filebeat
​
3.配置systemd方式的filebeat启动管理文件:vim /usr/lib/systemd/system/filebeat.service
[Unit]
Description=Filebeat sends log files to Logstash or directly to Elasticsearch
Wants=network-online.target
After=network-online.target
​
[Service]
ExecStart=/usr/local/filebeat/filebeat  -c /usr/local/filebeat/filebeat.yml
Restart=always
​
[Install]
WantedBy=multi-user.target
​
4. 启动服务:systemctl start filebeat
           systemctl status filebeat
​
5. 修改.yaml配置文件:vim /usr/local/filebeat/filebeat.yml 
找到注释 
#output.elasticsearch:
        #  hosts: ["localhost:9200"]
找到解开注释 
output.logstash:
  hosts: ["192.168.178.28:5044"]    #填写logstash的IP地址及端口
​
6. 开启filebeat自带的nginx模块进行收集数据:    
/usr/local/filebeat/filebeat -c /usr/local/filebeat/filebeat.yml modules enable nginx
​
7. 安装nginx:yum -y install epel-release && yum -y install nginx  #前面执行成功就执行后面
​
8. 开启nginx,往nginx的access/error日志中添加数据:vim /var/log/nginx/{access.log,error.log}
​
9. 删除防止重读的锁.lock:rm -rf /usr/local/filebeat/data/
​
10. 执行filebeat:/usr/local/filebeat/filebeat  -c /usr/local/filebeat/filebeat.yml  -e

Logstash

 对表ela1:yum -y install ntpdate   #安装ntp客户端
            ntpdate 192.168.178.24   #填写ntpd服务器IP
 修改主机名:hostname set-hostname logstash1
​
1. rz上传压缩包解压缩到指定目录: tar ‐xf logstash‐7.13.2‐linux‐x86_64.tar.gz ‐C /usr/local/     
​
2. 重命名: mv /usr/local/logstash‐7.13.2/ /usr/local/logstash
​
3. 编写配置:vim /usr/local/logstash/config/first-pipeline.conf 
input {
        beats {
                port => 5044
        }
}
​
filter {   #过滤
        grok {
                match => { "message" => "%{COMBINEDAPACHELOG}" }  #定义格式输出的信息,类似与nginx日志格式
                remove_field => ["message"]   #在信息中移除该字段
        }
        geoip {
                source => "clientip"        #定位信息中IP的地理位置
        }
}
​
​
output {
        stdout { codec => rubydebug }    #先打印在屏幕上  codec是一种输出格式
​
        #if [log][file][path] == "/var/log/nginx/access.log" {  #elastic自带的变量
        if [event][dataset] == "nginx.access" {                 #filebeat自带变量
            elasticsearch {
            hosts => ["192.168.178.24:9200","192.168.178.25:9200","192.168.178.26:9200"]
            index => "%{[host][hostname]}-nginx-access-%{+YYYY.MM.dd}"
                }
        }
        #else if [log][file][path] == "/var/log/nginx/error.log" {
        else if [event][dataset] == "nginx.error" {
            elasticsearch {     #填写elastic集群的IP:port
             hosts => ["192.168.178.24:9200","192.168.178.25:9200","192.168.178.26:9200"]
             index => "%{[host][hostname]}-nginx-error-%{+YYYY.MM.dd}"  #索引名 主机名-nginx-error-时间点(年.月.日)
                }
        }
}
        
4. 启动程序:
        /usr/local/logstash/bin/logstash -f /usr/local/logstash/config/first-pipeline.conf
        

ela1/ela2/ela3

1. 查看集群中的索引:curl -X GET "192.168.178.24:9200/_cat/indices"   
                  curl -X GET "192.168.178.25:9200/_cat/indices"
                  curl -X GET "192.168.178.26:9200/_cat/indices"
green open filebeat1-nginx-error-2021.08.21 CuvjMu05TLaZCb-3LG03xg 1 1 26 0 133.8kb 66.9kb
green open filebeat1-nginx-access-2021.08.21YiyagsrmSMSW4YoK-LLYHw 1 1 69 0 187.9kb 93.9kb

四、部署Kibana

原理:将elasticsearch上存储的数据以JSON格式再kibana上进行Web前端页面的展示

🌍环境:kibana1:192.168.178.29

 对表ela1:yum -y install ntpdate   #安装ntp客户端
            ntpdate 192.168.178.24   #填写ntpd服务器IP
 修改主机名:hostname set-hostname kibana1
1. 解压缩到指定目录:tar -xvzf kibana-7.13.2-linux-x86_64  -C /usr/local/
                    mv /usr/local/kibana-7.13.2-linux-x86_64/  /usr/local/kibana
​
2.修改.yaml配置文件:vim /usr/local/kibana/config/kibana.yml 
    # server.port: 5601   # 对外提供的监听端口
    # server.host: "0.0.0.0"  # 服务的IP,这里代表所有
    # elasticsearch.hosts: ["http://192.168.178.24:9200"] # ela1的IP
    # logging.dest: /var/log/kibana/kibana.log  #日志最终的存放位置,待会进行创建
    # i18n.locale: "zh-CN"   #使用中文Web前端页面
​
3. 创建用户:useradd ela
4. 创建目录并授权:mkdir  /run/kibana  /var/log/kibana
                chown -R ela.ela  /run/kibana /var/log/kibana/ /usr/local/kibana
​
5. 运行kibana:su - ela   #切换用户,kibana默认不使用root登录
    在后台运行:nohup /usr/local/kibana/bin/kibana &
    查看端口: ss -anpt | grep 5601
​
6. 强制使用root运行kibana:nohup /usr/local/kibana/bin/kibana --allow-root & #二者选一即可
​
7. 浏览器访问:http://192.168.178.29:5601
#===============增加索引模式=================
1. 左上角 "三" >  Management > Stack Management
2. 左方找到 "索引模式" > 创建索引模式 > 文本框填写"filebeat1-nginx-access-2021.08.21" > 下一步
   > 时间字段选择 @timestamp > 创建索引模式
#==============查看及分析索引字段===============
1. 左上角 "三" > Discover > 在左方根据自己的需求选择查看的字段
​
#==============创建仪表板分析================
1. 左上角 "三" > Overview > 仪表板 > 创建新的仪表板 > 根据需求拖动字段查看排名.......

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值