elk日志分析平台以及数据的可视化

版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/l675655077/article/details/82695315

 

ELK是三个开源软件的缩写,分别表示:Elasticsearch , Logstash, Kibana , 它们都是开源软件。新增了一个FileBeat,它是一个轻量级的日志收集处理工具(Agent),Filebeat占用资源少,适合于在各个服务器上搜集日志后传输给Logstash,官方也推荐此工具。

Elasticsearch是个开源分布式搜索引擎,提供搜集、分析、存储数据三大功能。它的特点有:分布式,零配置,自动发现,索引自动分片,索引副本机制,restful风格接口,多数据源,自动搜索负载等。

Logstash 主要是用来日志的搜集、分析、过滤日志的工具,支持大量的数据获取方式。一般工作方式为c/s架构,client端安装在需要收集日志的主机上,server端负责将收到的各节点日志进行过滤、修改等操作在一并发往elasticsearch上去。

Kibana 也是一个开源和免费的工具,Kibana可以为 Logstash 和 ElasticSearch 提供的日志分析友好的 Web 界面,可以帮助汇总、分析和搜索重要数据日志。

 一、elk日志分析平台的搭建

[root@server1 ~]# ls
elasticsearch-2.3.3.rpm
[root@server1 ~]#  yum install elasticsearch-2.3.3.rpm  -y
[root@server1 ~]# cd /etc/elasticsearch/

[root@server1 elasticsearch]# vim elasticsearch.yml 

ps:bootstrap true这一项在生产环境中需要打开,目前实验环境内存不够,所以不打开

[root@server1 elasticsearch]# /etc/init.d/elasticsearch  start    ##提示运行该工具需要java环境

[root@server1 ~]# yum install jdk-8u121-linux-x64.rpm -y    ##安装java环境
[root@server1 ~]# /etc/init.d/elasticsearch  start

ps: 9200端口已经开启,负责与外界通信,9300负责集群间通信,暂未部署集群,所以忽略 

在浏览器访问:

[root@server1 elasticsearch]# cd /usr/share/elasticsearch/bin/
[root@server1 bin]# ls

 本地安装:

[root@server1 bin]# ./plugin install file:/root/elk/elasticsearch-head-master.zip 

另一种方式--在线安装(在github上找到相应的安装文件):

访问:

二、集群搭建

server2安装:

[root@server2 ~]# yum install jdk-8u121-linux-x64.rpm 
[root@server2 ~]# yum install elk/elasticsearch-2.3.3.rpm -y
[root@server2 ~]# /usr/share/elasticsearch/bin/plugin install file:/root/elk/elasticsearch-head-master.zip 

server3安装:

[root@server3 ~]# yum install jdk-8u121-linux-x64.rpm 
[root@server3 ~]# yum install elk/elasticsearch-2.3.3.rpm 
[root@server3 ~]# /usr/share/elasticsearch/bin/plugin install file:/root/elk/elasticsearch-head-master.zip

配置server1

[root@server1 elasticsearch]# vim elasticsearch.yml    

##添加以下三项 

##修改这一项

[root@server1 elasticsearch]# scp elasticsearch.yml root@172.25.129.2:/etc/elasticsearch/
[root@server1 elasticsearch]# scp elasticsearch.yml root@172.25.129.3:/etc/elasticsearch/
[root@server1 elasticsearch]# /etc/init.d/elasticsearch  reload

配置server2

[root@server2 elasticsearch]# vim elasticsearch.yml 

[root@server2 ~]# /etc/init.d/elasticsearch start

配置server3

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

[root@server3 ~]# /etc/init.d/elasticsearch start

浏览器测试:

[root@server1 elasticsearch]#  curl -XGET 'http://172.25.129.1:9200/_cluster/health?pretty=true'     ##健康状态检查

 

三、数据采集工具

server1

[root@server1 elk]# rpm -ivh logstash-2.3.3-1.noarch.rpm 
[root@server1 elk]# /opt/logstash/bin/logstash -e 'input { stdin { } } output { stdout { codec => rubydebug } }'     ##只输出到终端

##添加索引

[root@server1 elk]# /opt/logstash/bin/logstash -e 'input { stdin { } } output { elasticsearch { hosts => ["172.25.129.1"] } }'
##输入为终端,输出为elasticsearch

在网页查看,数据已经到达elasticsearch

 

[root@server1 elk]# /opt/logstash/bin/logstash -e 'input { stdin { } } output { elasticsearch { hosts => ["172.25.129.1"] index => "logstash-%{+YYYY.MM.dd}"  } }'
##指定输出格式

[root@server1 elk]# /opt/logstash/bin/logstash -e 'input { stdin { } } output { elasticsearch { hosts => ["172.25.129.1"] index => "logstash-%{+YYYY.MM.dd}"  } stdout { codec => rubydebug } }'
##在终端和elasticsearch都输出

另一种采集数据的方式(调用文件进行数据批量采集):

[root@server1 elk]# cd /etc/logstash/conf.d/
[root@server1 conf.d]# vim es.conf
input {
        stdin{}
}

output {
        elasticsearch {
                hosts => ["172.25.129.1"]
                index => "logstash-%{+YYYY.MM.dd}"
       }

        stdout {
                codec => rubydebug
       }
}  

[root@server1 conf.d]# /opt/logstash/bin/logstash -f /etc/logstash/conf.d/es.conf 

[root@server1 conf.d]# vim es.conf
input {
        stdin{}
}

output {
        elasticsearch {
                hosts => ["172.25.129.1"]
                index => "logstash-%{+YYYY.MM.dd}"
       }

        stdout {
                codec => rubydebug
       }
        file {
                path => "/tmp/testfile"
                codec => line { format => "custom format: %{message}"}
       }
}  

 

[root@server1 conf.d]# /opt/logstash/bin/logstash -f /etc/logstash/conf.d/es.conf 

 

[root@server1 conf.d]# cat /tmp/testfile 
custom format: master
custom format: exit

[root@server1 conf.d]# cp es.conf message.conf
[root@server1 conf.d]# vim message.conf 
input {
        file {
                path => "/var/log/messages"
                start_position => beginning
             }
}

output {
        elasticsearch {
                hosts => ["172.25.129.1"]
                index => "message-%{+YYYY.MM.dd}"
       }

}

[root@server1 conf.d]# /opt/logstash/bin/logstash -f /etc/logstash/conf.d/message.conf 

打开另一个shell,给/var/log/messages手动添加日志内容

[root@server1 ~]# logger 123     ##手动添加日志内容
[root@server1 ~]# logger 123456

[root@server1 conf.d]# vim message.conf 

[root@server1 conf.d]# /opt/logstash/bin/logstash -f /etc/logstash/conf.d/message.conf 

打开另一个shell

[root@server1 ~]# logger universi

[root@server1 ~]# ls -a
.                        elk
..                       jdk-8u121-linux-x64.rpm
.bash_logout             .oracle_jre_usage
.bash_profile            .sincedb_452905a167cf4509fd08acb964fdb20c
.bashrc                  .ssh
.cshrc                   .tcshrc
elasticsearch-2.3.3.rpm  .viminfo

[root@server1 ~]# cat .sincedb_452905a167cf4509fd08acb964fdb20c
130583 0 64768 32581

ps:.sincedb_452905a167cf4509fd08acb964fdb20c文件是用来记录position,如果文件没有更改那么再次执行数字也不会改变,也不会有信息产生

四、指定server1充当日志收集工具

[root@server1 conf.d]# vim message.conf 
input {
        syslog {
                port => 514
       }
}

output {
        elasticsearch {
                hosts => ["172.25.129.1"]
                index => "message-%{+YYYY.MM.dd}"
       }
        stdout {
                codec => rubydebug
       }
}  

[root@server1 conf.d]# /opt/logstash/bin/logstash -f /etc/logstash/conf.d/message.conf 
[root@server1 ~]# netstat -antlp

配置server2:

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

[root@server2 ~]# /etc/init.d/rsyslog restart
[root@server2 ~]# logger myname

查看server1:

五、多行日志合并为一行

 

