多台NGINX服务器 ELK部署Filebeat的fields字段+Logstash的if 字段 采集多个日志文件写入elasticsearch 7.6.2 变更为不同索引名 自定义索引 index
Posted chenglei1208
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了多台NGINX服务器 ELK部署Filebeat的fields字段+Logstash的if 字段 采集多个日志文件写入elasticsearch 7.6.2 变更为不同索引名 自定义索引 index相关的知识,希望对你有一定的参考价值。
我的拓扑 如下图 我的版本为7.6.2
完成以后的效果 如下图
同时监控 三台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-log-*的索引模板
如果只想看10.10.201.28服务器上的日志 就建立nginx-log-201-28-*的索引模板
附送 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;
以上是关于多台NGINX服务器 ELK部署Filebeat的fields字段+Logstash的if 字段 采集多个日志文件写入elasticsearch 7.6.2 变更为不同索引名 自定义索引 index的主要内容,如果未能解决你的问题,请参考以下文章
Filebeat +Redis+ELK处理Nginx日志系统