博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ELK + Filebeat + Nginx 集中式日志分析平台(一)
阅读量:6075 次
发布时间:2019-06-20

本文共 6474 字,大约阅读时间需要 21 分钟。

一、环境准备

本次我们采用 yum 官方仓库进行安装,之前采用 rpm 包安装的文档大家请看 。

1、软件版本

Filebeat 6.5.1

Logstash 6.5.1
Elasticsearch 6.5.1
Kibana 6.5.1
JDK 1.8.0_181

2、服务器准备

IP 系统 角色
172.18.8.200 CentOS 7.5 Minimal Elasticsearch + Kibana
172.18.8.201 CentOS 7.5 Minimal Logstash
172.18.8.202 CentOS 7.5 Minimal Filebeat + Nginx

角色规划架构图如下所示:

ELK + Filebeat + Nginx 集中式日志分析平台(一)

3、服务器环境准备

关闭防火墙。

systemctl stop firewalld.servicesystemctl disable firewalld.service

添加时间同步。

echo "$((RANDOM%60)) $((RANDOM%24)) * * * /usr/sbin/ntpdate time1.aliyun.com" >> /var/spool/cron/root

关闭SELinux。

sed -i 's#SELINUX=enforcing#SELINUX=disabled#g' /etc/selinux/configsetenforce 0

添加ELK官方仓库。

rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch
cat >> /etc/yum.repos.d/elasticsearch.repo <

二、ES + Kibana 安装(172.18.8.200)

1、Elasticsearch 安装配置

安装JDK。

rpm -ivh jdk-8u181-linux-x64.rpm

软件Elasticsearch安装。

yum install elasticsearch -y

修改配置文件/etc/elasticsearch/elasticsearch.yml,修改为如下内容:

cluster.name: my-applicationnode.name: node-1path.data: /var/lib/elasticsearchpath.logs: /var/log/elasticsearchnetwork.host: 172.18.8.200http.port: 9200

启动服务。

systemctl daemon-reloadsystemctl enable elasticsearch.servicesystemctl start elasticsearch.service

检查启动状态。

[root@es ~]# curl http://172.18.8.200:9200{  "name" : "node-1",  "cluster_name" : "my-application",  "cluster_uuid" : "SK5_gP5eSQaRyWRaJMPG7Q",  "version" : {    "number" : "6.5.2",    "build_flavor" : "default",    "build_type" : "rpm",    "build_hash" : "9434bed",    "build_date" : "2018-11-29T23:58:20.891072Z",    "build_snapshot" : false,    "lucene_version" : "7.5.0",    "minimum_wire_compatibility_version" : "5.6.0",    "minimum_index_compatibility_version" : "5.0.0"  },  "tagline" : "You Know, for Search"}

看到这个结果,证明我们安装已经完成。

详细安装步骤,请参见。

2、Kibana 安装配置

为了节省机器资源,我们这里使用安装在一台机器上面,因为环境上面已经配置好,我们这里直接进行安装。

yum install kibana -y

编辑配置文件/etc/kibana/kibana.yml,修改如下内容:

server.port: 5601server.host: "172.18.8.200"elasticsearch.url: "http://172.18.8.200:9200"

启动服务。

systemctl daemon-reloadsystemctl enable kibana.servicesystemctl start kibana.service

访问http://172.18.8.200:5601,画面正常显示即我们安装完成。

具体配置,请参见。

三、Logstash 安装配置(172.18.8.201)

1、Logstash 安装配置

安装JDK。

rpm -ivh jdk-8u181-linux-x64.rpm

软件Logstash安装。

yum install logstash -y

2、配置nginx日志过滤

一个Logstash的pipeline由3部分组成:input, filter, output,在配置文件中我们也分为三部分。

ELK + Filebeat + Nginx 集中式日志分析平台(一)

创建配置文件/etc/logstash/conf.d/logstash.conf,增加如下内容:

input {  beats {    port => 5044  }}filter {  if [fields][type] == "nginx_access" {    grok {      match => { "message" => "%{NGINXACCESS}" }    }  }  if [fields][type] == "apache_access" {    grok {      match => { "message" => "%{COMBINEDAPACHELOG}" }    }  }    mutate {      remove_field =>["message"]    remove_field =>["host"]    remove_field =>["input"]    remove_field =>["prospector"]    remove_field =>["beat"]  }  geoip {    source => "clientip"  }  date {    match => [ "timestamp" , "dd/MMM/yyyy:HH:mm:ss Z" ]  }}output {  if [fields][type] == "nginx_access" {    elasticsearch {      hosts => "172.18.8.200:9200"      index => "%{[fields][type]}-%{+YYYY.MM.dd}"    }  }  if [fields][type] == "apache_access" {    elasticsearch {      hosts => "172.18.8.200:9200"      index => "%{[fields][type]}-%{+YYYY.MM.dd}"    }  }}
  • grok是我们对输出的数据进行切分格式化。
  • mutate对我们格式化输出的数据,删除掉一些没用的信息。
  • geoip是获取IP的地理信息,以便于后面作地图展示。
  • date是对时间的一种格式化输出。
    关于过滤插件还有很多,大家可以参照或者查看我的。

注意:

