1、简介
对于日志来说,最常见的需求就是收集、查询、显示,正对应logstash、elasticsearch、kibana的功能。
ELK日志系统在系统中,主要可解决的问题:
基于日志的数据挖掘
问题排查,上线检查
根据关键字查询日志详情
异常数据自动触发消息通知
服务器监控,应用监控,Bug管理
统计分析,比如接口的调用次数、执行时间、成功率等
性能分析,用户行为分析,安全漏洞分析,时间管理
Logstash:
Logstash是一个用来搜集、分析、过滤日志的工具。它支持几乎任何类型的日志,包括系统日志、错误日志和自定义应用程序日志。它可以从许多来源接收日志,这些来源包括 syslog、消息传递(例如 RabbitMQ)和JMX,它能够以多种方式输出数据,包括电子邮件、websockets和Elasticsearch。与其他监控系统的整合也很方便,可以将数据输出到zabbix、nagios等。还可以把数据统计后输出到graphite,实现统计数据的可视化显示。
logstash对日志的处理逻辑很简单,就是一个pipeline的过程:
inputs >> codecs >> filters>> outputs
agent分布在每一台需要采集数据的节点上,agent只是Logstash承担的一个角色,与此对应的是indexer。agent会分别将各自获取的日志作为输入输出到一个消息代理(例如redis或者kafka),indexer会将消息代理作为输入再输出到ES上,由ES做indexing。其实Logstash在整个过程中只负责输入输出,对Logstash而言并没有agent和index之分。如果日志量小的话完全不需要设置indexer,直接将ES作为agent的输出源。
Elasticsearch:
elasticsearch是基于lucene的开源搜索引擎,主要的特点有
real time
distributed
high availability
document oriented
schema free
restful api
kibana:
Kibana是一个基于Web的图形界面,用于搜索、分析和可视化存储在 Elasticsearch指标中的日志数据。它利用Elasticsearch的REST接口来检索数据,不仅允许用户创建他们自己的数据的定制仪表板视图,还允许他们以特殊的方式查询和过滤数据。kibana是根据前台过滤的条件,生成query 发送到elasticsearch,然后根据返回的值重绘页面。
下面盗用一张图来展示整个架构:
以上是我查看网上资料最终总结的,感谢各位大神的贡献。
2、测试环境说明
下面通过在测试环境下搭建ELK日志系统来对ELK进行更加深入的认识。
软件环境:
logstash-2.3.3.tar.gz marvel-2.3.3.tar.gzelasticsearch-2.3.3.zip kibana-4.5.1-linux-x64 marvel-agent-2.3.3.zip elasticsearch-head-master.zip license-2.3.3.zip jdk-8u101-linux-x64.tar.gz kafka_2.10-0.10.0.1.tgz zookeeper-3.4.6.tar.gz
服务器和角色:
192.168.1.101 kafka+zookeeper
192.168.1.102 kafka+zookeeper
192.168.1.103 kafka+zookeeper logstash shipper
192.168.1.104 logstash shipper
192.168.1.105 elasticsearch kibana
192.168.1.106 logstash indexer
说明:
本篇分别对上边的物理节点标识为node1—node6,下面都以这种称谓。
Node1和nide2以及node3三台节点上搭建kafka+zookeeper集群,另外node3本身也是一个nginx服务器。
Node4上搭建nginx服务器,和node3一起负责logstash日志数据生产端,把nginx日志传给kafka集群。
日志传输方向:
Nginx日志-->logstash shipper-->kafka+zookeeper-->logstash indexer-->elasticsearch
最后kibana负责展示es收集到的数据
3、 配置java环境
各节点配置jdk1.8的环境
/home/apps # tar -zxvf jdk-8u101-linux-x64.tar.gz
/home/apps # ln -sv /home/apps/jdk1.8.0_101/usr/local/jdk1.8.0_101
`/usr/local/jdk1.8.0_101' ->`/home/apps/jdk1.8.0_101'
编辑环境变量文件,注释掉之前的java环境配置,添加下面的内容
/home/apps # vi /etc/profile
JAVA_HOME=/usr/local/jdk1.8.0_101
PATH=$JAVA_HOME/bin:$PATH
CLASSPATH=$JAVA_HOME/jre/lib/ext:$JAVA_HOME/lib/tools.jar
export PATH JAVA_HOME CLASSPATH