ELK集群+filebeat收集nginx日志

1.下载相关软件

在elastic官网https://www.elastic.co/cn/下载elasticsearch、logstash、kibana以及filebeat的tar.gz压缩包,以及本示例用ELK集群所收集日志的nginx(http://nginx.org/en/download.html
),这里用的ELK以及filebeat的版本都为7.3.2,nginx的版本为1.16.1。nginx的安装过程:
下载完nginx压缩包后依次运行以下命令完成安装:

1
2
3
4
5
6
7
tar -zxvf nginx-1.16.1.tar.gz        //解压
cd nginx-1.16.1 //进入nginx目录
./configure //执行 ./configure命令
make //把各种语言写的源码文件,变成可执行文件和各种库文件
make install //把这些编译出来的可执行文件和库文件复制到合适的地方
cd /usr/local/nginx/sbin //进入nginx启动目录
./nginx //运行nginx

运行成功后访问http://localhost:80(nginx默认启动占用80端口),出现以下图片内容即为安装成功:

2.修改nginx日志的打印格式为json

1
2
cd /usr/local/nginx/conf/         //进入nginx配置文件目录
vim nginx.conf //编辑nginx.conf配置文件

将以下代码放到http大括号内:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
log_format access_json '{ "@timestamp": "$time_iso8601", '
'"time": "$time_iso8601", '
'"remote_addr": "$remote_addr", '
'"remote_user": "$remote_user", '
'"body_bytes_sent": "$body_bytes_sent", '
'"request_time": "$request_time", '
'"status": "$status", '
'"host": "$host", '
'"request": "$request", '
'"request_method": "$request_method", '
'"uri": "$uri", '
'"http_referrer": "$http_referer", '
'"body_bytes_sent":"$body_bytes_sent", '
'"http_x_forwarded_for": "$http_x_forwarded_for", '
'"http_user_agent": "$http_user_agent" '
'}';

然后在对应的server大括号内增加以下代码完成json格式化:

1
access_log  /usr/local/nginx/logs/access_json.log access_json;

并在/usr/local/nginx/logs/目录下创建access_json.log文件,然后重启运行以下命令重启nginx:

1
2
cd /usr/local/nginx/sbin
nginx -s reload

再次访问http://localhost/,然后查看/usr/local/nginx/logs下的日志文件,对比默认的access.log和修改过的access_json.log,可以发现日志文件成功json化:

3.配置elasticsearch

进入elasticsearch安装目录下的config文件夹,往里面的elasticsearch.yml添加以下代码:

1
2
3
4
cluster.name: <这里输入自定义的集群名称>
node.name: master //结点名称
node.master: true
network.host: 127.0.0.1

进入elasticsearch的安装目录并输入以下命令在后台启动:

1
./bin/elasticsearch

4.配置filebeat

在filebeat目录下的filebeat中对应位置修改以下代码为:

1
2
3
4
5
6
7
8
9
filebeat.inputs:
- type: log
enabled: true
paths:
- /usr/local/nginx/logs/access_json.log #获取对应nginx目录下的日志
json.keys_under_root: true
json.overwrite_keys: true
fields:
appname: nginx_access
1
2
3
output.logstash:
# The Logstash hosts
hosts: ["localhost:5044"] #输出到logstash(logstash的启动端口为5044)

在filebeat安装目录下输入以下命令在后台启动并查看启动是否成功:

1
2
nohup ./filebeat -e -c filebeat.yml -d "publish"  &
tail -f nohup.out

5.配置logstash

在logstash 目录下创建一个nginx_logs.conf文件,其内容如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 监听5044端口作为输入
input {
beats {
port => "5044"
}
}

output {
if [fields][appname] == "nginx_access" {
elasticsearch {
hosts => ["127.0.0.1:9200"] #输出到elasticsearch(elasticsearch的默认启动端口为9200)
index => "nginx-access-%{+YYYY.MM.dd}"
}
}
}

在logstash安装目录下输入以下命令在后台启动并查看启动是否成功:

1
2
nohup bin/logstash -f nginx_logs.conf &
tail -f nohup.out

6.配置kibana

修改config目录下的kibana.yml文件为:

1
2
3
4
server.port: 5601
server.host: "localhost"
server.name: "mykibana"
elasticsearch.hosts: ["http://localhost:9200"] //连接elasticsearch

在kibana安装目录下输入以下命令在后台启动并查看启动是否成功:

1
2
nohup bin/kibana & 
tail -f nohup.out

7.访问

打开http://localhost:9200/nginx-access-2020.02.10/_search //其中的日期是你运行的那一天
发现网页中有nginx的日志信息:

也可以通过elasticsearch的可视化header插件看到信息:

访问http://localhost:5601/(进入kibana),能够查看到elasticsearch的索引信息: