多台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服务器

完成以后的效果 如下图

多台NGINX服务器

同时监控 三台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服务器

如下图

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

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

多台NGINX服务器



附送 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的主要内容,如果未能解决你的问题,请参考以下文章

统一日志ELK部署配置——filebeat

Filebeat +Redis+ELK处理Nginx日志系统

elk

ELK——Filebeat介绍及部署

ELK+Kafka+Filebeat企业级日志收集系统 #yyds干货盘点#

helm部署Filebeat + ELK