%{NGINXACCESS} 是一个grok patterns,可以对我们的日志进行标准化输出,系统安装好之后,会支持很多patterns,可以使用命令rpm -ql logstash|grep patterns看到很多的patterns
然而我们刚刚使用的%{NGINXACCESS},默认不存在,需要我们自定义,从上面命令中的patterns中找到grok-patterns文件,在最后面加入下面内容:

# Nginx logsNGUSERNAME [a-zA-Z\.\@\-\+_%]+NGUSER %{NGUSERNAME}NGINXACCESS %{IPORHOST:clientip} %{NGUSER:ident} %{NGUSER:auth} \[%{HTTPDATE:timestamp}\] "%{WORD:verb} %{URIPATHPARAM:request} HTTP/%{NUMBER:httpversion}" %{NUMBER:response} (?:%{NUMBER:bytes}|-) (?:"(?:%{URI:referrer}|-)"|%{QS:referrer}) %{QS:agent}

我安装的软件来看,路径是这样的:/usr/share/logstash/vendor/bundle/jruby/2.3.0/gems/logstash-patterns-core-4.1.2/patterns/grok-patterns。

3、启动检测

启动程序。

systemctl daemon-reloadsystemctl enable logstash.servicesystemctl start logstash.service

检测端口5044是否已经启动。

[root@logstash ~]# netstat -tlnpActive Internet connections (only servers)Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      1098/sshd           tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN      1234/master         tcp6       0      0 127.0.0.1:9600          :::*                    LISTEN      24546/java          tcp6       0      0 :::5044                 :::*                    LISTEN      24546/java          tcp6       0      0 :::22                   :::*                    LISTEN      1098/sshd           tcp6       0      0 ::1:25                  :::*                    LISTEN      1234/master

四、Filebeat 安装配置(172.18.8.202)

因为我们默认的仓库里面没有nginx软件包,所以我们首先添加epel源。

wget -P /etc/yum.repos.d/ https://mirrors.aliyun.com/repo/epel-7.repo

软件Filebeat Nginx安装。

yum install filebeat nginx -y

编辑文件/etc/filebeat/filebeat.yml,修改为如下内容:

filebeat.inputs:- type: log  enabled: true  paths:    - /var/log/nginx/access.log  fields:    type: nginx_accessfilebeat.config.modules:  path: ${path.config}/modules.d/*.yml  reload.enabled: falsesetup.template.settings:  index.number_of_shards: 3output.logstash:  hosts: ["172.18.8.201:5044"]processors:  - add_host_metadata: ~  - add_cloud_metadata: ~

请注意我们上面添加的type: nginx_access,是我们根据不同日志进行过滤的筛选条件。

启动程序。

systemctl enable filebeat.servicesystemctl start filebeat.servicesystemctl enable nginx.servicesystemctl start nginx.service

五、验证

一切配置好之后,我们访问 nginx 服务,查看日志的收集情况,因为我这边开了调试模式stdout { codec =&gt; rubydebug },可以在 logstash 的服务器终端查看到格式化之后的日志格式如下:

{       "@version" => "1",         "source" => "/var/log/nginx/access.log",       "response" => "404",          "geoip" => {},      "timestamp" => "13/Dec/2018:10:16:21 +0800",          "ident" => "-",           "auth" => "-",           "verb" => "GET",         "fields" => {        "type" => "nginx_access"    },        "request" => "/favicon.ico",           "tags" => [        [0] "beats_input_codec_plain_applied",        [1] "_geoip_lookup_failure"    ],    "httpversion" => "1.1",          "bytes" => "3650",          "agent" => "\"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36\"",         "offset" => 10265,       "clientip" => "172.18.8.4",     "@timestamp" => 2018-12-13T02:16:21.000Z}

然后我们登录 Kibana,添加索引,插件数据。

ELK + Filebeat + Nginx 集中式日志分析平台(一)

ELK + Filebeat + Nginx 集中式日志分析平台(一)

转载地址:http://fetgx.baihongyu.com/

你可能感兴趣的文章
36句经典英文格言
查看>>
Android AndroidStudio 详解Kotlin的安装和使用(附下载demo)
查看>>
从MySQL到Redis,提升数据迁移的效率
查看>>
SaaS模式金融危机时期显威力 呼叫中心进入云时代
查看>>
发力端到端 Nutanix着力大数据分析领域
查看>>
java-框架-apache.commons.*工具
查看>>
数据分析的四种类型模式
查看>>
极限元算法专家:深度学习在语音生成问题上的典型应用
查看>>
flume列子回想
查看>>
融资后又有大动作,Geek+宣布进入日本市场
查看>>
用 Flask 来写个轻博客 (7) — (M)VC_models 的关系(many to many)
查看>>
揭秘马斯克清洁能源计划: 用太阳能满足能源需求
查看>>
问:免遭WannaCryl攻击,总共分几步
查看>>
打造银行3.0时代,以人为中心的极致体验
查看>>
专家热议“互联网+”时代教育
查看>>
分析:企业控制不了云计算
查看>>
终端管理四大关键角色:监控、软件部署、补丁和安全
查看>>
IBM新版本TSM增加重复数据删除和DB2集成
查看>>
软件架构师是一个角色,不是一项工作
查看>>
爱投资CEO王博:互联网金融是土壤+种子
查看>>