全网最全-ELK搭建教程(Filebeat+redis+Logstash+ES+Kibana)

"一定要按照顺序安装,否则会出现一些无法理解的错误。"

架构:

全网最全-ELK搭建教程(Filebeat+redis+Logstash+ES+Kibana)_第1张图片

一、安装java

1、查看是否有自带的java

java -version


如果有则卸载,个人是另外自行安装的。然后安装,具体安装JDK可参考我的另外一篇文章:

https://blog.csdn.net/qq_33877149/article/details/73437749

二、安装ElasticSearch + head插件

安装三台ES服务器,ES和JAVA配置要一样,head插件在主节点上安装即可。

角色定义:
192.168.200.8 (主节点ES + Logstash + redis + kibana + nodejs + head插件)
192.168.200.3 (数据节点ES + Logstash)
192.168.200.4 (数据节点ES + Logstash + nginx + filebeat)


ELK版本信息:
Elasticsearch-6.0.0
logstash-6.0.0
kibana-6.0.0
filebeat-6.0.0
JAVA-1.8
Redis-4.0
NodeJS-8.0

 

[root@localhost ~]# wget:https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.0.0.rpm
[root@localhost ~]# rpm -ivh elasticsearch-6.0.0.rpm

1、安装成功后,对应目录:

  • 配置目录 :/etc/elasticsearch/
    (分别有“elasticsearch.yml、jvm.options、log4j2.properties”三个配置文件)
  • 程序目录 :/usr/share/elasticsearch/

1.1、 配置es:

[root@localhost ~]# vim /etc/elasticsearch/elasticsearch.yml  

修改内容为:

cluster.name: master-node  # 集群中的名称
node.name: master  # 该节点名称
node.master: true  # 意思是该节点为主节点
node.data: false  # 表示这不是数据节点
network.host: 0.0.0.0  # 监听全部ip,在实际环境中应设置为一个安全的ip
http.port: 9200  # es服务的端口号
discovery.zen.ping.unicast.hosts: ["192.168.200.8", "192.168.200.3", "192.168.200.4"] # 配置自动发现

另外两台服务的配置:

192.168.200.3:

cluster.name: master-node  # 集群中的名称
node.name: data-node1 # 该节点名称
node.master: false  # 意思是该节点为主节点
node.data: true # 表示这不是数据节点
network.host: 0.0.0.0  # 监听全部ip,在实际环境中应设置为一个安全的ip
http.port: 9200  # es服务的端口号
discovery.zen.ping.unicast.hosts: ["192.168.200.8", "192.168.200.3", "192.168.200.4"] # 配置自动发现

192.168.200.4:

cluster.name: master-node  # 集群中的名称
node.name: data-node2 # 该节点名称
node.master: false  # 意思是该节点为主节点
node.data: true # 表示这不是数据节点
network.host: 0.0.0.0  # 监听全部ip,在实际环境中应设置为一个安全的ip
http.port: 9200  # es服务的端口号
discovery.zen.ping.unicast.hosts: ["192.168.200.8", "192.168.200.3", "192.168.200.4"] # 配置自动发现

完成以上的配置之后,到主节点 192.168.200.8 上,启动es服务:

[root@localhost ~]# systemctl start elasticsearch.service

查看运行状态和端口:

[root@localhost ~]# ps aux |grep elasticsearch
[root@localhost ~]# netstat -lntp |grep java

全网最全-ELK搭建教程(Filebeat+redis+Logstash+ES+Kibana)_第2张图片

9300端口是集群通信用的,9200则是数据传输时用的。

主节点启动成功后,依次启动其他节点即可,我这里其他节点都是启动正常的。

错误集:

如果提示找不到JAVA,,则给上一个软链接即可:

[root@localhost ~]# ln -s /usr/java/jdk1.8.0_181 /usr/bin/

 

2、安装 head 插件:

2.1、安装nodejs:

[root@localhost ~]# wget https://npm.taobao.org/mirrors/node/v8.0.0/node-v8.0.0-linux-x64.tar.xz
[root@localhost ~]# tar -xvf  node-v8.0.0-linux-x64.tar.xz
[root@localhost ~]# mv node-v8.0.0-linux /home/nodejs
[root@localhost ~]# cd /home/nodejs/bin && ll

2.1.1、进去目录后会看到 node 和 npm 文件:

2.1.2、查看当前nodejs版本:

[root@localhost bin]# ./node -v

2.1.3、配置全局使用:

