ELK+Filebeat+Kafka+Zookeeper日志分析系统

目录

一、ELK

Ⅰ、部署jdk

(1)环境

(2)关闭防火墙,配置时间同步

(3)删除系统自带openjdk并安装jdk1.8.0_201

Ⅱ、node1、node2节点部署elasticsearch

(1)安装elasticsearch

(2)修改主配置文件

(3)启动elasticsearch

Ⅲ、node1、node2节点安装elasticsearch-head插件

(1)编译安装node

(2)安装phantomjs

(3)安装elasticsearch-head数据可视化工具

(4)启动elasticsearch-head 服务

(5)创建索引

Ⅳ、apache节点部署logstash

(1)部署httpd、jdk

(2)安装logstash

(3)定义输入和输出流 

(4)定义logstash配置文件 

 Ⅴ、node1节点部署kibana

(1)安装kibana的rpm包,并修改配置文件

(2)开启、验证kibana

 Ⅵ、apache节点服务器的日志添加到 ES 并通过 Kibana 显示

二、ELFK

Ⅰ、Filebeat工作流程

Ⅱ、下载安装Filebeat

(1)filebeat模块

(2)修改Filebeat主配置文件

Ⅲ、在logstash节点配置.conf文件

Ⅳ、Filebeat节点启动Filebeat

Ⅴ、查看索引

三、搭建ELFK+Kafka+zookeeper

Ⅰ、数据流向

Ⅱ、搭建Kafka+Zookeeper并创建主题

Ⅲ、filebeat节点配置

Ⅳ、logstash节点配置

Ⅴ、创建索引、查看kibana


一、ELK

ELK 是一整套解决方案,是三个软件产品的首字母缩写: Elasticsearch,Logstash 和 Kibana。这三款软件都是开源软件,通常是配合使用, 而且又先后归于 Elastic.co 公司名下,故被简称为 ELK 协议栈。

Ⅰ、部署jdk

(1)环境

三台centos7(jdk1.8.0_201),软件安装包

node1:  192.168.116.22  (elasticsearch、kibana[node、phantomjs])

node2:  192.168.116.23  (elasticsearch)

apache:192.168.116.120  (logstash、apache)

(2)关闭防火墙,配置时间同步

systemctl stop firewalld && systemctl disable firewalld
setenforce 0
ntpdate ntp.aliyun.com

(3)删除系统自带openjdk并安装jdk1.8.0_201

rpm -qa | grep java
#查看系统自带的openjdk
rpm -evh --nodeps ***
#进行删除

rpm -ivh jdk-8u201-linux-x64.rpm
#安装jdk1.8.0_201的rpm包

vim /etc/profile.d/java.sh
#配置环境变量
export JAVA_HOME=/usr/java/jdk1.8.0_201-amd64
export CLASSPATH=.:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar
export PATH=$JAVA_HOME/bin:$PATH
#1.输出定义java的工作目录
#2.输出指定java所需的类文件
#3.输出重新定义环境变量,$PATH一定要放在$JAVA_HOME的后面,让系统先读取到工作目录中的版本信息

source /etc/profile.d/java.sh
#读取profile
java -version
#查看jdk版本
java version "1.8.0_201"
Java(TM) SE Runtime Environment (build 1.8.0_201-b09)
Java HotSpot(TM) 64-Bit Server VM (build 25.201-b09, mixed mode)

Ⅱ、node1、node2节点部署elasticsearch

(1)安装elasticsearch

rpm -ivh elasticsearch-5.5.0.rpm 
#安装elasticsearch
systemctl daemon-reload && systemctl enable elasticsearch.service
#加载系统服务

(2)修改主配置文件

cp /etc/elasticsearch/elasticsearch.yml /etc/elasticsearch/elasticsearch.yml.bak
#备份配置文件

vim /etc/elasticsearch/elasticsearch.yml
 
