平台拓扑图
ELK+filebeat+redis日志分析平台搭建_第1张图片
软件版本:

  • elasticsearch-6.6.0
  • logstash-6.6.0
  • kibana-6.6.0
  • redis-3.2.12
  • java-1.8.0

1. 基础环境的准备

配置elasticsearch集群的基础环境,关闭其防火墙、selinux、配置主机名等

systemctl stop firewalld
systemctl disable firewalld
vim /etc/selinux/config
SELINUX=disabled
hostnamectl set-hostname node1
其它两台设备做相应的配置
在集群的三台设备的/etc/hosts文件中写入对应的主机名解析
172.20.128.39 node1
172.20.128.40 node2
172.20.128.41 node3
配置logstash主机的基础环境,这里logstash与kibana部署在一台设备上
systemctl stop firewalld
systemctl disable firewalld
vim /etc/selinux/config
SELINUX=disabled
hostnamectl set-hostname master
在/etc/hosts文件中写入elk集群的主机名解析
172.20.128.39 node1
172.20.128.40 node2
172.20.128.41 node3

2. 安装部署elasticsearch集群

首先安装java-1.8.0环境
yum install -y java-1.8.0
rpm -ivh elasticsearch-6.6.0.rpm
systemctl enable elasticsearch.service  
编辑其配置文件
vim /etc/elasticsearch/elasticsearch.yml
cluster.name: myels    //所属集群名称
node.name: node1     //当前节点名称
path.data: /els/data   //数据存放路径
path.logs: /els/logs   //日志存放路径
network.host: 172.20.128.39 //监听地址,向客户端提供服务地址
http.port: 9200
discovery.zen.ping.unicast.hosts: ["host1", "host2","host3"]   //集群成员判定
discovery.zen.minimum_master_nodes: 3      //内部集群成员关系判定最小主节点数
修改服务启动时内存所需大小
vim /etc/elasticsearch/jvm.options
-Xms1g    //初始化内存空间大小
-Xmx1g   //堆内存空间大小

安装部署其它两个节点
同上先安装java环境,然后安装elasticsearch
将节点1的配置文件复制到节点2跟节点3并作相应的修改
为每个节点创建存储目录