[root@localhost bin]# ln -s  /home/node/bin/node /usr/local/bin/node
    
[root@localhost bin]# ln -s  /home/node/bin/npm /usr/local/bin/npm

2.2 、安装git:

[root@localhost bin]# yum -y install git

2.3、安装 elasticsearch-head 插件:

[root@localhost bin]#cd /home
[root@localhost home]# git clone https://github.com/mobz/elasticsearch-head.git
[root@localhost elasticsearch-head]# cd elasticsearch-head
[root@localhost elasticsearch-head]# npm install

如果 npm install 报错,无法下载PhantomJS,则手动安装 PhantomJS

2.4、安装PhantomJS:

[root@localhost home]# wget https://github.com/Medium/phantomjs/releases/download/v2.1.1/phantomjs-2.1.1-linux-x86_64.tar.bz2
[root@localhost home]# tar xjf phantomjs-2.1.1-linux-x86_64.tar.bz2
[root@localhost home]# mv phantomjs-2.1.1 phantomjs

2.4.1、安装依赖软件:

[root@localhost home]# yum -y install fontconfig

2.4.2、配置全局使用:

[root@localhost home]# ln -s /home/phantomjs/bin/phantomjs /usr/bin/

2.4.3、查看版本:

[root@localhost home]# phantomjs --version
[root@localhost home]# source ~/.bashrc

2.4.5、安装完phantomjs 后,再回去安装elasticsearch-head:

[root@localhost elasticsearch-head]# cd elasticsearch-head
[root@localhost elasticsearch-head]# npm install

2.5、配置插件文档:

2.5.1、修改elasticsearch.yml,增加跨域的配置(需要重启es才能生效):

[root@localhost elasticsearch-head]# vim /etc/elasticsearch/elasticsearch.yml

在最后一行加入配置:

http.cors.enabled: true
http.cors.allow-origin: "*"

2.5.2、修改Gruntfile.js文件:

[root@localhost elasticsearch-head]# vim /home/elasticsearch-head/Gruntfile.js

增加hostname属性

全网最全-ELK搭建教程(Filebeat+redis+Logstash+ES+Kibana)_第3张图片

2.5.2、修改app.js文件:

[root@localhost elasticsearch-head]# vim /home/elasticsearch-head/_sit/app.js

修改head连接es的地址(修改localhost为本机的IP地址)

全网最全-ELK搭建教程(Filebeat+redis+Logstash+ES+Kibana)_第4张图片

2.5.3、启动插件:

[root@localhost elasticsearch-head]# cd /home/elasticsearch-head/node_modules/grunt/bin/
[root@localhost bin]# nohup ./grunt server & exit

全网最全-ELK搭建教程(Filebeat+redis+Logstash+ES+Kibana)_第5张图片

2.5.4、使用IE浏览器在web访问:192.168.200.89100 即可。

错误集:

1、启动elasticsearch出现的错误集:

使用命令:

systemctl daemon-reload

2、如果安装java后还提示缺少java,则:

vim /etc/sysconfig/elasticsearch

全网最全-ELK搭建教程(Filebeat+redis+Logstash+ES+Kibana)_第6张图片

三、安装Redis

wget http://download.redis.io/releases/redis-4.0.6.tar.gz

1、安装:

[root@localhost home]# tar -zxvf redis-4.0.6.tar.gz
[root@localhost home]# mv redis-4.0.6 /home/redis
[root@localhost redis]# cd /home/redis/src
[root@localhost redis]# make

配置全局使用:

[root@localhost redis]# ln -sv /home/redis usr/local/redis
[root@localhost redis]# cd /usr/local/redis
[root@localhost redis]# cp /home/redis/src/redis-server /usr/bin/
[root@localhost redis]# cp /home/redis/src/redis-cli /usr/bin/

2、配置:

[root@localhost redis]# vim redis.conf

修改为:

bind 192.168.200.8
daemonize yes
save ""
requirepass 123456    #可选,开启认证,本人未开启。

3、运行redis:

[root@localhost redis]# redis-server /usr/local/redis/redis.conf

3.1、检查是否已经运行:

[root@localhost ~]# netstat -tulnp |grep 6379

3.1.1、无认证的登陆检查:

[root@localhost ~]# redis-cli -h 192.168.200.8

3.1.2、有认证的登陆检查:

全网最全-ELK搭建教程(Filebeat+redis+Logstash+ES+Kibana)_第7张图片

更多关于redis的使用,自行百度学习哦!

四、安装Filebeat

1、在192.168.200.4上安装:

