内部日志分析系统ELK+kafka+filebeat搭建

14 篇文章 1 订阅
3 篇文章 0 订阅

内部日志分析系统ELK+kafka+filebeat搭建

如需看各个名词的含义可以点击下方链接:
链接: ELK+kafka+filebeat简介.

本篇文章为学习过程中的汇总,可能写的会很乱,这里先行道歉!

一、准备环境

环境:jdk、elasticsearch、logstash、kibana、Kafka、filebeat
Head(前端显示页面):依赖node、phantomjs
Kafka依赖于zookeper
虚拟机:两台es:10.8.161.147、10.8.161.48 单个运行内存需要4G
三台Kafka:10.8.161.77、10.8.161.140、10.8.161.146
一台logstash:10.8.161.23
一台filebeat:10.8.161.80
一台Kibana:10.8.161.45
在这里插入图片描述

二、环境配置:

以下这些配置都是再有所有的安装包之后进行配置,下面省略了解压过程,压缩包全部解压到了/usr/local/目录下。
注意:在环境搭建过程中每个压缩包的版本一定要一致,不然可能会出现不兼容问题

1、ES

ES的运依赖于jdk,需要先配置jdk的环境变量:

(1)vim /etc/profile
JAVA_HOME=/usr/local/java //修改jdk为Java
PATH=$ JAVA_HOME/bin:$ PATH
Source /etc.profile
修改ES配置文件/usr/local/elasticsearch-6.5.4/config/lasticsearch.yml

(2)第一台ES10.8.161.147添加如下内容
cluster.name: elk //集群名称
node.name: elk01//主节点ES名称
node.master: true//是否为主节点
node.data: true//数据节点
path.data: /data/elasticsearch/data//数据目录
path.logs: /data/elasticsearch/logs//日志存放目录
bootstrap.memory_lock: false//是否禁用交换分区
bootstrap.system_call_filter: false//系统进行过滤
network.host: 0.0.0.0//绑定节点主机,都可以访问
http.port: 9200//对外部服务的端口号,9300是内部集群之间通信端口
discovery.zen.ping.unicast.hosts:[“10.8.161.147:9300,10.8.161.148:930”]
discovery.zen.minimum_master_nodes: 1 //几个主机点
discovery.zen.ping_timeout: 150s
discovery.zen.fd.ping_retries: 10
client.transport.ping_timeout: 60s
http.cors.enabled: true
http.cors.allow-origin: “*”

(3)第二台ES10.8.161.148配置文件添加:
cluster.name: elk //集群名称
node.name: elk02//主节点ES名称
node.master: false//是否为主节点
node.data: true//数据节点
path.data: /data/elasticsearch/data//数据目录
path.logs: /data/elasticsearch/logs//日志存放目录
bootstrap.memory_lock: false//是否禁用交换分区
bootstrap.system_call_filter: false//系统进行过滤
network.host: 0.0.0.0//绑定节点主机,都可以访问
http.port: 9200//对外部服务的端口号,9300是内部集群之间通信端口
discovery.zen.ping.unicast.hosts:[“10.8.161.147:9300,10.8.161.148:930”]
discovery.zen.minimum_master_nodes: 1 //几个主机点
discovery.zen.ping_timeout: 150s
discovery.zen.fd.ping_retries: 10
client.transport.ping_timeout: 60s
http.cors.enabled: true
http.cors.allow-origin: “*”
配置文件修改之后需要创建数据和日志目录,并将安装、数据、日志目录进行普通用户的所有组、所有主的授权

(4)ES进行配置优化
·修改JVM堆栈大小:堆栈大小一般为物理内存的一半
Vim //usr/local/elasticsearch-6.5.4/config/jvm.options
-Xms2g
-Xmx2g
·增加最大文件打开数: vim /etc/security/limit.conf

    • nofile 65535
      ·增加最大内存映射数vim /etc/sysctl.conf
      vm.max_map_count=262144 #elasticsearch用户拥有的内存权限太小,至少需要262144;vm.swappiness=0 #表示最大限度使用物理内存,在内存不足的情况下,然后才是swap空间

(5)启动ES:切换到普通用户下,在ES安装目录的bin目录下有elasticsearch脚本可以进行启动。
nohup ./bin/elasticsearch & //放在后台进行启动,并生成nohup.out日志文件
Nohup.out日志文件是可以让我们清晰看见启动过程是否正常,以及让我们知道一些启动条件,可以使用tail -f nohup.out实时查看启动状态

2、安装head程序

Head需要在node环境下运行
1、安装node
vim /etc/profile #添加如下变量
NODE_HOME=/usr/local/node-v4.4.7-linux-x64
PATH= N O D E H O M E / b i n : NODE_HOME/bin: NODEHOME/bin:PATH
export NODE_HOME PATH

2、下载head,head 的客户端是grunt
先cd elasticsearch-head-master/目录下
npm install -g grunt-cli //全局安装grunt-cli需要的依赖包,npm是依赖包管理工具 grunt --version #检查grunt版本号
(1)修改vim /usr/local/elasticsearch-head-master/Gruntfile.js配置文件
在connect的server的options下,进行如下添加

(2)修改vim /usr/local/elasticsearch-head-master/_site/app.js(4375行左右)

this.base_uri = this.config.base_uri|l this.prefs.get( “app-base uri” )l"http:/ /10.8.161.147:9200"; //这里只需要添加主节点IP地址即可

3、下载head的必要插件
Wget https://github.com/Medium/phantomjs/releases/download/v2.1.1
/phantomjs-2.1.1-linux-x86_64.tar.bz2
yum -y install bzip2
tar -jxf phantomjs-2.1.1-linux-x86_64.tar.bz2 -C /tmp/ #解压

4、运行head
npm config set registry https://registry.npm.taobao.org //指定使用淘宝的npm源
cd /usr/local/elasticsearch-head-master/
Npm install //在这个目录下自动检索需要的所有依赖包进行下载
nohup grunt server &

3、kibana部署

kibana和head的作用都是前端展示,所以配置在一台服务器上面即可

(1)cd /usr/local/kibana-6.5.4-linux-x86_64/config/ //cd到kibana目录下
修改kibana.yml配置文件
Vim kibana.yml
server.port: 5601 //kibana自己的服务端口
server.host: “10.8.161.45”
elasticsearch.url: “http://10.8.161.147:9200” //ES集群的主节点IP
kibana.index: “.kibana” //默认创建一个.kibana索引

(2)启动kibana:
Cd /usr/local/kibana-6.5.4-linux-x86_64
Nohup ./bin/kibana &

(3)这里访问时需要跟上kibana的端口,可以设置一个反向代理进行跳转
使用nginx反向代理,只需要在nginx子配置文件进行配置
Vim /etc/nginx/conf.d/nginx.conf
server {
listen 80;
server_name 192.168.246.235;

    #charset koi8-r;

   # access_log  /var/log/nginx/host.access.log  main;
   # access_log off;

     location / {  
         proxy_pass http://192.168.246.235:5601;
         proxy_set_header Host $host:5601;  
         proxy_set_header X-Real-IP $remote_addr;  
         proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;  
         proxy_set_header Via "nginx";
                 }
     location /status { 
         stub_status on; #开启网站监控状态 
         access_log /var/log/nginx/kibana_status.log; #监控日志 
         auth_basic "NginxStatus"; }

     location /head/{
         proxy_pass http://192.168.246.235:9100;
         proxy_set_header Host $host:9100;
         proxy_set_header X-Real-IP $remote_addr;
         proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
         proxy_set_header Via "nginx";
                     }  

}
启动nginx:systectl start nginx

4、filebeat部署:修改在其上安装nginx,,是以收集nginx日志进行举例

