多台NGINX服务器 ELK部署Filebeat的fields字段+Logstash的if 字段 采集多个日志文件写入elasticsearch 7.6.2 变更为不同索引名 自定义索引 index

我的拓扑 如下图 我的版本为7.6.2

多台NGINX服务器 ELK部署Filebeat的fields字段+Logstash的if 字段 采集多个日志文件写入elasticsearch 7.6.2 变更为不同索引名 自定义索引 index

完成以后的效果 如下图

多台NGINX服务器 ELK部署Filebeat的fields字段+Logstash的if 字段 采集多个日志文件写入elasticsearch 7.6.2 变更为不同索引名 自定义索引 index

同时监控 三台NGINX服务器 使每台服务器的索引为自定义(让自己更明白是那台服务上的数据filebeast发来的索引,因为每台NGINX服务器上都代理了不同的网站,便于以后设置索引模式)。

思路:

1.filbeat  :收集日志 设置fields: 和  log_type 设置一个TYPE 让后面的LOGSTASH 可以认识到

例如: fields:

   log_type: "nginx-log-201-83"

2.logstash: 接收filebeat日志 并output 输出到elasticsearch  在output 设置:if [fields][log_type] 匹配到fielbeat的fields: 和 log_type 并且自定义index

例如:

 if [fields][log_type] == "nginx-log-201-83" {

        elasticsearch {

          hosts => ["10.10.201.80:9200"]

           index => "nginx-log-201-83-%{+yyyy.MM.dd}"

       }

      }

开始设置

一、NGINX 10.10.201.83 filebeat设置 fields

1.进入安装目录(我的是rpm安装的位置为以下)
cd /etc/filebeat/
2.编辑配置文件
vi filebeat.yml

如下 找到fields和log_type 复制这两行 其他设置按自己需求

filebeat.inputs:

- type: log
paths:
- /var/log/nginx/*.log
#fields字段为设置一个type 之后在logstash 中设定的一样
fields:
log_type: "nginx-log-201-83"
#keys_under_root可以让字段位于根节点,默认为false
#json.key_under_root: true
#对于同名的key,覆盖原有key值
#json.overwite_keys: true


output.logstash:
enabled: true
hosts: ["10.10.201.81:5044"]






完成后保存退出 从启动filebeat

命令:
ps -ef | grep filebeat 查看filwbeat进程
kill -9 2989 杀死filebeat进程

进入filebeat 主目录
./filebeat -e -c filebeat.yml & 启动服务(二进制安装的)

rpm安装的话启动服务命令如下
3.启动服务
systemctl start filebeat
4.重启动服务
systemctl restart filebeat
5.查看服务
systemctl status filebeat
6.开机自启动
systemctl enable filebeat
7. 查看所有服务状态
systemctl list-unit-files --type=service

二、NGINX 10.10.201.28 filebeat设置 fields

1.进入安装目录(我的是rpm安装的位置为以下)
cd /etc/filebeat/
2.编辑配置文件
vi filebeat.yml

如下

filebeat.inputs:

- type: log
paths:
- /var/log/nginx/*.log
#fields字段为设置一个type 之后在logstash 中设定的一样
fields:
log_type: "nginx-log-201-28"
#keys_under_root可以让字段位于根节点,默认为false
#json.key_under_root: true
#对于同名的key,覆盖原有key值
#json.overwite_keys: true


output.logstash:
enabled: true
hosts: ["10.10.201.81:5044"]


完成后保存退出 从启动filebeat

命令:
ps -ef | grep filebeat 查看filwbeat进程
kill -9 2989 杀死filebeat进程

进入filebeat 主目录
./filebeat -e -c filebeat.yml & 启动服务(二进制安装的)

rpm安装的话启动服务命令如下
3.启动服务
systemctl start filebeat
4.重启动服务
systemctl restart filebeat
5.查看服务
systemctl status filebeat
6.开机自启动
systemctl enable filebeat
7. 查看所有服务状态
systemctl list-unit-files --type=service

三、NGINX 10.10.201.29 filebeat设置 fields

1.进入安装目录(我的是rpm安装的位置为以下)
cd /etc/filebeat/
2.编辑配置文件
vi filebeat.yml

如下

filebeat.inputs:

- type: log
paths:
- /var/log/nginx/*.log
#fields字段为设置一个type 之后在logstash 中设定的一样
fields:
log_type: "nginx-log-201-29"
#keys_under_root可以让字段位于根节点,默认为false
#json.key_under_root: true
#对于同名的key,覆盖原有key值
#json.overwite_keys: true


output.logstash:
enabled: true
hosts: ["10.10.201.81:5044"]

完成后保存退出 从启动filebeat

命令:
ps -ef | grep filebeat 查看filwbeat进程
kill -9 2989 杀死filebeat进程

进入filebeat 主目录
./filebeat -e -c filebeat.yml & 启动服务(二进制安装的)

rpm安装的话启动服务命令如下
3.启动服务
systemctl start filebeat
4.重启动服务
systemctl restart filebeat
5.查看服务
systemctl status filebeat
6.开机自启动
systemctl enable filebeat
7. 查看所有服务状态
systemctl list-unit-files --type=service

四、logstash  10.10.201.81 output设置  if [fields][log_type]

1.编辑logstash配置文件
vim logstash.conf

如下output部分的设置


input {
beats {
port => 5044
}
}


#output {
# stdout { codec => rubydebug }
#}

filter {
json {
source => "message"

}

geoip {
source => "client"
fields => ["city_name", "country_code2", "country_name", "latitude", "longitude", "region_name"]
remove_field => ["[geoip][latitude]", "[geoip][longitude]"]
}
mutate {
split => [ "upstreamtime", "," ]
}
mutate {
convert => [ "upstreamtime", "float" ]
}


}

output {
# 输出es,这的filetype就是在filebeat那边新增的自定义字段名(此行不复制)
if [fields][log_type] == "nginx-log-201-83" {
elasticsearch {
hosts => ["10.10.201.80:9200"]
index => "nginx-log-201-83-%{+yyyy.MM.dd}"
}
}
if [fields][log_type] == "nginx-log-201-28" {
elasticsearch {
hosts => ["10.10.201.80:9200"]
index => "nginx-log-201-28-%{+yyyy.MM.dd}"
}
}
if [fields][log_type] == "nginx-log-201-29" {
elasticsearch {
hosts => ["10.10.201.80:9200"]
index => "nginx-log-201-29-%{+yyyy.MM.dd}"
}
}
}

完成后保存 从启动logstash


启动服务
进入目录
cd /usr/local/logstash/logstash-7.6.2

启动服务
[root@localhost logstash-7.4.2]# ./bin/logstash -f ./config/logstash.conf
显示如下 成功
Successfully started Logstash API endpoint {:port=>9600}

启动服务并自动刷新
[root@localhost logstash-7.4.2]# ./bin/logstash -f ./config/logstash.conf --config.reload.automatic
后台启动
[root@localhost logstash-7.9.2]# nohup ./bin/logstash -f ./config/logstash.conf &

完成

看kibana效果 三台nginx是单独的索引 并按日期每天都会建立新的索引

如下图

我的是单台ES 所以是yellow

多台NGINX服务器 ELK部署Filebeat的fields字段+Logstash的if 字段 采集多个日志文件写入elasticsearch 7.6.2 变更为不同索引名 自定义索引 index

如下图

如果我想看所有的 就建立nginx-log-*的索引模板

如果只想看10.10.201.28服务器上的日志 就建立nginx-log-201-28-*的索引模板

多台NGINX服务器 ELK部署Filebeat的fields字段+Logstash的if 字段 采集多个日志文件写入elasticsearch 7.6.2 变更为不同索引名 自定义索引 index

附送 NGINX日志 改 json格式

编辑配置文件

(按自己的目录 路径 我的是下面的路径 注释#掉原有的 写入新的)

vi /usr/local/nginx/conf/nginx.conf

#log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
# '$status $body_bytes_sent "$http_referer" '
# '"$http_user_agent" "$http_x_forwarded_for"';

#access_log logs/access.log main;


log_format main '{"@timestamp":"$time_iso8601",'
'"@source":"$server_addr",'
'"hostname":"$hostname",'
'"remote_user":"$remote_user",'
'"ip":"$http_x_forwarded_for",'
'"client":"$remote_addr",'
'"request_method":"$request_method",'
'"scheme":"$scheme",'
'"domain":"$server_name",'
'"referer":"$http_referer",'
'"request":"$request_uri",'
'"requesturl":"$request",'
'"args":"$args",'
'"size":$body_bytes_sent,'
'"status": $status,'
'"responsetime":$request_time,'
'"upstreamtime":"$upstream_response_time",'
'"upstreamaddr":"$upstream_addr",'
'"http_user_agent":"$http_user_agent",'
'"http_cookie":"$http_cookie",'
'"https":"$https"'
'}';
access_log /usr/local/nginx/logs/access.log main;

发表评论

相关文章