#17行,取消注释,指定群集名称
cluster.name: my-elk-cluster
#23行,取消注释,指定节点名称
node.name: node1
#33行,取消注释,指定数据存放路径
path.data: /data/elk_data
#37行,取消注释,指定日志存放路径
path.logs: /var/log/elasticsearch/
#43行,取消注释,不在启动的时候锁定内存(前端缓存,与IOPS-性能测试方式,每秒读写次数相关)
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: ["node1", "node2"]

---wq
 

grep -v "^#" /etc/elasticsearch/elasticsearch.yml

cluster.name: my-elk-cluster
node.name: node1
path.data: /data/elk_data
path.logs: /var/log/elasticsearch/
bootstrap.memory_lock: false
network.host: 0.0.0.0
http.port: 9200
discovery.zen.ping.unicast.hosts: ["node1", "node2"]
#------------------此处省略部分内容-----------------

将node1的elasticsearch配置文件复制给node2,修改node.name为node2即可。

mkdir -p /data/elk_data
#创建数据存放路径
chown elasticsearch:elasticsearch /data/elk_data/
#授权给elasticsearch用户

(3)启动elasticsearch

systemctl start elasticsearch.service 
netstat -natp | grep 9200		#启动较慢,需等待
tcp6       0      0 :::9200           :::*           LISTEN     1478/java           

查看节点信息

浏览器访问

http://192.168.116.22:9200

http://192.168.116.23:9200

查看节点 node1、node2 的信息

 浏览器访问

http://192.168.116.22:9200/_cluster/health?pretty

http://192.168.116.23:9200/_cluster/health?pretty

查看群集的健康情况,可以看到status值为green(绿色),表示节点健康运行

Ⅲ、node1、node2节点安装elasticsearch-head插件

ES 在 5.0 版本后,插件需要作为独立服务进行安装,需要使用 npm 工具(NodeJS 的包管理工具)安装。安装 Elasticsarch-head 需要提前安装好依赖软件 node 和 phantomjs。

(1)编译安装node

node是一个基于 Chrome V8 引擎的 JavaScript 运行环境。
phantomjs是一个基于 webkit 的 JavaScriptAPI,可以理解为一个隐形的浏览器,任何基于 webkit 浏览器做的事情,它都可以做到。

yum install -y gcc gcc-c++ make
tar zxvf node-v8.2.1.tar.gz -C/opt
cd /opt/node-v8.2.1/
./configure
make -j 4 && make install

(2)安装phantomjs

mkdir /usr/local/elk/
tar jxvf phantomjs-2.1.1-linux-x86_64.tar.bz2 -C/usr/local/elk/
cd /usr/local/src/phantomjs-2.1.1-linux-x86_64/bin
cp phantomjs /usr/local/bin

(3)安装elasticsearch-head数据可视化工具

tar zxvf elasticsearch-head.tar.gz -C /usr/local/elk/
cd /usr/local/src/elasticsearch-head/
npm install

(4)启动elasticsearch-head 服务

vim /etc/elasticsearch/elasticsearch.yml
 
##末行添加以下内容
http.cors.enabled: true			##开启跨域访问支持,默认为false
http.cors.allow-origin: "*"		##指定跨域访问允许的域名地址为所有
 
systemctl restart elasticsearch.service
netstat -antp | grep 9200

node1:

node2: 

cd /usr/local/elk/elasticsearch-head/
npm run start &
[1] 71012
> elasticsearch-head@0.0.0 start /usr/local/src/elasticsearch-head
> grunt server
 
Running "connect:server" (connect) task
Waiting forever...
Started connect web server on http://localhost:9100
^C
netstat -natp | grep 9100
tcp        0      0 0.0.0.0:9100            0.0.0.0:*               LISTEN      71022/grunt       

node1: 

 node2:

 通过 Elasticsearch-head 查看 ES 信息

通过浏览器访问 http://192.168.161.11:9100 地址并连接群集

(5)创建索引