1、cd /usr/local/filebeat/
修改filebeat.yml配置文件
Vim filebeat.yml
filebeat.prospectors:

  • input_type: log #指定输入的类型
    paths:
    • /var/log/nginx/*.log #日志的路径
      json.keys_under_root: true //让字段位于根节点
      json.add_error_key: true //将增加的错误信息存储在error键值对中
      json.message_key: log //message_key是用来合并多行json日志使用的

output.kafka:
hosts: [“10.8.161.77:9092”,“10.8.161.140:9092”,“10.8.161.146:9092”] #kafka服务器
topic: ‘nginx’ #输出到kafka中的topic //创建一个名为nginx的话题

2、启动filebeat,再启动之前需要先启动Kafka,不然会启动失败
Cd /usr/local/filebeat
nohup ./filebeat -e -c filebeat.yml &

5、Kafka部署

(1)Kafka运行也依赖于jdk,需要配置jdk环境变量

(2)在第一台10.8.161.77进行部署zookeeper
sed -i ‘s/[#]/#&/’ /usr/local/kafka_2.11-2.1.0/config/zookeeper.properties //需要将这个配置文件里面的参数全部注释掉
vim /usr/local/kafka_2.11-2.1.0/config/zookeeper.properties #添加如下配置
dataDir=/opt/data/zookeeper/data //zookeeper的数据目录
dataLogDir=/opt/data/zookeeper/logs //zookeeper存放日志目录
clientPort=2181 //对外端口
tickTime=2000 //心跳测试时间
initLimit=20 //允许follow连接leader的时间
syncLimit=10 //超过时间将会被丢弃
server.1=10.8.161.77:2888:3888 //kafka集群IP:Port
server.2=10.8.161.140:2888:3888
server.3=10.8.161.146:2888:3888
2888端口是follow和leader进行信息交换的端口,3888是leader坏了之后重新选举leader的端口
创建目录
mkdir -p /opt/data/zookeeper/{data,logs}

echo 1> /opt/data/zookeeper/data/myid //标识是第几Kafka服务器

(3)在第二台10.8.161.140进行配置zookeeper
sed -i ‘s/[#]/#&/’ /usr/local/kafka_2.11-2.1.0/config/zookeeper.properties //需要将这个配置文件里面的参数全部注释掉
vim /usr/local/kafka_2.11-2.1.0/config/zookeeper.properties #添加如下配置
dataDir=/opt/data/zookeeper/data //zookeeper的数据目录
dataLogDir=/opt/data/zookeeper/logs //zookeeper存放日志目录
clientPort=2181 //对外端口
tickTime=2000 //心跳测试时间
initLimit=20 //允许follow连接leader的时间
syncLimit=10 //超过时间将会被丢弃
server.1=10.8.161.77:2888:3888 //kafka集群IP:Port
server.2=10.8.161.140:2888:3888
server.3=10.8.161.146:2888:3888
2888端口是follow和leader进行信息交换的端口,3888是leader坏了之后重新选举leader的端口
创建目录
mkdir -p /opt/data/zookeeper/{data,logs}

echo 2 > /opt/data/zookeeper/data/myid //标识是第几Kafka服务器

(4)在第三台10.8.161.146进行配置zookeeper
sed -i ‘s/[#]/#&/’ /usr/local/kafka_2.11-2.1.0/config/zookeeper.properties //需要将这个配置文件里面的参数全部注释掉
vim /usr/local/kafka_2.11-2.1.0/config/zookeeper.properties #添加如下配置
dataDir=/opt/data/zookeeper/data //zookeeper的数据目录
dataLogDir=/opt/data/zookeeper/logs //zookeeper存放日志目录
clientPort=2181 //对外端口
tickTime=2000 //心跳测试时间
initLimit=20 //允许follow连接leader的时间
syncLimit=10 //超过时间将会被丢弃
server.1=10.8.161.77:2888:3888 //kafka集群IP:Port
server.2=10.8.161.140:2888:3888
server.3=10.8.161.146:2888:3888
2888端口是follow和leader进行信息交换的端口,3888是leader坏了之后重新选举leader的端口
创建目录
mkdir -p /opt/data/zookeeper/{data,logs}

echo 3 > /opt/data/zookeeper/data/myid //标识是第几Kafka服务器

(5)第一台10.8.161.77配置Kafka
sed -i ‘s/[#]/#&/’ /usr/local/kafka_2.11-2.1.0/config/server.properties //将该配置文件里面的内容全部注释掉
vim /usr/local/kafka_2.11-2.1.0/config/server.properties #在最后添加
broker.id=1
listeners=PLAINTEXT://10.8.161.77:9092
num.network.threads=3 //处理网络线程数
num.io.threads=8 //从内存中写入磁盘使用的线程数
socket.send.buffer.bytes=102400 //发送套接字缓存区大小
socket.receive.buffer.bytes=102400 //发送套接字重新接受缓存区大小
socket.request.max.bytes=104857600 //接受请求的最大大小
log.dirs=/opt/data/kafka/logs //日志目录
num.partitions=6 //在broker的分片个数
num.recovery.threads.per.data.dir=1 //设置和清理数据的线程数
offsets.topic.replication.factor=2
transaction.state.log.replication.factor=1 //
transaction.state.log.min.isr=1
log.retention.hours=168 //超时时间
log.segment.bytes=536870912 //日志中每个segment大小
log.retention.check.interval.ms=300000 //设置周期性检查文件大小时间
zookeeper.connect=10.8.161.77:2181,10.8.161.140:2181,10.8.161.146:2181
zookeeper.connection.timeout.ms=6000 //链接到zookeeper的超时时间
group.initial.rebalance.delay.ms=0

创建Kafka日志目录mkdir -p /opt/data/kafka/logs

(6)第二台10.8.161.140配置Kafka
sed -i ‘s/[#]/#&/’ /usr/local/kafka_2.11-2.1.0/config/server.properties //将该配置文件里面的内容全部注释掉
vim /usr/local/kafka_2.11-2.1.0/config/server.properties #在最后添加
broker.id=2
listeners=PLAINTEXT://10.8.161.140:9092
num.network.threads=3 //处理网络线程数
num.io.threads=8 //从内存中写入磁盘使用的线程数
socket.send.buffer.bytes=102400 //发送套接字缓存区大小
socket.receive.buffer.bytes=102400 //发送套接字重新接受缓存区大小
socket.request.max.bytes=104857600 //接受请求的最大大小
log.dirs=/opt/data/kafka/logs //日志目录
num.partitions=6 //在broker的分片个数
num.recovery.threads.per.data.dir=1 //设置和清理数据的线程数
offsets.topic.replication.factor=2
transaction.state.log.replication.factor=1 //
transaction.state.log.min.isr=1
log.retention.hours=168 //超时时间
log.segment.bytes=536870912 //日志中每个segment大小
log.retention.check.interval.ms=300000 //设置周期性检查文件大小时间
zookeeper.connect=10.8.161.77:2181,10.8.161.140:2181,10.8.161.146:2181
zookeeper.connection.timeout.ms=6000 //链接到zookeeper的超时时间
group.initial.rebalance.delay.ms=0

创建Kafka日志目录mkdir -p /opt/data/kafka/logs

(7)第三台10.8.161.146配置Kafka
sed -i ‘s/[#]/#&/’ /usr/local/kafka_2.11-2.1.0/config/server.properties //将该配置文件里面的内容全部注释掉
vim /usr/local/kafka_2.11-2.1.0/config/server.properties #在最后添加
broker.id=3
listeners=PLAINTEXT://10.8.161.146:9092
num.network.threads=3 //处理网络线程数
num.io.threads=8 //从内存中写入磁盘使用的线程数
socket.send.buffer.bytes=102400 //发送套接字缓存区大小
socket.receive.buffer.bytes=102400 //发送套接字重新接受缓存区大小
socket.request.max.bytes=104857600 //接受请求的最大大小
log.dirs=/opt/data/kafka/logs //日志目录
num.partitions=6 //在broker的分片个数
num.recovery.threads.per.data.dir=1 //设置和清理数据的线程数
offsets.topic.replication.factor=2
transaction.state.log.replication.factor=1 //
transaction.state.log.min.isr=1
log.retention.hours=168 //超时时间
log.segment.bytes=536870912 //日志中每个segment大小
log.retention.check.interval.ms=300000 //设置周期性检查文件大小时间
zookeeper.connect=10.8.161.77:2181,10.8.161.140:2181,10.8.161.146:2181
zookeeper.connection.timeout.ms=6000 //链接到zookeeper的超时时间
group.initial.rebalance.delay.ms=0

创建Kafka日志目录mkdir -p /opt/data/kafka/logs

(8)启动过程中先启动zookeeper,在启动Kafka ,并且三台机器要同时启动
【1】启动zookeeper。三台服务器同时启动
cd /usr/local/kafka_2.11-2.1.0/
nohup bin/zookeeper-server-start.sh config/zookeeper.properties & //后台启动,并指定zookeeper的配置文件路径,并生成nohup.out日志文件

【2】可以下载telnet程序验证zookeeper的端口2181的可用性
Yum -y install telnet
Telnet 10.8.161.77 2181
然后显示结果没有错误相当于以联通,还可以继续输入conf命令查看详细信息

【3】启动,验证Kafka
cd /usr/local/kafka_2.11-2.1.0/
nohup bin/kafka-server-start.sh config/server.properties & //指定Kafka的启动配置文件,三台服务器同时启动

验证topic的的创建性
在10.8.161.77创建名为lnwlp的topic
cd /usr/local/kafka_2.11-2.1.0/
bin/kafka-topics.sh --create --zookeeper 10.8.161.77:2181 --replication-factor 1
–partitions 1 --topic lnwlp //当创建成功时会显示成功信息
在另外两台机器上验证创建的topic
bin/kafka-topics.sh --zookeeper 10.8.161.140:2181 --list

模拟消费者和生产者(在这个集群搭建时,filebeat是生产者,logstash是消费者)
在10.8.161.77上模拟生产者:
cd /usr/local/kafka_2.11-2.1.0/
bin/kafka-console-producer.sh --broker-list 10.8.161.77:9092 --topic lnwlp
执行之后,会有一个>,然后在其后输入内容,在140服务器上就会显示内容

在10.8.161.140模拟消费者
cd /usr/local/kafka_2.11-2.1.0/
bin/kafka-console-consumer.sh --bootstrap-server 10.8.161.77:9092 --topic lnwlp --from-beginning
切记在模拟生产者和消费者的77和140服务器上,执行命令也需要同时执行

Zookeeper还具有实时同步的功能,当你在一个Kafka服务器创建话题之后,在另外两台服务器就会显示已创建的话题

6、logstash部署

Logstash运行依赖于jdk,因此需要安装jdk,并在环境变量配置文件中进行配置
需要安装nginx
Yum -y install nginx

(1)mkdir -p /usr/local/logstash-6.5.4/etc/conf.d //在logstash目录中创建etc/conf.d目录

(2)cd /usr/local/logstash-6.5.4/etc/conf.d/
vim input.conf #—在下面添加
input {
kafka { #指定kafka服务
type => “nginx_log” //指定类型
topics => “nginx” #这里定义的topic
decorate_events => true #此属性会将当前topic、group、partition等信息也带到message中
bootstrap_servers => “10.8.161.77:9092, 10.8.161.140:9092, 10.8.161.146:9092”
}
}

output {
elasticsearch {
hosts => [“10.8.161.147:9200”]
index => ["%{type}-%{+YYYY.MM.dd}"]
}
}

(3)启动logstash
cd /usr/local/logstash-6.5.4/
nohup bin/logstash -f etc/conf.d/ --config.reload.automatic &//后台运行,指定加载的配置文件,并生成nohup.out

至此ELK+Kafka+filebeat即搭建完成

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值