一、简介

ELK由Elasticsearch、Logstash和Kibana三部分组件组成;

Elasticsearch是个开源分布式搜索引擎,它的特点有:分布式,零配置,自动发现,索引自动分片,索引副本机制,restful风格接口,多数据源,自动搜索负载等。

Logstash是一个完全开源的工具,它可以对你的日志进行收集、分析,并将其存储供以后使用

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

二、工作流程

在需要收集日志的服务器(本文用nginx服务器,地址为192.168.5.148)上部署logstash,用于监控并过滤收集日志,将过滤后的内容按照特定的格式收集在一起交给全文搜索服务ElasticSearch,可以用ElasticSearch进行自定义搜索通过Kibana 来结合自定义搜索进行页面展示。

三、ELK帮助手册

ELK官网:https://www.elastic.co/

ELK官网文档:https://www.elastic.co/guide/index.html

ELK中文手册:http://kibana.logstash.es/content/elasticsearch/monitor/logging.html

视频教程:http://edu.51cto.com/index.php?do=lession&id=101607

四、安装平台以及软件

运行平台:Ubuntu 14.04 32位系统

软件:Logstash-5.1.2、Elasticsearch-5.1.2、kibana-5.1.2

软件安装命令: 在下载的三个组件,解压后,在各自的目录下的bin目录中,运行各自的执行文件即可。

注意: Logstash的运行方式为:./bin/logstash -f ./脚本配置文件

elasticsearch要在普通用户下运行,在root下运行系统会报错。如果在普通用户下提示运行权限问题,只要设置下可执行权限即可。命令:chown 普通用户名.普通用户名 elasticsearch文件夹名 -R

五、具体流程

1、首先运行nginx,确保nginx服务能够正常运行,如果不能,开启nginx即可 (etc/init.d/nginx start)。输入服务器ip地址,如果出现欢迎界面,即表示nginx服务器正常运行。

2、改变nginx日志保存格式,便于后面Logstash分析、过滤从而以特定的格式输出。

打开/etc/nginx/nginx.conf,在http段中插入如下内容把nginx日志格式保存为特定格式

log_format logstash_json '{"@timestamp":"$time_iso8601",'

'"client_ip":"$remote_addr",'

'"remote_user":"$remote_user",'

'"body_bytes_sent":"$body_bytes_sent",'

'"request_time":"$request_time",'

'"status":"$status",'

'"request":"$request",'

'"request_method":"$request_method",'

'"http_referrer":"$http_referer",'

'"body_bytes_sent":"$body_bytes_sent",'

'"http_x_forwarded_for":"$http_x_forwarded_for",'

'"http_user_agent":"$http_user_agent"}';

access_log /var/log/nginx/access.log logstash_json;

3、在logstash 目录下新建一个目录,用来存放logstash执行的脚本。脚本示例如下:

input {

file {

path => ["/var/log/nginx/access.log"]

start_position => "beginning"

type => "nginx"

codec => "json"

}

}

output {

stdout { codec => rubydebug{} }

elasticsearch {

hosts => ["192.168.5.148:9200"]

index => "logstash-%{+YYYY.MM.dd}"

}

}

如上脚本可以把nginx日志按照json格式输出,并存储到elasticsearch,然后传给kibana显示分析。

logstash过滤nginx日志按照json格式输出原理:客户端访问nginx服务器,nginx服务器会自动产生访问日志保存到nginx服务器的access.log中,当我们给nginx服务器的日志设置了json格式后,logstash的file{}插件才能够识别nginx日志并按照json格式切割(解析)输出。

4、运行顺序:

nginx——>elasticsearch——>logstash——>kibana

运行成功的标志是elk三个组建均会阻塞。

然后刷新一下192.168.5.148这个地址,也即访问nginx服务器,即可产生数据.

5、kibana使用

在浏览器(用火狐或者google chrome,不要用360浏览器)地址栏输入 服务器地址:5601,即可访问Kibana主页。

如果以上步骤都没问题,kibana就会接受到elasticsearch传给它的数据并显示出来,如下图,如果没有数据产生,那么就会提示”no result”。

接下来,点击左侧”visualize”模块,选择“create new visualization”,选择一个视图显示数据分析图标。以饼图为例。选择“pipe chart”,进入饼图界面,在”buckets”下面选择过滤条件。

其中aggregation,下拉选择“Terms”,field,下拉选择“client_ip”,点击“apply changes”按钮,即可按照过滤规则生成饼状图。

其他分析图表(柱状图、曲线图)都有类似的设置。

6、kibana tile map地图定位功能。

1、所具备的工具:logstash的filter.geoip{}插件、GeoLite2-City.mmdb城市ip数据库。

2、修改第五步中第3点logstash的执行脚本,增加filter.geoip()插件。

示例如下:(相关附件也已同步)

input {

file {

path => ["/var/log/nginx/access.log"]

start_position => "beginning"

type => "nginx"

codec => "json"

}

}

filter {

geoip {

source => “client_ip” ------”client_ip”为日志中的ip地址字段名

database => “GeoLite2-City.mmdb的绝对路径”

target => “geoip”

add_field => [ “[geoip][coordinates]”, “%[geoip][longitude]” ]

add_field => [ “[geoip][coordinates]”,”%[geoip][latitude]” ]

}

mutate [

convert => [ “[geoip][coordinates]”,”float” ]

}

}

output {

stdout { codec => rubydebug{} }

elasticsearch {

hosts => ["192.168.5.148:9200"]

index => "logstash-%{+YYYY.MM.dd}"

}

}

3、由于GeoLite2-City.mmdb只存有外网ip的地址,因此用内网Ip测试geoip无法解析,会造成失败。因此,可以在nginx日志中手动添加外网Ip地址,只有外网ip地址geoip才能解析成功。