curl -X PUT 'localhost:9200/index-demo/test/1?pretty&pretty' -H 'content-
Type: application/json' -d '{"user":"zhangsan","mesg":"hello world"}'

 浏览器查看索引;索引默认被分片为 5 个,并且有一个副本。

点击数据浏览,查看 创建的索引的信息 

Ⅳ、apache节点部署logstash

(1)部署httpd、jdk

yum install -y httpd
systemctl enable --now httpd

rpm -qa | grep java
#查看系统自带的openjdk
rpm -evh --nodeps ***
#进行删除

rpm -ivh jdk-8u201-linux-x64.rpm
#安装jdk1.8.0_201的rpm包

vim /etc/profile.d/java.sh
#配置环境变量
export JAVA_HOME=/usr/java/jdk1.8.0_201-amd64
export CLASSPATH=.:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar
export PATH=$JAVA_HOME/bin:$PATH
#1.输出定义java的工作目录
#2.输出指定java所需的类文件
#3.输出重新定义环境变量,$PATH一定要放在$JAVA_HOME的后面,让系统先读取到工作目录中的版本信息

source /etc/profile.d/java.sh
#读取profile
java -version
#查看jdk版本
java version "1.8.0_201"
Java(TM) SE Runtime Environment (build 1.8.0_201-b09)
Java HotSpot(TM) 64-Bit Server VM (build 25.201-b09, mixed mode)

(2)安装logstash

rpm -ivh logstash-5.5.1.rpm 
systemctl enable logstash.service --now
ln -s /usr/share/logstash/bin/logstash /usr/local/bin/

常用选项 

-f    通过这个选项可以指定 Logstash 的配置文件,根据配置文件配置 Logstash 的输入和输出流
-e   从命令行中获取,输入、输出后面跟着字符串,该字符串可以被当做 Logstash 的配置(如果是空,则默认使用 stdin 作为输入,stdout 作为输出)
-t    测试配置文件是否正确,然后退出

(3)定义输入和输出流 

输入采用标准输入,输出采用标准输出

logstash -e 'input { stdin{} } output { stdout{} }'
···
2022-07-10T11:08:49.072Z apache 
www.baidu.com                                  #键入内容(标准输入)
2022-10-11T11:08:56.746Z apache www.baidu.com  

2022-07-10T11:09:00.236Z apache 
www.google.com                                 #输入结果(标准输出)
2022-10-11T11:09:13.719Z apache www.google.com

rubydebug 输出详细格式显示,codec 为一种编解码器

logstash -e 'input { stdin{} } output { stdout{ codec=>rubydebug } }'
....
The stdin plugin is now waiting for input:
19:11:17.849 [Api Webserver] INFO  logstash.agent - Successfully started Logstash API endpoint {:port=>9600}
....
www.google.com
#stdin
{
      "@version" => "1",
       "message" => "www.google.com",
    "@timestamp" => 2022-10-11T06:37:43.442372938Z,
          "host" => {
        "hostname" => "bak25"
    },
         "event" => {
        "original" => "www.google.com"
    }
}
#output

使用 logstash 将标准输入写入到 ES 中

logstash -e 'input { stdin{} } output { elasticsearch { hosts=>
["192.168.116.22:9200"] } }'

(4)定义logstash配置文件 

例如,修改 logstash 配置文件,让其收集系统日志 /var/log/messages,并将其输出到 elasticsearch 中

chmod o+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{
#输出到ES
       hosts =>["192.168.161.11:9200", "192.168.161.12:9200"]
#指定ES服务器的地址和端口,为避免单机故障,建议写全
       index =>"system-%{+YYYY.MM.dd}"
#指定输出到ES的索引格式
   }
}

systemctl restart logstash.service 

 Ⅴ、node1节点部署kibana

(1)安装kibana的rpm包,并修改配置文件

cp /etc/kibana/kibana.yml /etc/kibana/kibana.yml.bak
#备份配置文件
 
vim /etc/kibana/kibana.yml

#2行,取消注释,kibana服务的默认监听端口为5601
server.port: 5601

