01 前言
上期我们演示了怎样安装单机版ELK:ELK单机搭建与使用(一),现在用这个平台来收集日志。nginx经常被用于反向代理,我们来试试收集它的相关日志。
本文转自我个人的公众号:天目星 ,请大家多多关注。
一、使用的软件版本与架构图
linux: CentOS 7.5.1804
ElasticSearch: elasticsearch-6.2.4
Logstash: logstash-6.2.4
Kibana: kibana-6.2.4
filebeat: filebeat-6.2.4
服务器
ELK服务端: 192.168.0.1
Shipper端: 192.168.0.2
二、安装软件
ELK的beats组件常用的有以下几种:
filebeat:进行文件和目录采集,可用于收集日志数据。
heartbeat:系统间连通性检测,可收集icmp, tcp, http等系统的连通性情况。
Winlogbeat:专门针对windows的事务日志的数据采集。
packetbeat:通过网络抓包、协议分析,收集网络相关数据。
metricbeat:进行指标采集,主要用于监控系统和软件的性能。(系统、中间件等)
在Shipper端安装filebeat
rpm -ivh filebeat-6.2.4-x86_64.rpm
三、配置与启动
我们使用filebeat收集本机的nginx日志
编辑:vim /etc/filebeat/filebeat.yml
###################### Filebeat Configuration Example ######
filebeat.prospectors:
- type: log
enabled: true
paths:
- /usr/local/nginx/logs/nginx_access.log
fields:
log_source: 192.168.159.31-nginx
#------------------ Logstash output -----------------------#
# 输出至logstash
output.logstash:
# The Logstash hosts
hosts: ["192.168.0.1:5000"]
index: "filebeat"
对应的logstash服务端,也要配置入口
编辑:vim /etc/logstash/conf.d/nginx.conf
input { # 配置入口监听端口
beats {
port => 5000
}
}
filter { # 配置过滤器
grok { # 定义日志的输出格式
match => { "message" => "%{IPORHOST:http_host} %{IPORHOST:clientip} - %{USERNAME:remote_user} \[%{HTTPDATE:timestamp}\] \"(?:%{WORD:http_verb} %{NOTSPACE:http_request}(?: HTTP/%{NUMBER:http_version})?|%{DATA:raw_http_request})\" %{NUMBER:response} (?:%{NUMBER:bytes_read}|-) %{QS:referrer} %{QS:agent} %{QS:xforwardedfor} %{NUMBER:request_time:float}"}
}
geoip {
source => "clientip"
}
}
output { # 配置ES主机与index信息
stdout { codec => rubydebug }
elasticsearch {
hosts => ["192.168.0.1:9200"]
index => "nginx-test-%{+YYYY.MM.dd}"
}
}
配置好重启logstash服务
回到Shipper端,配置nginx
# 在http中添加如下配置
http {
...省略...
# 新增收集的日志根式
log_format test '$http_host $remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
# 在server中新增网站,访问此站点的用户反向代理至Kibana服务器
server {
listen 8888;
server_name www.test.com;
location / {
proxy_pass http://192.168.0.1:5601;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
access_log logs/nginx_access.log test; #日志路径
}
...省略...
}
重启nginx服务并访问此站点生成日志
http://www.test.com:8888
查收生成的日志
tail /usr/local/nginx/logs/nginx_access.log
### nginx_access.log ###
... 省略...
www.test.com:8888 192.168.159.1 - - [22/Apr/2019:11:11:28 +0800] "GET /ui/favicons/favicon-32x32.png HTTP/1.1" 304 0 "http://www.test.com:8888/app/kibana" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36" "-"
www.test.com:8888 192.168.159.1 - - [22/Apr/2019:11:11:28 +0800] "GET /ui/favicons/favicon-16x16.png HTTP/1.1" 304 0 "http://www.test.com:8888/app/kibana" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36" "-"
www.test.com:8888 192.168.159.1 - - [22/Apr/2019:11:11:31 +0800] "GET /ui/favicons/favicon-32x32.png HTTP/1.1" 304 0 "http://www.test.com:8888/app/kibana" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36" "-"
www.test.com:8888 192.168.159.1 - - [22/Apr/2019:11:11:31 +0800] "GET /ui/favicons/favicon-32x32.png HTTP/1.1" 304 0 "http://www.test.com:8888/app/kibana" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36" "-"
www.test.com:8888 192.168.159.1 - - [22/Apr/2019:11:11:31 +0800] "GET /ui/favicons/favicon-16x16.png HTTP/1.1" 304 0 "http://www.test.com:8888/app/kibana" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36" "-"
四、在kibana中配置index收集nginx日志
进入kibana
创建index
选择需建立的index
设置过滤条件
完成index的建立
点击Discover发现日志没有找到,原来没有选择需要查看的index
可以看到日志了
02 结尾
此篇文章只是简单的介绍收集客户端日志的原理,让大家有一个初步的体验。在后期我还会演示ELK的其他项目,请大家继续关注。