在logstash的输出中,每行日志开头都会加上timestamp. ,对于mysql的slowlog和tomcat log等多行输出格式,就显得画蛇添足了,可读性很差。因此需要使用logstash的 multiline 多行合并功能。使用codec的multiline插件实现多行匹配,这是一个可以将多行进行合并的插件,而且可以使用what指定将匹配到的行与前面的行合并还是和后面的行合并。

在logstash的配置文件中加入过滤规则:

[root@server1 conf.d]# vim message.conf 
input {
        file {
                path => "/var/log/elasticsearch/my-es.log"
                start_position => "beginning"
       }
}

filter {
        multiline {
#               type => "type"
                pattern => "^\["      ##[是特殊字符,所以要转义
                negate => true
                what => "previous"    ##向上合并
       }
}
output {
        elasticsearch {
                hosts => ["172.25.129.1"]
                index => "es-%{+YYYY.MM.dd}"
       }
        stdout {
                codec => rubydebug
       }
}  

多行日志合并为一行效果: 

六、对APache的日志截取显示

[root@server1 html]# yum install httpd -y
[root@server1 conf.d]# cd /var/www/html/
[root@server1 html]# ls
[root@server1 html]# vim index.html
[root@server1 html]# /etc/init.d/httpd start
[root@server1 httpd]# cat access_log 

 

[root@server1 httpd]# cd /etc/logstash/conf.d
[root@server1 conf.d]# vim message.conf 
input {
        file {
                path => "/var/log/httpd/access_log"
                start_position => "beginning"
       }
}

#filter {
#        multiline {
#               type => "type"
#                pattern => "^\["
#                negate => true
#                what => "previous"
#       }
#}
output {
        elasticsearch {
                hosts => ["172.25.129.1"]
                index => "apache-%{+YYYY.MM.dd}"
       }
        stdout {
                codec => rubydebug
       }
}  

[root@server1 conf.d]# /opt/logstash/bin/logstash -f /etc/logstash/conf.d/message.conf 

 

[root@server1 conf.d]# cd /opt/logstash/vendor/bundle/jruby/1.9/gems/logstash-patterns-core-2.0.5/patterns/
[root@server1 patterns]# vim grok-patterns ##查看apache过滤方式模块

 

[root@server1 conf.d]# vim message.conf   ##用上边的模块截取
input {
        file {
                path => "/var/log/httpd/access_log"
                start_position => "beginning"
       }
}

filter {
        grok {
                match => { "message" => "%{COMBINEDAPACHELOG}" }     
       }
}
output {
        elasticsearch {
                hosts => ["172.25.129.1"]
                index => "apache-%{+YYYY.MM.dd}"
       }
        stdout {
                codec => rubydebug
       }
}  

 

[root@server1 ~]# ls -i /var/log/httpd/access_log 
263611 /var/log/httpd/access_log
[root@server1 ~]# cat .sincedb_15940cad53dd1d99808eeaecd6f6ad3f 
263611 0 64768 465     ##找到记录position的文件,删除它和elasticsearch里的文件,否则下面不会生成新的文件

 

[root@server1 conf.d]# /opt/logstash/bin/logstash -f /etc/logstash/conf.d/message.conf 

该图中已经将access_log中的ip等信息分类显示: 

七、数据的可视化

      Kibana 是一个开源的分析和可视化平台,旨在与 Elasticsearch 合作。Kibana 提供搜索、查看和与存储在 Elasticsearch 索引中的数据进行交互的功能。开发者或运维人员可以轻松地执行高级数据分析,并在各种图表、表格和地图中可视化数据。

[root@server3 elk]# rpm -ivh kibana-4.5.1-1.x86_64.rpm 
[root@server3 elk]# cd /opt/kibana/config/
[root@server3 config]# ls
kibana.yml
[root@server3 config]# vim kibana.yml 

[root@server3 config]# /etc/init.d/kibana start

可以看到kibana监听5601端口

浏览器输入5601端口:

上图中显示了apache的信息。

 

八、elk日志可视化平台模型搭建

模型:Logstash input{nginx} output{redis}  -> logstash input{redis} output{es}-> es ->kibana

server2安装redis:

[root@server2 redis-3.0.6]# yum install gcc -y
[root@server2 ~]# tar zfx redis-3.0.6.tar.gz 
[root@server2 ~]# ls
elk  jdk-8u121-linux-x64.rpm  redis-3.0.6  redis-3.0.6.tar.gz
[root@server2 ~]# cd redis-3.0.6
[root@server2 redis-3.0.6]# make
[root@server2 redis-3.0.6]# make install
[root@server2 utils]# ./install_server.sh     ##回车完成安装,监控6379端口

在server1安装nginx:

[root@server1 conf.d]# /etc/init.d/httpd stop
[root@server1 elk]# rpm -ivh nginx-1.8.0-1.el6.ngx.x86_64.rpm
[root@server1 conf.d]# /etc/init.d/nginx start
[root@server1 elk]# cd /etc/logstash/conf.d
[root@server1 conf.d]# cp message.conf nginx.conf
[root@server1 conf.d]# vim nginx.conf 
input {
        file {
                path => "/var/log/nginx/access.log"
                start_position => "beginning"
       }
}

filter {
        grok {
                match => { "message" => "%{COMBINEDAPACHELOG} %{QS:x_forwarded_for}" }
       }
}
output {
        redis {
                host => ["172.25.129.2"]
                port => 6379
                data_type => "list"
                key => "logstash:redis"
       }
        stdout {
                codec => rubydebug
       }
}  

[root@server1 conf.d]# ll /var/log/nginx/access.log 
-rw-r----- 1 nginx adm 0 Aug 25 16:02 /var/log/nginx/access.log
[root@server1 conf.d]# chmod 644 /var/log/nginx/access.log    ##后面的步骤logstash打入后台用的是logstash用户,所以现在要给日志权限
[root@server1 conf.d]# ll /var/log/nginx/access.log 
-rw-r--r-- 1 nginx adm 0 Aug 25 16:02 /var/log/nginx/access.log

 压测:

[root@foundation29 images]# ab -c 1 -n 10 http://172.25.129.1/index.html     ##一次请求1个,总共请求10次

       ab是apache自带的压力测试工具,非常实用。ab命令会创建多个并发访问线程,模拟多个访问者同时对某一URL地址进行访问。它的测试目标是基于URL的,因此,它既可以用来测试apache的负载压力,也可以测试nginx、lighthttp、tomcat、IIS等其它Web服务器的压力。ab的安装非常简单,如果是源码安装apache的话,那就更简单了。apache安装完毕后ab命令存放在apache安装目录的bin目录下,如果apache 是通过yum的RPM包方式安装的话,ab命令默认存放在/usr/bin目录下。如果不想安装apache但是又想使用ab命令的话,我们可以直接安装apache的工具包httpd-tools,命令为:yum -y install httpd-tools

server1显示访问信息:

[root@server1 conf.d]# /etc/init.d/logstash start     ##打入后台,注意删除conf.d目录里的其他文件,否则logstash可能打不开,/etc/init.d/logstash
 status一直显示未运行

给server2安装logstash:

[root@server2 elk]# rpm -ivh logstash-2.3.3-1.noarch.rpm

server1传es.conf给server2:

[root@server1 conf.d]# scp es.conf server2:/etc/logstash/conf.d

[root@server2 elk]# cd /etc/logstash/conf.d/
[root@server2 conf.d]# vim es.conf 
input {
        redis {
                host => "172.25.129.2"
                port => 6379
                data_type => "list"
                key => "logstash:redis"
        }
}

output {
        elasticsearch {
                hosts => ["172.25.129.1"]
                index => "nginx-%{+YYYY.MM.dd}"
       }

}  

[root@server2 conf.d]# /etc/init.d/logstash start    ##打入后台运行
settings添加新的设备

markdown添加联系人     metric计数,显示访问量    vertical bar chart显示柱状图

使用markdown添加联系人

使用metric查看总访问量

使用chart查看访问ip以及所对应的访问量

dashboard是bikana中的一个展示板工具,它可以将不同的图显示在一起展示出来

 

展开阅读全文

没有更多推荐了,返回首页