#7行,取消注释,设置kibana的监听地址,0.0.0.0代表所有地址
server.host: "0.0.0.0"

#21行,取消注释,设置和ES建立连接的地址和端口
elasticsearch.url: "http://192.168.116.22:9200"

#30行,取消注释,设置在ES中添加.kibana索引
kibana.index: ".kibana"

(2)开启、验证kibana

systemctl enable --now kibana
 netstat -natp | grep 5601

浏览器访问 http://192.168.116.22:5601

第一次登录需要添加一个 ES 索引,点击 create 创建,索引添加完成后,点击 Discover 按钮可查看图表信息及日志信息

 Ⅵ、apache节点服务器的日志添加到 ES 并通过 Kibana 显示

vim /etc/logstash/conf.d/apache_log.conf
 
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.116.22:9200", "192.168.116.23:9200"]
            index => "apache_access-%{+YYYY.MM.dd}"
        }
    }
	if [type] == "error" {
        elasticsearch {
            hosts => ["192.168.116.22:9200", "192.168.116.23:9200"]
            index => "apache_error-%{+YYYY.MM.dd}"
        }
    }
}
cd /etc/logstash/conf.d
/usr/share/logstash/bin/logstash -f apache_log.conf
······
19:50:19.909 [[main]-pipeline-manager] INFO  logstash.outputs.elasticsearch - Using mapping template from {:path=>nil}

确保apache开启可以提供服务,在elasticsearch上查看索引是否创建

在kibana上创建索引

点击创建

在discover查看

二、ELFK

由于 logstash 会大量占用系统的内存资源,一般我们会使用 filebeat 替换 logstash 收集日志的功能,组成 ELFK 架构;或用 fluentd 替代 logstash 组成 EFK(elasticsearch/fluentd/kibana),由于 fluentd 是由 Go 语言开发的,一般在 K8s 环境中使用较多

Download Filebeat • Lightweight Log Analysis | Elastic

Ⅰ、Filebeat工作流程

filebeat 将日志收集后交由 logstash 处理
logstash 进行过滤、格式化等操作,满足过滤条件的数据将发送给 ES
ES 对数据进行分片存储,并提供索引功能
Kibana 对数据进行图形化的 web 展示,并提供索引接口

在以上原有ELK系统中添加一个filebeat节点

环境

192.168.116.23      elasticsearch/logstash/mysql-slave                                     (原node2)
192.168.116.22      elasticsearch/kibana/mysql-slave                                          (原node1)
192.168.116.120    nigin/filebeat                                                                        (原apache)

Ⅱ、下载安装Filebeat

关闭防火墙以及防护,下载安装Filebeat

systemctl disable --now firewalld
setenforce 0

(1)filebeat模块

查看、开启支持模块

#查看支持模块
filebeat modules list



#开启支持模块
filebeat modules enable system nginx mysql

查看支持模块 

 开启成功

(2)修改Filebeat主配置文件

#rpm方式安装
vim /etc/filebeat/filebeat.yml

#tar.gz方式安装
vim /安装目录/filebeat.yml

#配置文件来自Filebeat版本6.2.4

filebeat.prospectors:
#21行,指定log类型,从日志文件中读取消息
- type: log

#24行,开启日志收集功能,默认为false
  enabled: true

#28行,指定监控的日志文件
paths:
    - /usr/local/nginx/logs/access.log
    - /usr/local/nginx/logs/erro.log

#31行,添加以下内容,注意格式
  fields: 
    service_name: nginxlog
    log_type: log
    service_id: 192.168.116.120

#-------------------------- Elasticsearch output ------------------------------
该区域内容全部注释
#----------------------------- Logstash output --------------------------------

#157行,取消注释
output.logstash:
#159行,取消注释,指定logstash的IP和端口号
  hosts: ["192.168.116.120:5044"]

Ⅲ、在logstash节点配置.conf文件

cd /etc/logstash/conf.d
vim logstash.conf