[root@localhost ~]# wget https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-6.0.0-x86_64.rpm
[root@localhost ~]# rpm -ivh  filebeat-6.0.0-x86_64.rpm

2、配置:

[root@localhost ~]# vim /etc/filebeat/filebeat.yml 

2.1、这里主要是通过filebeat收集nginx的日志,发送 到redis服务器上。修改内容为:

filebeat.prospectors:
- type: log
   #enabled: false 这一句要注释掉
   paths:
      - /var/log/nginx/*.log  # 指定需要收集的日志文件的路径

#json格式
  json.message_key: log            
  json.keys_under_root: true

#output.elasticsearch:  # 先将这几句注释掉
  # Array of hosts to connect to.
  #  hosts: ["localhost:9200"]

output.redis:    #输出到redis上
        hosts: ["192.168.200.8:6379"]
        key: "nginx_log"
        db: 5
        timeout: 5

2.2、然后启动filebeat:

[root@localhost ~]# systemctl start filebeat.service 

去192.168.200.8服务器上查看redis是否有数据:

[root@localhost ~]# ​redis-cli -h 192.168.200.8

全网最全-ELK搭建教程(Filebeat+redis+Logstash+ES+Kibana)_第8张图片

如果有这个key,则表示收集成功。如果没有请检查防火墙是否关闭,redis服务器是否已经开启?filebeat是否报错?

五、定义nginx的日志格式

关于nginx的安装,自行百度哦!

#进入nginx的配置目录
[root@localhost ~]# ​cd /usr/local/nginx/conf
[root@localhost ~]# vim nginx.conf

1、定义json格式:

#一定要写成一行,禁止有空格和回车符!否则收集到redis的数据格式为零散的!
log_format nginx_log_json
'{"ip":"$proxy_add_x_forwarded_for","http_host":"$host","@timestamp":"$time_iso8601","method":"$request_method","url":"$request_uri","status":"$status","http_referer":"$http_referer","body_bytes_sent":"$body_bytes_sent","request_time":"$request_time","http_user_agent":"$http_user_agent","total_bytes_sent":"$bytes_sent","server_ip":"$server_addr"}';

全网最全-ELK搭建教程(Filebeat+redis+Logstash+ES+Kibana)_第9张图片

2、关于nginx格式变量说明:

全网最全-ELK搭建教程(Filebeat+redis+Logstash+ES+Kibana)_第10张图片

2.1、定义的字段说明:

全网最全-ELK搭建教程(Filebeat+redis+Logstash+ES+Kibana)_第11张图片

3、日志格式定义好后,去设置nginx反向代理的日志存储:

全网最全-ELK搭建教程(Filebeat+redis+Logstash+ES+Kibana)_第12张图片

4、重新加载nginx,然后去redis上查看日志内容:

使用json格式化工具查看这段值:

全网最全-ELK搭建教程(Filebeat+redis+Logstash+ES+Kibana)_第13张图片

到这里,nginx的日志格式基本就可以了。可以根据自己的需要去定义自己想要的格式。但注意的是,一定要写成一行!

 

六、安装Logstash

1、在192.168.200.8上安装:

[root@localhost ~]#  wget https://artifacts.elastic.co/downloads/logstash/logstash-6.0.0.rpm
[root@localhost ~]#  rpm -ivh logstash-6.0.0.rpm

2、配置:

[root@localhost ~]# vim /etc/logstash/logstash.yml

修改为:

http.host: "192.168.200.8"    #注意,这里设置为服务器的ip地址

192.168.200.3 服务器上配置同上。

3、展示redis的数据:

[root@localhost ~]# cd /etc/logstash/conf.d/
[root@localhost conf.d]# vim redis_logstash.conf

格式说明:

3.1、先从哪里读取,由于我们是使用redis暂存,所以就从redis上读取

input {
    redis {
        data_type => "list"        # 指定为list类型
        host => "192.168.200.8"    # redis服务器ip
        db => "5"                  # filebeat 收集日志的那个库
        port => "6379"             # redis的端口
        key => "nginx_log"         # filebeat 收集日志的那个key
        add_field => { "[@metadata][myid]" => "nginxaccess-log" }  #增加一个字段,用于标识和判断,与下方output输出相对应
    }
}

3.2、定义展示在kibana的格式

filter {
    geoip {                    # ip定位,这里暂时不讲
            source => "ip"
            database => "/home/logstash/GeoLite2City/GeoLite2-City.mmdb" # ip定位,这里暂时不讲
            }

    if [@metadata][myid] == "nginxaccess-log" {
       mutate {
        gsub => ["message", "\\x", "\\x"]  # message字段,也就是日志的输出内容,插件作用就是讲message字段内容中UTF8单字节编码做替换处理,目的就是应对URL出现中文情况,防止乱码的出现
      }
     if ( 'method":"HEAD' in [message] ) {
       drop {}                             # 如果message字段中有HEAD请求,就会删除
     }

     json {                                #启动json解码插件,因为输入的数据是复合的数据结构,只是一部分记录的是json格式
        source => "message"
        remove_field => "prospector"
        remove_field => "beat"
        remove_field => "source"
        remove_field => "input"
        remove_field => "offset"
        remove_field => "fields"
        remove_field => "host"
        remove_field => "@version"
        #remove_field => "message"          #因为json格式中已经定义好了每个字段,所以输出也就是按照每个字段输出,不需要message字段了,这里直接移除
}
 }
}

3.3、输出redis数据:

output {
  if [@metadata][myid]=="nginxaccess-log" {            # 当有多个输入源的时候,可根据不同的标识,指定不同的输出地址
   elasticsearch {
    hosts =>["192.168.200.8:9200"]                     
    #index => "redis-nginx-%{+YYYY-MM-dd}"
    index => "logstash-nginx-access-%{+YYYY-MM}"      # 使用kibana的地图时会用到这个格式。
   }
 }
}

3.4整个文件:

全网最全-ELK搭建教程(Filebeat+redis+Logstash+ES+Kibana)_第14张图片

4、检查文件格式是否有错:

[root@localhost ~]# cd /usr/share/logstash/bin
[root@localhost bin]# ./logstash --path.settings /etc/logstash/ -f /etc/logstash/conf.d/redis_logstash.conf  --config.test_and_exit
Sending Logstash's logs to /var/log/logstash which is now configured via log4j2.properties
Configuration OK  # 为ok则代表配置文件没有问题
[root@localhost bin]#

5、启动配置文件:

[root@localhost ~]# cd /usr/share/logstash/bin
[root@localhost bin]# ./logstash --path.settings /etc/logstash/ -f /etc/logstash/conf.d/redis_logstash.conf
Sending Logstash's logs to /var/log/logstash which is now configured via log4j2.properties
# 这时终端会停留在这里,因为我们在配置文件中定义的是将信息输出到当前终端

七、安装Kibana

1、安装:

[root@localhost ~]#  wget https://artifacts.elastic.co/downloads/kibana/kibana-6.0.0-x86_64.rpm
[root@localhost ~]#  rpm -ivh kibana-6.0.0-x86_64.rpm

2、配置:

[root@localhost ~]# vim /etc/kibana/kibana.yml 

修改为:

server.port: 5601  # 配置kibana的端口
server.host: 192.168.200.8  # 配置监听ip
elasticsearch.url: "http://192.168.200.8:9200"  # 配置es服务器的ip,如果是集群则配置该集群中主节点的ip

2.1:配置kibana服务器的ip以及配置的监听端口:

[root@localhost ~]# vim /etc/rsyslog.conf
#### RULES ####

*.* @@192.168.200.8:9600

重启rsyslog,让配置生效:

[root@data-node1 ~]# systemctl restart rsyslog

3、启动:

[root@localhost ~]# systemctl start kibana

4、查看运行状态和端口:

[root@localhost ~]# ps aux |grep kibana
[root@localhost ~]# netstat -lntp |grep 5601

5、浏览器访问:

http://192.168.200.8:5601 或者 elk.kinth.com     #因为在nginx上配置了这个反向代理

全网最全-ELK搭建教程(Filebeat+redis+Logstash+ES+Kibana)_第15张图片

5.1、Create后,点击 Discover 查看日志:

全网最全-ELK搭建教程(Filebeat+redis+Logstash+ES+Kibana)_第16张图片

全网最全-ELK搭建教程(Filebeat+redis+Logstash+ES+Kibana)_第17张图片

现在显示的就是我们在logstash处理后的格式,随便点进去一条数据查看JSON内容,会更加详细:

全网最全-ELK搭建教程(Filebeat+redis+Logstash+ES+Kibana)_第18张图片

 

ELK搭建暂时就这样。图形化显示的,改天再写吧!

 

主要参考博客:

http://blog.51cto.com/zero01/2079879

https://www.cnblogs.com/bixiaoyu/p/9576570.html

 

 

 

你可能感兴趣的:(linux)