EFLK(ELK+filebeat)
elsaticsearch:
node1:192.168.242.66
node2:192.168.242.67
nginx+logstash+kibana:
192.168.242.68
filebeat:192.168.242.69
部署filebeat
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
vim /etc/selinux/config
SELINUX=disabled
##安装 Filebeat
#上传软件包 filebeat-6.7.2-linux-x86_64.tar.gz 到/opt目录
tar xf filebeat-6.7.2-linux-x86_64.tar.gz
mv filebeat-6.7.2-linux-x86_64/ /usr/local/filebeat
##安装 apache 服务,用来提供访问日志
yum -y install httpd
systemctl start httpd
systemctl enable httpd
修改配置文件
###设置 filebeat 的主配置文件
cd /usr/local/filebeat
cp filebeat.yml{,.bak}
vim filebeat.yml
filebeat.inputs:
- type: log
#指定 log 类型,从日志文件中读取消息
enabled: true
paths:
- /var/log/httpd/access_log
#指定监控的日志文件
tags: ["filebeat"] #设置索引标签
#可以使用 fields 配置选项设置一些参数字段添加到 output
fields:
server_name: httpd
log_type: access
from: 192.168.242.69
--------------Elasticsearch output-------------------
(全部注释掉)
----------------Logstash output---------------------
output.logstash:
hosts: ["192.168.242.68:5044"]
#指定 logstash 的 IP 和端口
###启动 filebeat
cd /usr/local/filebeat
nohup
./filebeat -e -c filebeat.yml
#-e:输出到标准输出,禁用syslog/文件输出
#-c:指定配置文件
#nohup:在系统后台不挂断地运行命令,退出终端不会影响程序的运行
logstash配置
###在 Logstash 组件所在节点上新建一个 Logstash 配置文件
cd /etc/logstash/conf.d
vim filebeat.conf
input {
beats {
port => "5044"
}
}
output {
elasticsearch {
hosts => ["192.168.242.66:9200","192.168.242.67:9200"]
index => "%{[fields][server_name]}-%{+YYYY.MM.dd}"
}
}
###启动 logstash
logstash -f filebeat.conf
###如果配置失败,清空缓存文件
rm -rf /var/lib/logstash/.lock
###浏览器访问
--》http://192.168.242.68:5601 登录 Kibana
--》单击“Create Index Pattern”按钮添加索引
--》“filebeat-*”
--》单击 “create” 按钮创建
--》单击 “Discover” 按钮可查看图表信息及日志信息。
logstash的filter过滤
grok(正则捕获插件)
- grok 使用文本片段切分的方式来切分日志事件
- logstash 官方也给了一些常用的常量来表达那些正则表达式,可以到这个 Github 地址查看有哪些常用的常量:
内置的grok正则表达式
内置正则表达式调用
%{SYNTAX:SEMANTIC}
##SYNTAX代表匹配值的类型,例如,0.11可以NUMBER类型所匹配,10.222.22.25可以使用IP匹配。
##SEMANTIC表示存储该值的一个变量声明,它会存储在elasticsearch当中方便kibana做字段搜索和统计,你可以将一个IP定义为客户端IP地址client_ip_address,如%{IP:client_ip_address},所匹配到的值就会存储到client_ip_address这个字段里边,类似数据库的列名,也可以把 event log 中的数字当成数字类型存储在一个指定的变量当中,比如响应时间http_response_time,假设event log record如下:
message: 192.168.80.10 GET /index.html 15824 0.043
可以使用如下grok pattern来匹配这种记录
%{IP:client_id_address} %{WORD:method} %{UR