ELK是三个开源软件的缩写,分别表示:Elasticsearch , Logstash, Kibana , 它们都是开源软件。新增了一个FileBeat,它是一个轻量级的日志收集处理工具(Agent),Filebeat占用资源少,适合于在各个服务器上搜集日志后传输给Logstash,官方也推荐此工具。
Elasticsearch是个开源分布式搜索引擎,提供搜集、分析、存储数据三大功能。它的特点有:分布式,零配置,自动发现,索引自动分片,索引副本机制,restful风格接口,多数据源,自动搜索负载等。
Logstash 主要是用来日志的搜集、分析、过滤日志的工具,支持大量的数据获取方式。一般工作方式为c/s架构,client端安装在需要收集日志的主机上,server端负责将收到的各节点日志进行过滤、修改等操作在一并发往elasticsearch上去。
Kibana 也是一个开源和免费的工具,Kibana可以为 Logstash 和 ElasticSearch 提供的日志分析友好的 Web 界面,可以帮助汇总、分析和搜索重要数据日志。
[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 [email protected]:/etc/elasticsearch/
[root@server1 elasticsearch]# scp elasticsearch.yml [email protected]:/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,如果文件没有更改那么再次执行数字也不会改变,也不会有信息产生
[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
}
}
多行日志合并为一行效果:
[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的信息。
模型: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中的一个展示板工具,它可以将不同的图显示在一起展示出来