4、重新启动kibana,在visualize模块中选择tile map,进入tile map界面,然后Aggregation选择Geohash,Field选择geoip.location,点击Apply changes即可在右边的地图界面,亮点标示ip地址对应的城市。

5、geoip解析日志中的ip地址并定位城市的原理:GeoLite2-City.mmdb是一个大型的ip数据库,内含ip地址及其对应的城市名。geoip插件会根据json解析出来的日志中的ip地址,去GeoLite2-City.mmdb中寻找对应的ip地址,然后把ip地址对应的一系列包括城市名、国家等等信息给解析出来,然后一并发给elasticsearch,最后通过kibana的地图功能进行定位并显示。

这是作者在工作中的实践总结,原创,转载需注明出处。

ELK日志分析系统(原创)的更多相关文章

  1. ELK日志分析系统简单部署

    1.传统日志分析系统: 日志主要包括系统日志.应用程序日志和安全日志.系统运维和开发人员可以通过日志了解服务器软硬件信息.检查配置过程中的错误及错误发生的原因.经常分析日志可以了解服务器的负荷,性能安 ...

  2. Rsyslog+ELK日志分析系统

    转自:https://www.cnblogs.com/itworks/p/7272740.html Rsyslog+ELK日志分析系统搭建总结1.0(测试环境) 因为工作需求,最近在搭建日志分析系统, ...

  3. 十分钟搭建和使用ELK日志分析系统

    前言 为满足研发可视化查看测试环境日志的目的,准备采用EK+filebeat实现日志可视化(ElasticSearch+Kibana+Filebeat).题目为“十分钟搭建和使用ELK日志分析系统”听 ...

  4. ELK日志分析系统-Logstack

    ELK日志分析系统 作者:Danbo 2016-*-* 本文是学习笔记,参考ELK Stack中文指南,链接:https://www.gitbook.com/book/chenryn/kibana-g ...

  5. elk 日志分析系统Logstash+ElasticSearch+Kibana4

    elk 日志分析系统 Logstash+ElasticSearch+Kibana4 logstash 管理日志和事件的工具 ElasticSearch 搜索 Kibana4 功能强大的数据显示clie ...

  6. 《ElasticSearch6.x实战教程》之实战ELK日志分析系统、多数据源同步

    第十章-实战:ELK日志分析系统 ElasticSearch.Logstash.Kibana简称ELK系统,主要用于日志的收集与分析. 一个完整的大型分布式系统,会有很多与业务不相关的系统,其中日志系 ...

  7. Docker笔记(十):使用Docker来搭建一套ELK日志分析系统

    一段时间没关注ELK(elasticsearch —— 搜索引擎,可用于存储.索引日志, logstash —— 可用于日志传输.转换,kibana —— WebUI,将日志可视化),发现最新版已到7 ...

  8. ELK 日志分析系统的部署

    一.ELK简介 ElasticSearch介绍Elasticsearch是一个基于Lucene的搜索服务器. 它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口. Elasti ...

  9. Rsyslog+ELK日志分析系统搭建总结1.0(测试环境)

    因为工作需求,最近在搭建日志分析系统,这里主要搭建的是系统日志分析系统,即rsyslog+elk. 因为目前仍为测试环境,这里说一下搭建的基础架构,后期上生产线再来更新最后的架构图,大佬们如果有什么见 ...

  10. ELK日志分析系统搭建

    之前一段时间由于版本迭代任务紧,组内代码质量不尽如人意.接二连三的被测试提醒后台错误之后, 我们决定搭建一个后台日志分析系统, 经过几个方案比较后,选择的相对更简单的ELK方案. ELK 是Elast ...

随机推荐

  1. PAT 1010 Radix(X)

    1010 Radix (25 分)   Given a pair of positive integers, for example, 6 and 110, can this equation 6 = ...

  2. Java-Class-FC:java.lang.StringBuilder

    ylbtech-Java-Class-FC:java.lang.StringBuilder 1.返回顶部   2.返回顶部 1. @Override public String toString() ...

  3. css布局方面小结

    1 ####css选择器 1 .left-word.moreinfor{} 这样是找不到选择器的.中间需要一个空格 但是div.moreinfor 是可以的. 2 max-width的作用: p元素只 ...

  4. 剑指offer——64和为s的数字

    题目描述 输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的. 输出描述: 对应每个测试案例,输出两个数,小的先输出. 题解 ...

  5. smf和mmf分别是什么?

    单模光纤/缩写SMF(single mode fiber) 多模光纤/缩写MMF(multi mode (optical) fibre)

  6. Netty 源码学习——客户端流程分析

    Netty 源码学习--客户端流程分析 友情提醒: 需要观看者具备一些 NIO 的知识,否则看起来有的地方可能会不明白. 使用版本依赖 <dependency> <groupId&g ...

  7. squid+stunnel搭建代理服务器

    设备:需要两台服务器 一,外部服务器  属于外网  ip 为 47.106.8.100 1,安装squid软件 2,vi  /etc/squid/squid.conf acl localnet src ...

  8. Ibatis sql语句1

    <?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE sqlMap PUBLIC "-/ ...

  9. centos7.2下快速安装zabbix4.0

    本笔记是基于CentOS 7.2下最小化安装的操作系统搭建的Zabbix4.0环境,主要用于做一些企业路由器和交换机等设备的运行状态监控. 1.安装epel源 yum -y install epel- ...

  10. keepalived高可用haproxy负载均衡varnish缓存wordpress的动静分离(第一次配置成功)

    haproxy和nginx都可以作为七层和四层反代服务器对外提供服务,此文通过haproxy和keealived配置varnish搭建wordpress的动静分离站点 一.实验环境 五台虚拟机: ha ...