- 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查看节点运行状态是否正常
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
得到标准输出
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
此时可以看到桌面的数据输出
在elasticsearch验证是否有索引生成
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”为基准
在Discover选项可以是创建的索引进行搜索
还可以在Visualize选项进行客户端请求IP地址来源的仪表盘展示,选择
此时一个elk的测试环境搭建完成