input {
    beats {
        port => "5044"
    }
}
output {
    elasticsearch {
        hosts => ["192.168.116.22:9200", "192.168.116.23:9200"]
        index => "%{[fields][service_name]}-%{+YYYY.MM.dd}"
    }
    stdout {
        codec => rubydebug
    }
}

Ⅳ、Filebeat节点启动Filebeat

确保logstash节点已开启,否则filebeat无法连接上logstash

#tar.gz方式安装
cd /安装目录/
./filebeat -e -c filebeat.yml
#启动filebeat,-e记录到stderr并禁用syslog /文件输出,-c指定配置文件

#rpm包方式安装
/usr/bin/filebeat -e -c /etc/filebeat/filebeat.yml

Ⅴ、查看索引

查看索引是否存在

*这里图文无关,应该是配置的nginxlog

 在kibana上的logstash索引

三、搭建ELFK+Kafka+zookeeper

Kafka+zookeeper

环境

192.168.116.22    elasticsearch

192.168.116.23    elasticsearch

192.168.116.25    logstash

192.168.116.26    kafka+zookeeper/nginx/filebeat

192.168.116.111   kafka+zookeeper

192.168.116.120  kafka+zookeeper

Ⅰ、数据流向

第一层、数据采集层

数据采集层位于最左边的业务服务器集群上,在每个业务服务器上面安装了filebeat 做日志收集,然后把采集到的原始日志发送到 Kafka+zookeeper 集群上。

第二层、消息队列层

原始日志发送到 Kafka+zookeeper 集群上后,会进行集中存储,此时,filbeat 是消息的生产者,存储的消息可以随时被消费。

第三层、数据分析层

Logstash 作为消费者,会去 Kafka+zookeeper 集群节点实时拉取原始日志,然后将获取到的原始日志根据规则进行分析、清洗、过滤,最后将清洗好的日志转发至 Elasticsearch 集群。

第四层、数据持久化存储

Elasticsearch 集群在接收到 logstash 发送过来的数据后,执行写磁盘,建索引库等操作,最后将结构化的数据存储到 Elasticsearch 集群上。

第五层、数据查询、展示层

Kibana 是一个可视化的数据展示平台,当有数据检索请求时,它从 Elasticsearch集群上读取数据,然后进行可视化出图和多维度分析

Ⅱ、搭建Kafka+Zookeeper并创建主题

Kafka+Zookeeper群集

创建nginx主题

kafka-topic.sh --create --bootstrap-server ljp26:9092,ljp111:9092,ljp120:9092 
--partitions 3 --replication-factor 3 --topic nginx

topic信息 

Ⅲ、filebeat节点配置

vim /etc/filebeat/filebeat.yml
# ============================== Filebeat inputs ===============================

filebeat.inputs:

- type: log

  enabled: true

  paths:
    - /usr/local/nginx/logs/access.log

#------------------------------- Kafka Output ----------------------------------
output.kafka:
 hosts: ["192.168.116.26:9092","192.168.116.111:9092","192.168.116.120:9092"]
 topic: 'nginx'
 partition.round_robin:
  reachable_only: true

/usr/share/filebeat/bin/filebeat -e -c /etc/filebeat/filebeat.yml
netstat -natp | grep filebeat
tcp 0 0 192.168.116.26:51640  192.168.116.26:9092  ESTABLISHED 35827/filebeat

Ⅳ、logstash节点配置

vim /etc/logstash/con.d/nginx.conf

input {
 kafka {
  bootstrap_servers => ["192.168.116.26:9092,192.168.116.111:9092,192.168.116.120:9092"]
  topics => ["nginx"]
  codec => json {
          charset => "UTF-8"
  }
  decorate_events => false
 }
}
output {
  elasticsearch {
   hosts => ["192.168.116.22:9200","192.168.116.23:9200"]
   index => 'nginx-access-%{+YYYY.MM.dd}'
  }
}

重新启动logstash

systemctl restart logstash.service

Ⅴ、创建索引、查看kibana

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值