mkdir -p /els/{data,logs}
chown elasticsearch.elasticsearch /els/*
启动服务
systemctl start elasticsearch

当三个节点服务全部安装完成后可以使用curl查看节点运行状态是否正常
ELK+filebeat+redis日志分析平台搭建_第2张图片

3.安装配置Logstash

首先安装java环境
yum install java-1.8.0-openjdk -y
rpm -ivh logstash-6.6.0.rpm
编辑配置文件/etc/logstash/logstash.yml
path.config: /etc/logstash/conf.d     //加载配置文件,此路径为logstash插件默认执行位置,包括输入插件配置文件,输出插件等配置文件
配置logstash环境变量
vim /etc/profile.d/logstash.sh
export PATH=$PATH:/usr/share/logstash/bin/

实例:定义一个标准输入输出插件,并logstash服务进行测试
input {
stdin {}
}
output {
stdout {}
}
进入交互式界面进行测试
logstash -f stdin-stdout.conf
输入hello logstash
得到标准输出
ELK+filebeat+redis日志分析平台搭建_第3张图片

4.安装部署filebeat插件及redis缓存池

在172.20.128.43主机上上传filebeat的rpm包并安装
rpm  -ivh filebeat-6.6.0-x86_64.rpm
配置 Filebeat inputs数据读取路径
#=========================== Filebeat inputs =============================
- type: log
  paths:
  - /var/log/httpd/access_log    //日志获取的路径
filebeat文件的获取数据格式,默认为log
#================================ Redis Outputs  =====================================
output.redis:
  enable: true
  hosts: ["172.20.128.43"]
  port: 6379
  key: filebeat
  password: test.com
  db: 0
  datatype: list
systemctl start filebeat
systemctl enable filebeat
添加redis服务作为缓存池
yum install -y redis   //使用epel源安装
配置redis服务,编辑配置文件
vim /etc/redis.conf
监听0.0.0.0地址
bind 0.0.0.0
requirepass test.com
systemctl start redis
systemctl enable redis

5.安装httpd服务,并使用具体实例对日志分析流水线进行测试

yum install -y httpd
创建测试页面
for i in {1..20};do echo "Test Page $i" > ./test$i.html;done
使用curl命令进行测试
curl http://172.20.128.42/test1.html
修改httpd的配置文件
LogFormat "%{X-Forwarded-For}i %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined   //此配置可以将客户端的IP地址记录在日志中
systemctl start httpd
systemctl enable httpd
在客户端模拟多个不同的客户端对logstash进行访问
while true;do curl -H "X-Forwarded-For:$[$RANDOM%223+1].$[$RANDOM%225].1.1"    http://172.20.128.43/test$[$RANDOM%25+1].html; sleep 1; done

在logstash配置文件的conf.d目录下编写配置文件接受redis服务器存储的数据,在本地对日志数据进行加工处理,添加属性信息等,然后输出给elasticsearch。
为了在kibana中有更精确的数据展示,在logstash服务器中添加GeoLite2-City数据库,用于获取客户端IP地址的经纬度信息
geoip插件会根据请求自动读取到所期望读取的ip,例如cilentip
然后将cilentip跟地址库中信息做比对,如果能查找到则解析为当中所记录的归属者或者拥有者信息,否则返回错误。

配置使用geoip插件
展开GeoLite2-City_20191203压缩包,将文件复制到/etc/logstash/maxmind
进入到/etc/logstash/maxmind目录创建符号链接
ln -sv GeoLite2-City_20191203/GeoLite2-City.mmdb ./
接下来配置logstash用户接受处理数据的配置文件

vim /etc/logstash/conf.d/redis-els.conf
input {                  //input用于定义接受从redis获取数据
      redis {
        host => "172.20.128.43"
        port => 6379
        password => "test.com"
        db   => 0
        key  => "filebeat"
        data_type => "list"
        }

}
filter {                   //过滤插件对获取的日志数据进行切割同时添加属性信息
      grok {             //调用logstash内置函数对日志数据进行切割
        match => {"message" => "%{HTTPD_COMBINEDLOG}"}
        remove_field => ["message","beat"]
        }
      date {
        match => ["timestamp","dd/MMM/YYY:H:m:s Z"]
        }
      geoip {                                         //调用经纬度信息
        source => "clientip"
        target => "geoip"
        database => "/etc/logstash/maxmind/GeoLite2-City.mmdb"
        }
     mutate {                                       //去除数据切割后相同字段属性
        rename => {"[host][name]" => "host"}
        }
}
output {               //处理后的数据输出到elsaticsearch中
       elasticsearch {
           hosts => ["http://node1:9200/","http://node2:9200/","http://node3:9200/"]
           index => "logstash-%{+YYYY.MM.dd}"
           document_type => "httpd_access_logs"
       }
        stdout {codec => rubydebug}      //在输出到elasticsearch的同时,将数据数据到桌面,如果有错误信息同时输出的桌面
}

在客户端发起请求的同时,执行此配置文件
logstash -f redis-els.conf
此时可以看到桌面的数据输出
ELK+filebeat+redis日志分析平台搭建_第4张图片
在elasticsearch验证是否有索引生成
ELK+filebeat+redis日志分析平台搭建

6.安装kibana图形展示界面

将rpm包上传到172.20.128.42并安装
rpm -ivh kibana-6.6.0-x86_64.rpm
编辑配置文件 /etc/kibana/kibana.yml
server.port: 5601
server.host: "0.0.0.0"
server.name: "master"   //安装kinaba服务的主机名
elasticsearch.hosts: ["http://node1:9200"]  //生产环境中此处可以使用VIP进行高可用访问,此处选取任意一个elastic作为数据输入源
elasticsearch.preserveHost: true   //是否保留原来的主机host
kibana.index: ".kibana"  //kibana启动后将自身索引信息保存在elasticsearch,
启动服务
systemctl start kibana
systemctl enable kibana

在浏览器输入172.20.128.42:5601
在management生成配置一个index pattern,名称以logstash-“date”为基准
ELK+filebeat+redis日志分析平台搭建_第5张图片
在Discover选项可以是创建的索引进行搜索
ELK+filebeat+redis日志分析平台搭建_第6张图片
还可以在Visualize选项进行客户端请求IP地址来源的仪表盘展示,选择
ELK+filebeat+redis日志分析平台搭建_第7张图片
此时一个elk的测试环境搭建完成