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

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中的一个展示板工具,它可以将不同的图显示在一起展示出来
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值